操作系統(tǒng)課程設計_第1頁
操作系統(tǒng)課程設計_第2頁
操作系統(tǒng)課程設計_第3頁
操作系統(tǒng)課程設計_第4頁
操作系統(tǒng)課程設計_第5頁
已閱讀5頁,還剩21頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

湖南科技大學計算機科學與工程學院

操作系統(tǒng)課程設計報告

學號:********姓名:**班級:***指導老師:***完畢時間:****.**.**目錄實驗一Windows進程管理實驗二Linux進程管理實驗三互斥與同時實驗四銀行家算法的模擬與實現(xiàn)實驗五內(nèi)存管理實驗六磁盤調(diào)度實驗七進程間通信實驗一Windows進程管理實驗目的學會使用VC編寫基本的Win32ConsolApplication(控制臺應用程序)。

2)通過創(chuàng)立進程、觀察正在運行的進程和終止進程的程序設計和調(diào)試操作,進一步熟悉操作系統(tǒng)的進程概念,理解Windows進程的“一生”。

3)通過閱讀和分析實驗程序,學習創(chuàng)立進程、觀察進程、終止進程以及父子進程同時的基本程序設計辦法。二、實驗內(nèi)容和環(huán)節(jié)(1)編寫基本的Win32ConsolApplication

環(huán)節(jié)1:登錄進入Windows系統(tǒng),啟動VC++6.0。

環(huán)節(jié)2:在“FILE”菜單中單擊“NEW”子菜單,在“projects”選項卡中選擇“Win32ConsolApplication”,然后在“Projectname”處輸入工程名,在“Location”處輸入工程目錄。創(chuàng)立一種新的控制臺應用程序工程。

環(huán)節(jié)3:在“FILE”菜單中單擊“NEW”子菜單,在“Files”選項卡中選擇“C++SourceFile”,然后在“File”處輸入C/C++源程序的文獻名。

環(huán)節(jié)4:將清單1-1所示的程序清單復制到新創(chuàng)立的C/C++源程序中。編譯成可執(zhí)行文獻。

環(huán)節(jié)5:在“開始”菜單中單擊“程序”-“附件”-“命令提示符”命令,進入Windows“命令提示符”窗口,然后進入工程目錄中的debug子目錄,執(zhí)行編譯好的可執(zhí)行程序,列出運行成果(如果運行不成功,則可能的因素是什么?)如果運行不成功可能是途徑有問題或者沒有通過編譯。

(2)創(chuàng)立進程

本實驗顯示了創(chuàng)立子進程的基本框架。該程序只是再一次地啟動本身,顯示它的系統(tǒng)進程ID和它在進程列表中的位置。

環(huán)節(jié)1:創(chuàng)立一種“Win32ConsolApplication”工程,然后拷貝清單1-2中的程序編譯成可執(zhí)行文獻。

環(huán)節(jié)2:在“命令提示符”窗口運行環(huán)節(jié)1中生成的可執(zhí)行文獻,列出運行成果。按下ctrl+alt+del,調(diào)用windows的任務管理器,統(tǒng)計進程有關的行為屬性。運行成果:

環(huán)節(jié)3:在“命令提示符”窗口加入?yún)?shù)重新運行生成的可執(zhí)行文獻,列出運行成果。按下ctrl+alt+del,調(diào)用windows的任務管理器,統(tǒng)計進程有關的行為屬性。運行成果:

環(huán)節(jié)4:nclone為線程開始運行的編號,當nclone的值不不大于或者等于c_nCloneMax時程序運行一次即跳出;變量的定義和初始化辦法(位置)對程序的執(zhí)行成果有影響;(3)父子進程的簡樸通信及終止進程環(huán)節(jié)1:創(chuàng)立一種“Win32ConsolApplication”工程,然后拷貝清單1-3中的程序,編譯成可執(zhí)行文獻。環(huán)節(jié)2:在VC的工具欄單擊“ExecuteProgram”(執(zhí)行程序)按鈕,或者按Ctrl+F5鍵,或者在“命令提示符”窗口運行環(huán)節(jié)1中生成的可執(zhí)行文獻,列出運行成果。

環(huán)節(jié)3:按源程序中注釋中的提示,修改源程序1-3,編譯執(zhí)行(執(zhí)行前請先保存已經(jīng)完畢的工作),列出運行成果。在程序中加入跟蹤語句,或調(diào)試運行程序,同時參考MSDN中的協(xié)助文獻CreateProcess()的使用辦法,理解父子進程如何傳遞參數(shù)。給出程序執(zhí)行過程的大概描述。通過main(intargc,char*argv[]?)1程

環(huán)節(jié)4:按源程序中注釋中的提示,修改源程序1-3,編譯執(zhí)行,列出運行成果。

