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

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

湖南科技大學(xué)計(jì)算機(jī)科學(xué)與工程學(xué)院

操作系統(tǒng)課程設(shè)計(jì)報(bào)告

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

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

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

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

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

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

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

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

(2)創(chuàng)立進(jìn)程

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

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

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

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

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

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

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

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

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

fork建立一種子進(jìn)程,父進(jìn)程繼續(xù)運(yùn)行,子進(jìn)程在同樣的位置執(zhí)行同樣的程序。對于父進(jìn)程,fork()返回子進(jìn)程的pid,對于子進(jìn)程,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ù)用新的進(jìn)程映象置換現(xiàn)在的進(jìn)程映象.這些函數(shù)的第一種參數(shù)是待執(zhí)行程序的途徑名(文獻(xiàn)名)。這些函數(shù)調(diào)用成功后不會返回,其進(jìn)程的正文(text),數(shù)據(jù)(data)和棧(stack)段被待執(zhí)行程序程序覆蓋。但是進(jìn)程的PID和全部打開的文獻(xiàn)描述符沒有變化,同時懸掛信號被去除,信號重置為缺省行為。

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

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

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

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

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

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

#include<sys/wait.h>

pid_twait(int*stat_loc);

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

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

pid>0:等待進(jìn)程id為pid的子進(jìn)程。

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

pid<-1:等待進(jìn)程組號為-pid的任意子進(jìn)程。

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

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

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

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

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

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

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

環(huán)節(jié)3:認(rèn)真閱讀源程序,找出創(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)者線程和消費(fèi)者線程的個數(shù),使得消費(fèi)者數(shù)目大與生產(chǎn)者,看當(dāng)作果有何不同。察看運(yùn)行成果,從中你能夠得出什么結(jié)論?當(dāng)生產(chǎn)者數(shù)目不不大于消費(fèi)者時,生產(chǎn)者需要等待消費(fèi)者;當(dāng)消費(fèi)者數(shù)目不不大于生產(chǎn)者時,消費(fèi)者要經(jīng)常等待.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

3)在“Windows任務(wù)管理器”對話框中選定“進(jìn)程”選項(xiàng)卡。

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

請?jiān)诒?-3中統(tǒng)計(jì):

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

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

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

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

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

表5-4實(shí)驗(yàn)統(tǒng)計(jì)映像名稱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)立分頁文獻(xiàn)(pagefile.sys)。顧客能夠事先監(jiān)視變化的內(nèi)存需求并對的配備分頁文獻(xiàn),使得當(dāng)系統(tǒng)必須借助于分頁時的性能達(dá)成最高。

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

1)在“開始”菜單中單擊“設(shè)立”–“控制面板”命令,雙擊“管理工具”圖標(biāo),再雙擊“計(jì)算機(jī)管理”圖標(biāo)。

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

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

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

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

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

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

請統(tǒng)計(jì):

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

將系統(tǒng)現(xiàn)在的自由區(qū)(free)虛擬地址空間按表5-6格式統(tǒng)計(jì)。表5-6實(shí)驗(yàn)統(tǒng)計(jì)地址大小虛擬地址空間類型訪問權(quán)限描述(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)計(jì)實(shí)驗(yàn)數(shù)據(jù)在實(shí)驗(yàn)活動中是必要的,但想想與否能夠簡化統(tǒng)計(jì)的方法?將系統(tǒng)現(xiàn)在的已調(diào)配區(qū)(committed)虛擬地址空間按表5-7格式統(tǒng)計(jì)。表5-7實(shí)驗(yàn)統(tǒng)計(jì)地址大小虛擬地址空間類型訪問權(quán)限描述(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)計(jì)。表5-8實(shí)驗(yàn)統(tǒng)計(jì)地址大小虛擬地址空間類型訪問權(quán)限描述(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實(shí)驗(yàn)總結(jié)通過對Windowsxp“任務(wù)管理器”、“計(jì)算機(jī)管理”、“我的電腦”屬性、“系統(tǒng)信息”、“系統(tǒng)監(jiān)視器”等程序的應(yīng)用,學(xué)習(xí)如何察看和調(diào)節(jié)Windows的內(nèi)存性能,加深對操作系統(tǒng)內(nèi)存管理、虛擬存儲管理等理論知識的理解。

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

C-SCAN(循環(huán)掃描)算法:在磁盤調(diào)度時,把掃描限定在一種方向,當(dāng)沿某個方向訪問到最后一種磁道時,磁頭臂返回到磁盤的另一端,并再次開始掃描。具體設(shè)計(jì)//SCAN(電梯算法)voidSCAN(intarray[],intm){intnow;inttemp;inti,j;intsum=0;floatavg;for(i=0;i<m;i++){for(j=i+1;j<m;j++)//對磁道號進(jìn)行從小到大排列{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++)//對磁道號進(jìn)行從小到大排列{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)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論