環(huán)節(jié)5:參考MSDN中的幫助文件CreateMutex()、OpenMutex()、ReleaseMutex()和WaitForSingleObject()的使用辦法,理解父子進程如何運用互斥體進行同時的。給出父子進程同時過程的一種大概描述。CreateMutex()創(chuàng)立互斥體,OpenMutex()打開互斥體,ReleaseMutex()釋放互斥體,WaitForSingleObject()檢測hHandle事件的信號狀態(tài),通過這些辦法可實現(xiàn)現(xiàn)在只有一種進程被創(chuàng)立或使用,實現(xiàn)進程的同時。首先,進程創(chuàng)立一種互斥體,打開互斥體,如碰到互斥,則進行解決,解決完后,釋放互斥體,下面便是進程等待一種要解決的項目實驗心得與體會每個進程都從調(diào)用CreateProcess()?API函數(shù)開始,該函數(shù)的任務是在對象管理器子系統(tǒng)內(nèi)初始化進程對象。每一進程都以調(diào)用ExitProcess()或TerminateProcess()API函數(shù)終止。普通應用程序的框架負責調(diào)用?ExitProcess()函數(shù)。進程都是有始有終,其中有中斷,尚有解決進程間互斥的函數(shù),已達成進程的完畢后自然終止。實驗二Linux進程管理實驗目的通過進程的創(chuàng)立、撤銷和運行加深對進程概念和進程并發(fā)執(zhí)行的理解,明確進程和程序之間的區(qū)別。背景知識在Linux中創(chuàng)立子進程要使用fork()函數(shù),執(zhí)行新的命令要使用exec()系列函數(shù),等待子進程結束使用wait()函數(shù),結束終止進程使用exit()函數(shù)。

fork()原型以下:pid_tfork(void);

fork建立一種子進程,父進程繼續(xù)運行,子進程在同樣的位置執(zhí)行同樣的程序。對于父進程,fork()返回子進程的pid,對于子進程,fork()返回0。出錯時返回-1。

exec系列有6個函數(shù),原型以下:

externchar**environ;

intexeclp(constchar*file,constchar*arg,...);

intexecle(constchar*path,constchar*arg,...,char*constenvp[]);

intexecv(constchar*path,char*constargv[]);

intexecve(constchar*filename,char*constargv[],char*constenvp[]);

intexecvp(constchar*file,char*constargv[]);

exec系列函數(shù)用新的進程映象置換現(xiàn)在的進程映象.這些函數(shù)的第一種參數(shù)是待執(zhí)行程序的途徑名(文獻名)。這些函數(shù)調(diào)用成功后不會返回,其進程的正文(text),數(shù)據(jù)(data)和棧(stack)段被待執(zhí)行程序程序覆蓋。但是進程的PID和全部打開的文獻描述符沒有變化,同時懸掛信號被去除,信號重置為缺省行為。

在函數(shù)execl,execlp,和execle中,constchar*arg以及省略號代表的參數(shù)可被視為arg0,arg1,...,argn。它們合起來描述了指向NULL結尾的字符串的指針列表,即執(zhí)行程序的參數(shù)列表。作為商定,第一種arg參數(shù)應當指向執(zhí)行程序名本身,參數(shù)列表必須用NULL指針結束。

execv和execvp函數(shù)提供指向NULL結尾的字符串的指針數(shù)組作為新程序的參數(shù)列表。作為商定,指針數(shù)組中第一種元素應當指向執(zhí)行程序名本身。指針數(shù)組必須用NULL指針結束。

execle函數(shù)同時闡明了執(zhí)行進程的環(huán)境(environment),它在NULL指針背面規(guī)定一種附加參數(shù),NULL指針用于結束參數(shù)列表,或者說,argv數(shù)組。這個附加參數(shù)是指向NULL結尾的字符串的指針數(shù)組,它必須用NULL指針結束。其它函數(shù)從目邁進程的environ外部變量中獲取新進程的環(huán)境。

execlp和execvp可根據(jù)path搜索適宜的程序運行,其它則需要給出程序全途徑。

execve()類似execv(),但是加上了環(huán)境的解決。

wait(),waitpid()可用來等待子進程結束。函數(shù)原型:

#include<sys/wait.h>

pid_twait(int*stat_loc);

pid_twaitpid(pid_tpid,int*stat_loc,intoptions);當進程調(diào)用wait,它將進入睡眠狀態(tài)直到有一種子進程結束。wait函數(shù)返回子進程的進程id,stat_loc中返回子進程的退出狀態(tài)。

waitpid的第一種參數(shù)pid的意義:

pid>0:等待進程id為pid的子進程。

pid==0:等待與自己同組的任意子進程。pid==-1:等待任意一種子進程

pid<-1:等待進程組號為-pid的任意子進程。

因此,wait(&stat)等價于waitpid(-1,&stat,0),waitpid第三個參數(shù)option能夠是0,WNOHANG,WUNTRACED或這幾者的組合。三、實驗內(nèi)容與環(huán)節(jié)(1)進程的創(chuàng)立任務規(guī)定:編寫一段程序,使用系統(tǒng)調(diào)用fork()創(chuàng)立兩個子進程。當此程序行在系統(tǒng)中有一種父進程和兩個子進程活動。讓每一種進程在屏幕上顯示一種字符:父進程顯示字符“a”;兩子進程分別顯示字符“b”和字符“c”。

環(huán)節(jié)1:使用vi或gedit新建一種fork_demo.c程序,然后拷貝清單2-1中的程序,使用cc或者gcc編譯成可執(zhí)行文獻fork_demo。例如,能夠使用gcc–ofork_demofork_demo.c完畢編譯。

環(huán)節(jié)2:在命令行輸入./fork_demo運行該程序。子進程執(zhí)行新任務任務規(guī)定:編寫一段程序,使用系統(tǒng)調(diào)用fork()創(chuàng)立一種子進程。子進程通過系統(tǒng)調(diào)用exec更換自己原有的執(zhí)行代碼,轉去執(zhí)行Linux命令/bin/ls(顯示現(xiàn)在目錄的列表),然后調(diào)用exit()函數(shù)結束。父進程則調(diào)用waitpid()等待子進程結束,并在子進程結束后顯示子進程的標記符,然后正常結束。程序執(zhí)行過程如圖2-1所示。

環(huán)節(jié)1:使用vi或gedit新建一種exec_demo.c程序,然后拷貝清單2-2中的程序(該程序的執(zhí)行如圖2-1所示),使用cc或者gcc編譯成可執(zhí)行文獻exec_demo。例如,能夠使用gcc–oexec_demoexec_demo.c完畢編譯。

環(huán)節(jié)2:在命令行輸入./exec_demo運行該程序。

環(huán)節(jié)3:觀察該程序在屏幕上的顯示成果,并分析。圖2-1exec_demo.c程序的執(zhí)行過程實驗心得及體會這個課題的實驗讓我學會了Windows系統(tǒng)下虛擬機中的基本程序的編寫,第一次在虛擬級的環(huán)境中編寫了這一種程序。并通過進程的創(chuàng)立。撤銷和運行加深對進程概念和進程并發(fā)執(zhí)行的理解,明確了進程和程序之間的區(qū)別。實驗三互斥與同時一、實驗目的1)回想操作系統(tǒng)進程、線程的有關概念,加深對Windows線程的理解。2)理解互斥體對象,運用互斥與同時操作編寫生產(chǎn)者-消費者問題的并發(fā)程序,加深對P(即semWait)、V(即semSignal)原語以及運用P、V原語進行進程間同時與互斥操作的理解。二、實驗內(nèi)容和環(huán)節(jié)1)生產(chǎn)者消費者問題環(huán)節(jié)1:創(chuàng)立一種“Win32ConsolApplication”工程,然后拷貝清單3-1中的程序,編譯成可執(zhí)行文獻。

環(huán)節(jié)2:在“命令提示符”窗口運行環(huán)節(jié)1中生成的可執(zhí)行文獻,列出運行成果。

環(huán)節(jié)3:認真閱讀源程序,找出創(chuàng)立線程的WINDOWSAPI函數(shù),回答下列問題:線程的第一種執(zhí)行函數(shù)是什么(從哪里開始執(zhí)行)?它位于創(chuàng)立線程的API函數(shù)的第幾個參數(shù)中?答:第一種執(zhí)行函數(shù)是Producer;位于創(chuàng)立線程API函數(shù)的第三個參數(shù)中

環(huán)節(jié)4:修改清單3-1中的程序,調(diào)節(jié)生產(chǎn)者線程和消費者線程的個數(shù),使得消費者數(shù)目大與生產(chǎn)者,看當作果有何不同。察看運行成果,從中你能夠得出什么結論?當生產(chǎn)者數(shù)目不不大于消費者時,生產(chǎn)者需要等待消費者;當消費者數(shù)目不不大于生產(chǎn)者時,消費者要經(jīng)常等待.

環(huán)節(jié)5:修改清單3-1中的程序,按程序注釋中的闡明修改信號量EmptySemaphore的初始化辦法,看當作果有何不同。

環(huán)節(jié)6:根據(jù)環(huán)節(jié)4的成果,并查看MSDN,回答下列問題:

1)CreateMutex中有幾個參數(shù),各代表什么含義。有三個參數(shù);1)2)3)

2)CreateSemaphore中有幾個參數(shù),各代表什么含義,信號量的初值在第幾個參數(shù)中。有四個參數(shù);1)表達采用不允許繼承的默認描述符;2)設立信號機的初始計數(shù);3)設立信號機的最大計數(shù);指定信號機對象的名稱.3)程序中P、V原語所對應的實際WindowsAPI函數(shù)是什么,寫出這幾條語句。CreateMutex能用CreateSemaphore替代嗎?嘗試修改程序3-1,將信號量Mutex完全用CreateSemaphore及有關函數(shù)實現(xiàn)。寫出要修改的語句。能夠;Mutex=CreateSemaphore(NULL,1,1,NULL);P:WaitForSingleObject(Mutex,INFINITE);V:ReleaseSemaphore(Mutex,1,NULL);實驗總結這次實驗加深了對Windows線程的理解,理解互斥體對象,通過對生產(chǎn)者消費者等進程間同時與互斥典型算法的實現(xiàn),加深對P、V原語以及運用P、V原語進行進程間同時與互斥操作的理解,將信號量看做生產(chǎn)或消費的一種對象,將信號量的生成和銷毀操作猶如P操作和V操作同樣,生成者消費者問題模擬的就是對信號量的生成和銷毀,其中牽涉了信號量的同時,這也是該問題為什么成為同時的典型問題的因素。實驗四銀行家算法的模擬與實現(xiàn)一、實驗目的(1)進一步理解進程的并發(fā)執(zhí)行。

(2)加強對進程死鎖的理解,理解安全狀態(tài)與不安全狀態(tài)的概念。

(3)掌握使用銀行家算法避免死鎖問題。二、實驗基本知識與原理1)基本概念死鎖:多個進程在執(zhí)行過程中,由于競爭資源會造成互相等待的局面。如果沒有外力作用,這些進程將永遠無法向前推動。此時稱系統(tǒng)處在死鎖狀態(tài)或者系統(tǒng)產(chǎn)生了死鎖。

安全序列:系統(tǒng)按某種次序并發(fā)進程,并使它們都能達成獲得最大資源而次序完畢的序列為安全序列。

安全狀態(tài):能找到安全序列的狀態(tài)稱為安全狀態(tài),安全狀態(tài)不會造成死鎖。

不安全狀態(tài):在現(xiàn)在狀態(tài)下不存在安全序列,則系統(tǒng)處在不安全狀態(tài)。銀行家算法銀行家算法顧名思義是來源于銀行的借貸業(yè)務,一定數(shù)量的本金要滿足多個客戶的借貸周轉,為了避免銀行家資金無法周轉而倒閉,對每一筆貸款,必須考察其與否能限期償還。

在操作系統(tǒng)中研究資源分派方略時也有類似問題,系統(tǒng)中有限的資源要供多個進程使用,必須確保得到的資源的進程能在有限的時間內(nèi)償還資源,以供其它進程使用資源。如果資源分派不當,就會發(fā)生進程循環(huán)等待資源,則進程都無法繼續(xù)執(zhí)行下去的死鎖現(xiàn)象。

當一進程提出資源申請時,銀行家算法執(zhí)行下列環(huán)節(jié)以決定與否向其分派資源:

1)檢查該進程所需要的資源與否已超出它所宣布的最大值。

2)檢查系統(tǒng)現(xiàn)在與否有足夠資源滿足該進程的請求。

3)系統(tǒng)試探著將資源分派給該進程,得到一種新狀態(tài)。具體設計(1)數(shù)據(jù)構造資源總量向量Resource,m維,表達m種資源的總量??捎觅Y源向量Available,m維,表達未分派的多個可用資源數(shù)量。需求矩陣Claim,n*m矩陣,表達n個進程對m類資源的最大需求。分派矩陣Allocation,n*m矩陣,表達n個進程已分派的多個資源數(shù).(2)編程實現(xiàn)/*安全性檢查函數(shù)*/intchkerr()//在假定分派資源的狀況下檢查系統(tǒng)的安全性{intWORK[N],FINISH[M],temp[M];//temp[]用來統(tǒng)計進程安全執(zhí)行的次序inti,j,m,k=0,count;for(i=0;i<M;i++)FINISH[i]=FALSE;for(j=0;j<N;j++)WORK[j]=AVAILABLE[j];//把可運用資源數(shù)賦給WORK[]for(i=0;i<M;i++){count=0;for(j=0;j<N;j++)if(FINISH[i]==FALSE&&NEED[i][j]<=WORK[j])count++;if(count==N)//當進程各類資源都滿足NEED<=WORK時{for(m=0;m<N;m++)WORK[m]=WORK[m]+ALLOCATION[i][m];FINISH[i]=TRUE;temp[k]=i;//統(tǒng)計下滿足條件的進程k++;i=-1;}}for(i=0;i<M;i++)if(FINISH[i]==FALSE){printf("系統(tǒng)不安全!!!本次資源申請不成功!!!\n");return1;}printf("\n");printf("經(jīng)安全性檢查,系統(tǒng)安全,本次分派成功。\n");printf("\n");printf("本次安全序列:");for(i=0;i<M;i++)//打印安全系統(tǒng)的進程調(diào)用次序{printf("進程");printf("%d",temp[i]);if(i<M-1)printf("->");}printf("\n");return0;}/*資源向量變化*/voidrstordata(intk){intj;for(j=0;j<N;j++){AVAILABLE[j]=AVAILABLE[j]+Request[j];ALLOCATION[k][j]=ALLOCATION[k][j]-Request[j];NEED[k][j]=NEED[k][j]+Request[j];}}/*系統(tǒng)對進程請求響應,資源向量變化*/voidchangdata(intk){intj;for(j=0;j<N;j++){AVAILABLE[j]=AVAILABLE[j]-Request[j];ALLOCATION[k][j]=ALLOCATION[k][j]+Request[j];NEED[k][j]=NEED[k][j]-Request[j];}}成果與分析實驗心得與體會設計重要由兩部分構成。第一部分:銀行家算法(掃描)如果Request<=Need,則轉2;否則,出錯如果Request<=Available,則轉向3,否則等待系統(tǒng)試探分派請求的資源給進程4.系統(tǒng)執(zhí)行安全性算法第二部分重要是進行資源的修改。在這里能夠修改資源的可用資源和資源還需求資源。多個進程同時運行時,系統(tǒng)根據(jù)各類系統(tǒng)資源的最大需求和各類系統(tǒng)的剩余資源為進程安排安全序列,使得系統(tǒng)能快速且安全地運行進程,不至發(fā)生死鎖。銀行家算法是避免死鎖的重要辦法,其思路在諸多方面都非常值得我們來學習借鑒。實驗五內(nèi)存管理一、實驗目的(1)通過對Windowsxp“任務管理器”、“計算機管理”、“我的電腦”屬性、“系統(tǒng)信息”、“系統(tǒng)監(jiān)視器”等程序的應用,學習如何察看和調(diào)節(jié)Windows的內(nèi)存性能,加深對操作系統(tǒng)內(nèi)存管理、虛擬存儲管理等理論知識的理解。

(2)理解Windowsxp的內(nèi)存構造和虛擬內(nèi)存的管理,理解進程的虛擬內(nèi)存空間和物理內(nèi)存的映射關系。二、實驗內(nèi)容和環(huán)節(jié)(1)觀察和調(diào)節(jié)WindowsXP的內(nèi)存性能。環(huán)節(jié)1:閱讀“背景知識”,請回答:

1)什么是“分頁過程”?當Windows求助于硬盤以獲得虛擬內(nèi)存時,這個過程被稱為分頁(paging)。分頁就是將信息從主內(nèi)存移動到磁盤進行臨時存儲的過程。

2)什么是“內(nèi)存共享”?應用程序經(jīng)常需要彼此通信和共享信息。從性能的角度來看,共享內(nèi)存的能力大大減少了應用程序使用的內(nèi)存數(shù)量。運行一種應用程序的多個副本時,每一種實例都能夠使用相似的代碼和數(shù)據(jù),這意味著不必維護所加載應用程序代碼的單獨副本并使用相似的內(nèi)存資源。無論正在運行多少個應用程序?qū)嵗?,充足支持應用程序代碼所需求的內(nèi)存數(shù)量都相對保持不變。

3)什么是“未分頁合并內(nèi)存”和“分頁合并內(nèi)存”?未分頁合并內(nèi)存:包含必須駐留在內(nèi)存中的占用代碼或數(shù)據(jù),這些程序在系統(tǒng)重新啟動或關閉之前始終駐留在內(nèi)存的特定部分中。內(nèi)存中包含的進程保存在主內(nèi)存中,并且不能交換到磁盤上物理內(nèi)存的這個部分用于內(nèi)核模式操作(例如,驅(qū)動程序)和必須保存在主內(nèi)存中才干有效工作的其它進程。沒有主內(nèi)存的這個部分,內(nèi)核組件就將是可分頁的,系統(tǒng)本身就有變得不穩(wěn)定的危險。分頁合并內(nèi)存:存儲遲早需要的可分頁代碼或數(shù)據(jù)的內(nèi)存部分,即使能夠?qū)⒎猪摵喜?nèi)存中的任何系統(tǒng)進程交換到磁盤上,但是它臨時存儲在主內(nèi)存的這一部分,以防系統(tǒng)立刻需要它。在將系統(tǒng)進程交換到磁盤上之前,Windows會交換其它進程。

Windowsxp中,未分頁合并內(nèi)存的最大限制是多少?最大限制為256MBWindowsxp分頁文獻默認設立的最小容量和最大容量是多少?環(huán)節(jié)2:登錄進入Windowsxp。

環(huán)節(jié)3:查看包含多個實例的應用程序的內(nèi)存需求。

1)啟動想要監(jiān)視的應用程序,例如Word。

2)右鍵單擊任務欄以啟動“任務管理器”。

3)在“Windows任務管理器”對話框中選定“進程”選項卡。

4)向下滾動在系統(tǒng)上運行的進程列表,查找想要監(jiān)視的應用程序。

請在表5-3中統(tǒng)計:

表5-3實驗統(tǒng)計映像名稱PIDCPUCPU時間內(nèi)存使用dwn.exe1640000:00:0816996KQQ.exe*323548000:00:082048KWps.exe*325836020:00:3859264K

“內(nèi)存使用”列顯示了該應用程序的一種實例正在使用的內(nèi)存數(shù)量。

5)啟動應用程序的另一種實例并觀察它的內(nèi)存需求。請描述使用第二個實例占用的內(nèi)存與使用第一種實例時的內(nèi)存對比狀況。環(huán)節(jié)4:未分頁合并內(nèi)存估算未分頁合并內(nèi)存大小的最簡樸辦法是使用“任務管理器”。未分頁合并內(nèi)存的預計值顯示在“任務管理器”的“性能”選項卡的“核心內(nèi)存”部分。

總數(shù)(K):8122*_1024分頁數(shù):328*1024未分頁(K):116*1024還能夠使用“任務管理器”查看一種獨立進程正在使用的未分頁合并內(nèi)存數(shù)量和分頁合并內(nèi)存數(shù)量。操作環(huán)節(jié)以下:1)單擊“Windows任務管理器”的“進程”選項卡,然后從“查看”菜單中選擇“選擇列”命令,顯示“進程”選項卡的可查看選項。

2)在“選擇列”對話框中,選定“頁面緩沖池”選項和“非頁面緩沖池”選項旁邊的復選框,然后單擊“擬定”按鈕。返回WindowsXp“任務管理器”的“進程”選項卡時,將看到其中增加顯示了各個進程占用的分頁合并內(nèi)存數(shù)量和未分頁合并內(nèi)存數(shù)量。仍以剛剛打開觀察的應用程序(例如Word)為例,請在表5-4中統(tǒng)計:

表5-4實驗統(tǒng)計映像名稱PIDCPUCPU時間內(nèi)存使用dwn.exe1640000:00:1217248KQQ.exe*323548000:00:1073888KWps.exe*325836020;01;1467088K從性能的角度來看,未分頁合并內(nèi)存越多,能夠加載到這個空間的數(shù)據(jù)就越多。擁有的物理內(nèi)存越多,未分頁合并內(nèi)存就越多。但未分頁合并內(nèi)存被限制為256MB,因此添加超出這個限制的內(nèi)存對未分頁合并內(nèi)存沒有影響。環(huán)節(jié)5:提高分頁性能。

在Windowsxp的安裝過程中,將使用持續(xù)的磁盤空間自動創(chuàng)立分頁文獻(pagefile.sys)。顧客能夠事先監(jiān)視變化的內(nèi)存需求并對的配備分頁文獻,使得當系統(tǒng)必須借助于分頁時的性能達成最高。

即使分頁文獻普通都放在系統(tǒng)分區(qū)的根目錄下面,但這并不總是該文獻的最佳位置。要想從分頁獲得最佳性能,應當首先檢查系統(tǒng)的磁盤子系統(tǒng)的配備,以理解它與否有多個物理硬盤驅(qū)動器。

1)在“開始”菜單中單擊“設立”–“控制面板”命令,雙擊“管理工具”圖標,再雙擊“計算機管理”圖標。

2)在“計算機管理”窗口的左格選擇“磁盤管理”管理單元來查看系統(tǒng)的磁盤配備。請在表5-5中統(tǒng)計:表5-5實驗統(tǒng)計卷布局類型文獻系統(tǒng)容量狀態(tài)簡樸基本4.88GB狀態(tài)良好(OEM分區(qū))C:簡樸基本NTFS100.00GB狀態(tài)良好(系統(tǒng),啟動,頁面文獻)D:簡樸基本NTFS30.00GB狀態(tài)良好(邏輯驅(qū)動器)E:簡樸基本NTFS30.00GB狀態(tài)良好(邏輯驅(qū)動器)F:簡樸基本NTFS100.00GB狀態(tài)良好(邏輯驅(qū)動器)如果系統(tǒng)只有一種硬盤,那么建議應當盡量為系統(tǒng)配備額外的驅(qū)動器。這是由于:Windowsxp最多能夠支持在多個驅(qū)動器上分布的16個獨立的分頁文獻。為系統(tǒng)配備多個分頁文獻能夠?qū)崿F(xiàn)對不同磁盤I/O請求的并行解決,這將大大提高I/O請求的分頁文獻性能。

環(huán)節(jié)6:計算分頁文獻的大小。

要想更改分頁文獻的位置或大小配備參數(shù),可按下列環(huán)節(jié)進行:

1)右鍵單擊桌面上的“我的電腦”(Win7為計算機)圖標并選定“屬性”(Win7為高級系統(tǒng)設立)。

2)在“高級”選項卡上單擊“性能選項”按鈕。

3)單擊對話框中的“虛擬內(nèi)存”區(qū)域中的“更改”按鈕。

請統(tǒng)計:

所選驅(qū)動器(C:)的頁面文獻大?。?/p>

驅(qū)動器:C:;可用空間:56362MB

初始大小(MB):最大值(MB):所選驅(qū)動器(D:)的頁面文獻大小:(如果有的話)

驅(qū)動器:D:可用空間:30622MB

全部驅(qū)動器頁面文獻大小的總數(shù):30622MB

允許的最小值:16MB推薦:12183MB現(xiàn)在已分派:8122MB

4)要想將另一種分頁文獻添加到現(xiàn)有配備,在“虛擬內(nèi)存”對話框中選定一種還沒有分頁文獻的驅(qū)動器,然后指定分頁文獻的初始值和最大值(以兆字節(jié)表達),單擊“設立”,然后單擊“擬定”。

5)要想更改現(xiàn)有分頁文獻的最大值和最小值,可選定分頁文獻所在的驅(qū)動器。然后指定分頁文獻的初始值和最大值,單擊“設立”按鈕,然后單擊“擬定”按鈕。

6)在“性能選項”對話框中單擊“擬定”按鈕。

7)單擊“擬定”按鈕以關閉“系統(tǒng)特性”對話框。(2)理解和檢測進程的虛擬內(nèi)存空間。

環(huán)節(jié)1:創(chuàng)立一種“Win32ConsolApplication”工程,然后拷貝清單5-1中的程序,編譯成可執(zhí)行文獻。

環(huán)節(jié)2:在VC的工具欄單擊“ExecuteProgram”(執(zhí)行程序)按鈕,或者按Ctrl+F5鍵,或者在“命令提示符”窗口運行環(huán)節(jié)1中生成的可執(zhí)行文獻。

環(huán)節(jié)3:根據(jù)運行成果,回答下列問題

虛擬內(nèi)存每頁容量為:4.00KB最小應用地址:0x00010000最大應用地址:0x7ffeffff現(xiàn)在可供應用程序使用的內(nèi)存空間為:1.99GB提示:可供應用程序使用的內(nèi)存空間事實上已經(jīng)減去了開頭與結尾兩個64KB的保護區(qū)。虛擬內(nèi)存空間中的64KB保護區(qū)是避免編程錯誤的一種Windows方式。任何對內(nèi)存中這一區(qū)域的訪問(讀、寫、執(zhí)行)都將引發(fā)一種錯誤陷阱,從而造成錯誤并終止程序的執(zhí)行。按committed、reserved、free等三種虛擬地址空間分別統(tǒng)計實驗數(shù)據(jù)。其中“描述”是指對該組數(shù)據(jù)的簡樸描述,例如,對下列一組數(shù)據(jù):

00010000–0001<8.00KB>Committed,READWRITE,Private

可描述為:含有READWRITE權限的已調(diào)配私有內(nèi)存區(qū)。

將系統(tǒng)現(xiàn)在的自由區(qū)(free)虛擬地址空間按表5-6格式統(tǒng)計。表5-6實驗統(tǒng)計地址大小虛擬地址空間類型訪問權限描述(60.0KB)FreeNOACCESS(60.0KB)FreeNOACCESS00294000-002a0000(48.0KB)FreeNOACCESS002a1000-002b0000(60.0KB)FreeNOACCESS(36.0KB)FreeNOACCESS(60.0KB)FreeNOACCESS(40.0KB)FreeNOACCESS(636KB)FreeNOACCESS(0.98MB)FreeNOACCESS(704KB)FreeNOACCESS提示:具體統(tǒng)計實驗數(shù)據(jù)在實驗活動中是必要的,但想想與否能夠簡化統(tǒng)計的方法?將系統(tǒng)現(xiàn)在的已調(diào)配區(qū)(committed)虛擬地址空間按表5-7格式統(tǒng)計。表5-7實驗統(tǒng)計地址大小虛擬地址空間類型訪問權限描述(64.0KB)CommittedREADWRITEMapped(4.00KB)CommittedREADWRITEPrivate(4.00KB)CommittedREADONLYImage00089000-0008c000(12.0KB)CommittedREADWRITEPrivate(16.0KB)CommittedREADWRITEPrivate00089000-0008c000(12.0KB)CommittedREADWRITEPrivate(16.0KB)CommittedREADWRITEPrivate(12.0KB)CommittedREADWRITEPrivate(16.0KB)CommittedREADONLYMapped002a0000-002a1000(4.00KB)CommittedREADWRITEPrivate將系統(tǒng)現(xiàn)在的保存區(qū)(reserved)虛擬地址空間按表5-8格式統(tǒng)計。表5-8實驗統(tǒng)計地址大小虛擬地址空間類型訪問權限描述(228KB)reservedREADONLYPrivate00090000-0028c000(1.98MB)ReservedREADONLYPrivat(124KB)ReservedREADONLYPrivate00593000-005a0000(52.0KB)ReservedREADONLYPrivate00656000-006d0000(488KB)ReservedREADONLYPrivate(1.44MB)ReservedREADONLYMapped(20.0KB)ReservedREADONLYMapped(840KB)ReservedREADONLYPrivate00bf4000-01f10000(19.1MB)ReservedREADONLYMapped(60.0KB)ReservedREADONLYImage實驗總結通過對Windowsxp“任務管理器”、“計算機管理”、“我的電腦”屬性、“系統(tǒng)信息”、“系統(tǒng)監(jiān)視器”等程序的應用,學習如何察看和調(diào)節(jié)Windows的內(nèi)存性能,加深對操作系統(tǒng)內(nèi)存管理、虛擬存儲管理等理論知識的理解。

理解Windowsxp的內(nèi)存構造和虛擬內(nèi)存的管理,理解進程的虛擬內(nèi)存空間和物理內(nèi)存的映射關系。實驗六磁盤調(diào)度實驗目的(1)理解磁盤構造以及磁盤上數(shù)據(jù)的組織方式。(2)掌握磁盤訪問時間的計算方式。(3)掌握慣用磁盤調(diào)度算法及其有關特性。二、實驗基本知識及原理1)磁盤數(shù)據(jù)的組織磁盤上每一條物理統(tǒng)計都有唯一的地址,該地址涉及三個部分:磁頭號(盤面好)、柱面號(磁道號)和扇區(qū)號。給定這三個量就能夠唯一地擬定一種地址。2)磁盤訪問時間的計算方式磁盤在工作室以恒定的速率旋轉。為確保讀或?qū)?,磁頭必須移動到所規(guī)定的磁道上,當所規(guī)定的扇區(qū)的開始位置旋轉到磁頭下時,開始讀或?qū)憯?shù)據(jù)。對磁盤的訪問時間涉及:尋道時間、旋轉延遲時間和傳輸時間。3)磁盤調(diào)度算法磁盤調(diào)度的目的是要盡量減少磁盤的尋道時間,以提高磁盤I/O系統(tǒng)的性能。先進先出算法:按訪問請求達成的先后次序進行調(diào)度。最短服務時間優(yōu)先算法:優(yōu)先選擇使磁頭臂從現(xiàn)在位置開始移動最少的磁盤I/O請求進行調(diào)度。SCAN(電梯算法):規(guī)定磁頭臂先沿一種方向移動,并在途中滿足全部未完畢的請求,直到它達成這個方向上的最后一種磁道?;蛘咴谶@個方向上沒有別的請求為止,后一種改善有時候稱作LOOK方略。然后倒轉服務方向,沿相反方向掃描,同樣按次序完畢全部請求。

C-SCAN(循環(huán)掃描)算法:在磁盤調(diào)度時,把掃描限定在一種方向,當沿某個方向訪問到最后一種磁道時,磁頭臂返回到磁盤的另一端,并再次開始掃描。具體設計//SCAN(電梯算法)voidSCAN(intarray[],intm){intnow;inttemp;inti,j;intsum=0;floatavg;for(i=0;i<m;i++){for(j=i+1;j<m;j++)//對磁道號進行從小到大排列{if(array[i]>array[j])//兩磁道號之間比較{temp=array[i];array[i]=array[j];array[j]=temp;}}}for(i=0;i<m;i++)//輸出排序后的磁道號數(shù)組printf("%d",array[i]);printf("\n請輸入現(xiàn)在的磁道號:");scanf("%d",&now);printf("磁道方向:沿磁道增大的方向");printf("\nSCAN調(diào)度成果:");for(i=0;i<m;i++){if(now<=array[i]){printf("%d",array[i]);sum=array[i]-now+sum;now=array[i];}else{j=i;temp=array[i];}}for(i=j;i>=0;i--){printf("%d",array[i]);sum=now-array[i]+sum;now=array[i];}avg=(float)sum/m;printf("\n移動的總道數(shù):%d\n",sum);printf("平均尋道長度:%f\n",avg);}//C-SCAN(循環(huán)掃描)算法voidCSCAN(intarray[],intm){intnow;inttemp;inti,j;intsum=0;floatavg;for(i=0;i<m;i++){for(j=i+1;j<m;j++)//對磁道號進行從小到大排列{if(array[i]>array[j])//兩磁道號之間比較{temp=array[i];array[i]=array[j];array[j]=temp;}

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論