![操作系統(tǒng)課程設(shè)計_第1頁](http://file3.renrendoc.com/fileroot_temp3/2022-1/8/71b076ec-20d8-4825-aa07-529039e36ec4/71b076ec-20d8-4825-aa07-529039e36ec41.gif)
![操作系統(tǒng)課程設(shè)計_第2頁](http://file3.renrendoc.com/fileroot_temp3/2022-1/8/71b076ec-20d8-4825-aa07-529039e36ec4/71b076ec-20d8-4825-aa07-529039e36ec42.gif)
![操作系統(tǒng)課程設(shè)計_第3頁](http://file3.renrendoc.com/fileroot_temp3/2022-1/8/71b076ec-20d8-4825-aa07-529039e36ec4/71b076ec-20d8-4825-aa07-529039e36ec43.gif)
![操作系統(tǒng)課程設(shè)計_第4頁](http://file3.renrendoc.com/fileroot_temp3/2022-1/8/71b076ec-20d8-4825-aa07-529039e36ec4/71b076ec-20d8-4825-aa07-529039e36ec44.gif)
![操作系統(tǒng)課程設(shè)計_第5頁](http://file3.renrendoc.com/fileroot_temp3/2022-1/8/71b076ec-20d8-4825-aa07-529039e36ec4/71b076ec-20d8-4825-aa07-529039e36ec45.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、湖南科技大學(xué)計算機(jī)科學(xué)與工程學(xué)院操作系統(tǒng)課程設(shè)計報告學(xué)號*姓名班級*完成時間:指導(dǎo)老師:* * *目錄實(shí)驗(yàn)一i 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)康?)學(xué)會使用 VC編寫基本的 Win32 Consol Application (控制臺應(yīng)用程序)。2) 2)通過創(chuàng)建進(jìn)程、觀察正在運(yùn)行的進(jìn)程和終止進(jìn)程的程序設(shè)計和調(diào)試操作,進(jìn)一步熟悉 操作系統(tǒng)的進(jìn)程概念,理解 Windows進(jìn)程的“一生”。3) 3)通過閱讀和分析實(shí)驗(yàn)程序,學(xué)習(xí)創(chuàng)建進(jìn)程、觀察進(jìn)程、終止進(jìn)程以
2、及父子進(jìn)程同步的 基本程序設(shè)計方法。、實(shí)驗(yàn)內(nèi)容和步驟(1)編寫基本的 Win32 Consol Application步驟1:登錄進(jìn)入 Windows系統(tǒng),啟動VC+ 6.0。步驟2:在“FILE”菜單中單擊“ NEW子菜單,在“projects ”選項(xiàng)卡中選擇“ Win32 ConsolApplication ”,然后在 “ Project nam3 處輸入工程名,在 “ Location ” 處輸入 工程目錄。創(chuàng)建一個新的控制臺應(yīng)用程序工程。步驟3:在“FILE”菜單中單擊“ NEW子菜單,在“ Files ”選項(xiàng)卡中選擇“ C+ Source File ”,然后在“ File ”處輸入C
3、/C+源程序的文件名。步驟4:將清單1-1所示的程序清單復(fù)制到新創(chuàng)建的 C/C+源程序中。編譯成可執(zhí)行 文件。步驟5:在“開始”菜單中單擊“程序”-“附件”-“命令提示符"命令,進(jìn)入Windows"命令提示符"窗口,然后進(jìn)入工程目錄中的debug子目錄,執(zhí)行編譯好的可執(zhí)行程序,列出運(yùn)行結(jié)果(如果運(yùn)行不成功,則可能的原因是什么?)如果運(yùn)行不成功可能是路徑有問題或者沒有通過編譯。(2)創(chuàng)建進(jìn)程本實(shí)驗(yàn)顯示了創(chuàng)建子進(jìn)程的基本框架。該程序只是再一次地啟動自身,顯示它的系統(tǒng) 進(jìn)程ID和它在進(jìn)程列表中的位置。步驟1:創(chuàng)建一個“Win32 Consol Application ”
4、工程,然后拷貝清單1-2中的程序 編譯成可執(zhí)行文件。步驟2:在“命令提示符"窗口運(yùn)行步驟1中生成的可執(zhí)行文件,列出運(yùn)行結(jié)果。按 下ctrl+alt+del ,調(diào)用windows的任務(wù)管理器,記錄進(jìn)程相關(guān)的行為屬性。運(yùn)行結(jié)果:步驟3:在“命令提示符"窗口加入?yún)?shù)重新運(yùn)行生成的可執(zhí)行文件,列出運(yùn)行結(jié) 果。按下ctrl+alt+del ,調(diào)用windows的任務(wù)管理器,記錄進(jìn)程相關(guān)的行為屬性。運(yùn)行結(jié)果:步驟4:nclone為線程開始運(yùn)行的編號,當(dāng)nclone的值大于或者等于c_nCloneMax時程序運(yùn)行一次即跳出;變量的定義和初始化方法(位置)對程序的執(zhí)行結(jié)果有影響;(3)父子
5、進(jìn)程的簡單通信及終止進(jìn)程步驟1:創(chuàng)建一個“Win32 Consol Application ”工程,然后拷貝清單1-3中的程 序,編譯成可執(zhí)行文件。步驟2:在VC的工具欄單擊“ Execute Program"(執(zhí)行程序)按鈕,或者按Ctrl + F5鍵, 或者在“命令提示符”窗口運(yùn)行步驟1中生成的可執(zhí)行文件,列出運(yùn)行結(jié)果。步驟3:按源程序中注釋中的提示,修改源程序1-3 ,編譯執(zhí)行(執(zhí)行前請先保存已經(jīng)完成的工作),列出運(yùn)行結(jié)果。在程序中加入跟蹤語句,或調(diào)試運(yùn)行程序,同時參考MSDN中的幫助文彳C CreateProcess()的使用方法,理解父子進(jìn)程如何傳遞參數(shù)。給出程序執(zhí)行過程的
6、大概描述。通過main(int argc,char* argv口?)傳遞參數(shù),每次運(yùn)行時先檢測argd勺值,若小于1程序運(yùn)行結(jié)束,否則繼續(xù)往下執(zhí)行步驟4:按源程序中注釋中的提示,修改源程序1-3 ,編譯執(zhí)行,列出運(yùn)行結(jié)果步驟 5:參考 MSDN 中的幫 助文件 CreateMutex() 、OpenMutex() ReleaseMutex() 和WaitForSingleObject()的使用方法,理解父子進(jìn)程如何利用互斥體進(jìn)行同步的。給出父子進(jìn)程同步過程的一個大概描述。CreateMutex()創(chuàng)建互斥體,OpenMutex()打開互斥體,ReleaseMutex()釋放 互斥體,WaitF
7、orSingleObject()檢測hHandle事件的信號狀態(tài),通過這些方法可實(shí)現(xiàn)當(dāng)前只有一個進(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ù)
8、,已達(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_t fork(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ù),原型如下:ext
9、ern char *environ;int execlp( const char *file, const char *arg,);int execle( const char *path, const char *arg,char * const envp);int execv( const char *path, char *const argv);int execve (const char "filename, char *const argv , char *const envp);int execvp( const char *file, char *const argv
10、);exec系列函數(shù)用新的進(jìn)程映象置換當(dāng)前的進(jìn)程映象.這些函數(shù)的第一個參數(shù)是待執(zhí)行程序的路徑名(文件名)。這些函數(shù)調(diào)用成功后不會返回,其進(jìn)程的正文(text),數(shù)據(jù)(data)和棧(stack)段被待執(zhí)行程序程序覆蓋。但是進(jìn)程的PID和所有打開的文件描述符沒有改變,同時懸掛信號被清除,信號重置為缺省行為。在函數(shù)execl,execlp, 和execle 中,const char *arg以及省略號代表的參數(shù)可被視為arg0,arg1,argn 。它們合起來描述了指向NULL結(jié)尾的字符串的指針列表,即執(zhí)行程序的參數(shù)列表。作為約定,第一個arg參數(shù)應(yīng)該指向執(zhí)行程序名自身,參數(shù)列表必須用NULL指針
11、結(jié)束。execv 和 execvp 函數(shù)提供指向 NULL 結(jié)尾的字符串的指針數(shù)組作為新程序的參數(shù)列表。作為約定,指針數(shù)組中第一個元素應(yīng)該指向執(zhí)行程序名自身。指針數(shù)組必須用 NULL 指針結(jié) 束。execle 函數(shù)同時說明了執(zhí)行進(jìn)程的環(huán)境(environment), 它在 NULL 指針后面要求一個附加參數(shù) ,NULL 指針用于結(jié)束參數(shù)列表, 或者說 ,argv 數(shù)組。這個附加參數(shù)是指向 NULL 結(jié)尾的字符串的指針數(shù)組 , 它必須用 NULL 指針結(jié)束。 其它函數(shù)從當(dāng)前進(jìn)程的 environ 外部變量中獲取新進(jìn)程的環(huán)境。execlp和 execvp 可根據(jù) path 搜索合適的程序運(yùn)行,其它
12、則需要給出程序全路徑。execve()類似 execv (),但是加上了環(huán)境的處理。wait () , waitpid ()可用來等待子進(jìn)程結(jié)束。函數(shù)原型:#include <sys/wait.h>pid_t wait(int *stat_loc);pid_t waitpid(pid_t pid, int *stat_loc,int options);當(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 為
13、pid 的子進(jìn)程。pid = 0:等待與自己同組的任意子進(jìn)程。pid = -1: 等待任意一個子進(jìn)程pid < -1: 等待進(jìn)程組號為 -pid 的任意子進(jìn)程。因此, wait(&stat) 等價于 waitpid(-1, &stat, 0) , waitpid 第三個參數(shù)option 可以是 0 ,WNOHANG,WUNTRACED幾者的組合。三、實(shí)驗(yàn)內(nèi)容與步驟( 1)進(jìn)程的創(chuàng)建任務(wù)要求: 編寫一段程序,使用系統(tǒng)調(diào)用 fork ()創(chuàng)建兩個子進(jìn)程。當(dāng)此程序行在系統(tǒng)中有一個父進(jìn)程和兩個子進(jìn)程活動。 讓每一個進(jìn)程在屏幕上顯示一個字符: 父進(jìn)程顯示字符“a”;兩子進(jìn)程分別顯示
14、字符“ b ”和字符“ c ”。步驟1 :使用vi或gedit 新建一個fork_demo.c 程序,然后拷貝清單 2-1中的程 序,使用cc或者gcc編譯成可執(zhí)行文件fork_demo 。例如,可以使用 gcc - o fork_demo fork_demo.c 完成編譯。步驟2 :在命令行輸入./fork_demo 運(yùn)行該程序。(2)子進(jìn)程執(zhí)行新任務(wù)任務(wù)要求:編寫一段程序,使用系統(tǒng)調(diào)用fork ()創(chuàng)建一個子進(jìn)程。子進(jìn)程通過系統(tǒng)調(diào)用 exec 更換自己原有的執(zhí)行代碼,轉(zhuǎn)去執(zhí)行Linux 命令/bin/ls(顯示當(dāng)前目錄的列表),然后調(diào)用exit()函數(shù)結(jié)束。父進(jìn)程則調(diào)用 waitpid()
15、 等待子進(jìn)程結(jié)束,并在子進(jìn)程結(jié)束后顯示子進(jìn)程的標(biāo)識符,然后正常結(jié)束。程序執(zhí)行過程如圖2-1所示。步驟1 :使用vi或gedit 新建一個exec_demo.c程序,然后拷貝清單2-2中的程序(該 程序的執(zhí)行如圖2-1所示),使用cc或者gcc編譯成可執(zhí)行文件exec_demo。例如,可以使 用 gcc - o exec_demo exec_demo.c 完成編譯。步驟2 :在命令行輸入./exec_demo運(yùn)行該程序。步驟3 :觀察該程序在屏幕上的顯示結(jié)果,并分析。圖2-1 exec_demo.c 程序的執(zhí)行過程四、實(shí)驗(yàn)心得及體會這個課題的實(shí)驗(yàn)讓我學(xué)會了 Windows系統(tǒng)下虛擬機(jī)中的基本程序
16、的編寫,第一次在虛擬級的環(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) 了解互斥體對象,利用互斥與同步操作編寫生產(chǎn)者 -消費(fèi)者問題的并發(fā)程序,加深對P (即 semWait)、V(即semSignal)原語以及利用P、V原語進(jìn)行進(jìn)程間同步與互斥操作的理解。二、實(shí)驗(yàn)內(nèi)容和步驟1)生產(chǎn)者消費(fèi)者問題步驟1 :創(chuàng)建一個"Win32 Consol Application ”工程,然后拷貝清單3-1中的程序,編譯成可執(zhí)行文
17、件。步驟2 :在“命令提示符”窗口運(yùn)行步驟1中生成的可執(zhí)行文件,列出運(yùn)行結(jié)果。步驟3 :仔細(xì)閱讀源程序,找出創(chuàng)建線程的WINDOWAPI函數(shù),回答下列問題:線程的第個執(zhí)行函數(shù)是什么(從哪里開始執(zhí)行)?它位于創(chuàng)建線程的API函數(shù)的第幾個參數(shù)中?答:第一個執(zhí)行函數(shù)是Producer ;位于創(chuàng)建線程API函數(shù)的第三個參數(shù)中步驟4 :修改清單3-1中的程序,調(diào)整生產(chǎn)者線程和消費(fèi)者線程的個數(shù),使得消費(fèi)者數(shù)目大 與生產(chǎn)者,看看結(jié)果有何不同。察看運(yùn)行結(jié)果,從中你可以得出什么結(jié)論?當(dāng)生產(chǎn)者數(shù)目大于消費(fèi)者時,生產(chǎn)者需要等待消費(fèi)者;當(dāng)消費(fèi)者 數(shù)目大于生產(chǎn)者時,消費(fèi)者要經(jīng)常等待 .步驟5 :修改清單3-1中的程序,
18、按程序注釋中的說明修改信號量EmptySemaphore的初始化方法,看看結(jié)果有何不同步驟6 :根據(jù)步驟4的結(jié)果,并查看 MSDN回答下列問題:1) CreateMutex中有幾個參數(shù),各代表什么含義有三個參數(shù);1) LPSECURITY_ATTR舊UTES?IpMutexAttributeS表安全屬性的 指針?2) BOOL blnitialOwner?代表布爾 bInitialOwner?3 ) LPCTSTR IpName 傳 LPCTSTR® IpName2) CreateSemaphore中有幾個參數(shù),各代表什么含義,信號量的初值在第幾個參數(shù)中。有四個參數(shù);1)表示采用不允
19、許繼承的默認(rèn)描述符;2)設(shè)置信號機(jī)的初始計數(shù);3)設(shè)置信號機(jī)的最大計數(shù);指定信號機(jī)對象的名稱.3)程序中P、V原語所對應(yīng)的實(shí)際 Windows API函數(shù)是什么,寫出這幾條語句。P: WaitForSingleObject(EmptySemaphore, INFINITE);WaitForSingleObject(Mutex, INFINITE);WaitForSingleObject(FullSemaphore, INFINITE);V: ReleaseMutex(Mutex);ReleaseSemaphore(FullSemaphore, 1, NULL);ReleaseSemaphore
20、(EmptySemaphore, 1, NULL);4)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)程間同步與互斥經(jīng)典算法
21、的實(shí)現(xiàn),加深對P、V原語以及利用 P、V原語進(jìn)行進(jìn)程間同步與互斥操作的理解,將信號量看做生產(chǎn)或消費(fèi)的一個對 象,將信號量的生成和銷毀操作如同P操作和V操作一樣,生成者消費(fèi)者問題模擬的就是對信號量的生成和銷毀,其中牽涉了信號量的同步, 這也是該問題為何成為同步的經(jīng)典問題的原因。實(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í)行過程中,因?yàn)楦偁庂Y源會造成相互等待的局面。如果沒有外力作用, 這些進(jìn)程將永遠(yuǎn)無法向前推進(jìn)。此時稱系
22、統(tǒng)處于死鎖狀態(tài)或者系統(tǒng)產(chǎn)生了死鎖。安全序列:系統(tǒng)按某種順序并發(fā)進(jìn)程,并使它們都能達(dá)到獲得最大資源而順序完成的序列為安全 序列。安全狀態(tài):能找到安全序列的狀態(tài)稱為安全狀態(tài),安全狀態(tài)不會導(dǎo)致死鎖。不安全狀態(tài):在當(dāng)前狀態(tài)下不存在安全序列,則系統(tǒng)處于不安全狀態(tài)。2)銀行家算法銀行家算法顧名思義是來源于銀行的借貸業(yè)務(wù),一定數(shù)量的本金要滿足多個客戶的借貸周 轉(zhuǎn),為了防止銀行家資金無法周轉(zhuǎn)而倒閉,對每一筆貸款,必須考察其是否能限期歸還。在操作系統(tǒng)中研究資源分配策略時也有類似問題,系統(tǒng)中有限的資源要供多個進(jìn)程使用,必須保證得到的資源的進(jìn)程能在有限的時間內(nèi)歸還資源,以供其它進(jìn)程使用資源。如果資源分配不 當(dāng),就會
23、發(fā)生進(jìn)程循環(huán)等待資源,則進(jìn)程都無法繼續(xù)執(zhí)行下去的死鎖現(xiàn)象。當(dāng)一進(jìn)程提出資源申請時,銀行家算法執(zhí)行下列步驟以決定是否向其分配資源:1) 檢查該進(jìn)程所需要的資源是否已超過它所宣布的最大值。2) 檢查系統(tǒng)當(dāng)前是否有足夠資源滿足該進(jìn)程的請求。3) ) 系統(tǒng)試探著將資源分配給該進(jìn)程,得到一個新狀態(tài)。三、詳細(xì)設(shè)計( 1)數(shù)據(jù)結(jié)構(gòu)資源總量向量 Resource, m維,表示m種資源的總量。可用資源向量Available , m 維,表示未分配的各種可用資源數(shù)量。需求矩陣 Claim , n*m 矩陣,表示n 個進(jìn)程對 m 類資源的最大需求。分配矩陣 Allocation , n*m矩陣,表示 n個進(jìn)程已分配
24、的各種資源數(shù).( 2)編程實(shí)現(xiàn)/* 安全性檢查函數(shù)*/int chkerr() / 在假定分配資源的情況下檢查系統(tǒng)的安全性int WORKN,FINISHM,tempM; /temp 用來記錄進(jìn)程安全執(zhí)行的順序int i,j,m,k=0,count;for(i=0; i<M; i+)FINISHi=FALSE;for(j=0; j<N; j+)WORKj=AVAILABLEj; / 把可利用資源數(shù)賦給WORKfor(i=0; i<M; i+)count=0;for(j=0; j<N; j+)if(FINISHi=FALSE&&NEEDij<=WOR
25、Kj)count+;if(count=N)/當(dāng)進(jìn)程各類資源都滿足 NEED<=WORKfor(m=0; m<N; m+)WORKm=WORKm+ALLOCATIONim;FINISHi=TRUE;tempk=i;/ 記錄下滿足條件的進(jìn)程k+;i=-1;for(i=0; i<M; i+)if(FINISHi=FALSE)!n");printf(" 系統(tǒng)不安全 ! 本次資源申請不成功return 1;printf("n");n");printf("經(jīng)安全性檢查,系統(tǒng)安全,本次分配成功。printf("n&quo
26、t;);printf("本次安全序列:");for(i=0; i<M; i+)/ 打印安全系統(tǒng)的進(jìn)程調(diào)用順序printf(" 進(jìn)程 ");printf("%d",tempi);if(i<M-1)printf("->");printf("n");return 0;/* 資源向量改變*/void rstordata(int k)int j;for(j=0; j<N; j+)AVAILABLEj=AVAILABLEj+Requestj;ALLOCATIONkj=ALLOCATI
27、ONkj-Requestj;NEEDkj=NEEDkj+Requestj;/* 系統(tǒng)對進(jìn)程請求響應(yīng),資源向量改變*/void changdata(int k)int j;for(j=0; j<N; j+)AVAILABLEj=AVAILABLEj-Requestj;ALLOCATIONkj=ALLOCATIONkj+Requestj;NEEDkj=NEEDkj-Requestj;四、結(jié)果與分析五、實(shí)驗(yàn)心得與體會設(shè)計主要由兩部分組成。第一部分: 銀行家算法( 掃描 )1. 如果 Request<=Need, 則轉(zhuǎn) 2; 否則 , 出錯2. 如果 Request<=Availab
28、le, 則轉(zhuǎn)向 3, 否則等待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)康模?)通過對Windows xp "任務(wù)管理器”、“計算機(jī)管理”、“我的電腦”屬性、“系統(tǒng)信 息”、“系統(tǒng)監(jiān)視器”等程序的應(yīng)用,學(xué)習(xí)如何察看和調(diào)整Windows 的內(nèi)存性能,加深對操作
29、系統(tǒng)內(nèi)存管理、虛擬存儲管理等理論知識的理解。( 2) 了解 Windows xp 的內(nèi)存結(jié)構(gòu)和虛擬內(nèi)存的管理,理解進(jìn)程的虛擬內(nèi)存空間和物理內(nèi)存 的映射關(guān)系。二、實(shí)驗(yàn)內(nèi)容和步驟( 1)觀察和調(diào)整Windows XP 的內(nèi)存性能。步驟 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í)例都可
30、以使用相同的代碼 和數(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)定的危險。分頁合并內(nèi)存:存儲遲早需要的
31、可分頁代碼或數(shù)據(jù)的內(nèi)存部分,雖然可以將分頁合并內(nèi) 存中的任何系統(tǒng)進(jìn)程交換到磁盤上,但是它臨時存儲在主內(nèi)存的這一部分,以防系統(tǒng)立刻需 要它。在將系統(tǒng)進(jìn)程交換到磁盤上之前,Windows會交換其他進(jìn)程。Windows xp中,未分頁合并內(nèi)存的最大限制是多少?最大限制為256MB4) Windows xp分頁文件默認(rèn)設(shè)置的最小容量和最大容量是多少?步驟2 :登錄進(jìn)入 Windows xp。步驟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)上
32、運(yùn)行的進(jìn)程列表,查找想要監(jiān)視的應(yīng)用程序。請?jiān)诒?-3 中記錄:表5-3實(shí)驗(yàn)記錄映像名稱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)存對比情況。步驟4:未分頁合并內(nèi)存估算未分頁合并內(nèi)存大小的最簡單方法是使用“任務(wù)管理器”。未分頁合并內(nèi)存的估計值顯示在“任務(wù)管理器”的“性能”選項(xiàng)卡的“核
33、心內(nèi)存”部分??倲?shù)(K) : 8122*1024分頁數(shù) :328*1024未分頁(K): 116*1024還可以使用“任務(wù)管理器”查看一個獨(dú)立進(jìn)程正在使用的未分頁合并內(nèi)存數(shù)量和分頁合并內(nèi)存數(shù)量。操作步驟如下:1)單擊“ Windows任務(wù)管理器”的“進(jìn)程”選項(xiàng)卡,然后從“查看”菜單中選擇“選 擇列”命令,顯示“進(jìn)程”選項(xiàng)卡的可查看選項(xiàng)。2)在“選擇列”對話框中,選定“頁面緩沖池”選項(xiàng)和“非頁面緩沖池”選項(xiàng)旁邊的復(fù)選框,然后單擊“確定”按鈕。返回 Windows Xp "任務(wù)管理器”的“進(jìn)程”選項(xiàng)卡 時,將看到其中增加顯示了各個進(jìn)程占用的分頁合并內(nèi)存數(shù)量和未分頁合并內(nèi)存數(shù)量。仍以剛才打
34、開觀察的應(yīng)用程序(例如Word)為例,請?jiān)诒?-4中記錄:表5-4實(shí)驗(yàn)記錄映像名稱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)存沒有影響。步驟5 :提高分頁性能。在Windows xp的安裝過程中,將使用連續(xù)的磁盤空間自動創(chuàng)建分頁文件 (pagefile.
35、sys) 。用戶可以事先監(jiān)視變化的內(nèi)存需求并正確配置分頁文件,使得當(dāng)系 統(tǒng)必須借助于分頁時的性能達(dá)到最高。雖然分頁文件一般都放在系統(tǒng)分區(qū)的根目錄下面,但這并不總是該文件的最佳位 置。要想從分頁獲得最佳性能,應(yīng)該首先檢查系統(tǒng)的磁盤子系統(tǒng)的配置,以了解它是否 有多個物理硬盤驅(qū)動器。1)在“開始”菜單中單擊“設(shè)置”-“控制面板”命令,雙擊“管理工具”圖標(biāo),再雙擊“計算機(jī)管理”圖標(biāo)。2)在“計算機(jī)管理”窗口的左格選擇“磁盤管理”管理單元來查看系統(tǒng)的磁盤配置。 請?jiān)诒?-5 中記錄:表5-5實(shí)驗(yàn)記錄卷布局類型文件系 統(tǒng)容量狀態(tài)簡單基本4.88GB狀態(tài)良好(OEM區(qū))C:簡單基本NTFS100.00GB狀
36、態(tài)良好(系統(tǒng),啟動,頁面文件)D:簡單基本NTFS30.00GB狀態(tài)良好(邏輯驅(qū)動器)E:簡單基本NTFS30.00GB狀態(tài)良好(邏輯驅(qū)動器)F:簡單基本NTFS100.00GB狀態(tài)良好(邏輯驅(qū)動器)如果系統(tǒng)只有一個硬盤,那么建議應(yīng)該盡可能為系統(tǒng)配置額外的驅(qū)動器。這是因?yàn)椋?Windows xp最多可以支持在多個驅(qū)動器上分布的16個獨(dú)立的分頁文件。為系統(tǒng)配置多個分頁文件可以實(shí)現(xiàn)對不同磁盤I/O請求的并行處理,這將大大提高I/O請求的分頁文件性能。步驟6 :計算分頁文件的大小。要想更改分頁文件的位置或大小配置參數(shù),可按以下步驟進(jìn)行:1)右鍵單擊桌面上的“我的電腦" (Win7為計算機(jī))
37、圖標(biāo)并選定“屬性” (Win7 為高級系統(tǒng)設(shè)置)。2)在“高級”選項(xiàng)卡上單擊“性能選項(xiàng)”按鈕。3)單擊對話框中的“虛擬內(nèi)存”區(qū)域中的“更改”按鈕。請記錄:所選驅(qū)動器(C:)的頁面文件大小:驅(qū)動器: £ ;可用空間:56362 MB初始大?。∕B):最大值(MB):所選驅(qū)動器(D:) 的頁面文件大小:(如果有的話)驅(qū)動器:D:可用空間:30622 MB所有驅(qū)動器頁面文件大小的總數(shù):30622 MB允許的最小值:16 MB推薦:12183 MB當(dāng)前已分配: 8122 MB4)要想將另一個分頁文件添加到現(xiàn)有配置,在“虛擬內(nèi)存”對話框中選定一個還沒 有分頁文件的驅(qū)動器,然后指定分頁文件的初始
38、值和最大值(以兆字節(jié)表示),單擊“設(shè)置”,然后單擊“確定”。5)要想更改現(xiàn)有分頁文件的最大值和最小值,可選定分頁文件所在的驅(qū)動器。然后 指定分頁文件的初始值和最大值,單擊“設(shè)置”按鈕,然后單擊“確定”按鈕。6)在“性能選項(xiàng)”對話框中單擊“確定”按鈕。7)單擊“確定”按鈕以關(guān)閉“系統(tǒng)特性”對話框。(2) 了解和檢測進(jìn)程的虛擬內(nèi)存空間。步驟1:創(chuàng)建一個"Win32 Consol Application ”工程,然后拷貝清單5-1中的程序,編譯成可執(zhí)行文件。步驟2:在VC的工具欄單擊"Execute Program" (執(zhí)行程序)按鈕,或者按Ctrl + F5鍵,或者在
39、“命令提示符”窗口運(yùn)行步驟1中生成的可執(zhí)行文件。步驟3:根據(jù)運(yùn)行結(jié)果,回答下列問題虛擬內(nèi)存每頁容量為:4.00KB最小應(yīng)用地址:0x00010000最大應(yīng)用地址:0x7ffeffff當(dāng)前可供應(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ā)一個錯誤陷阱,從而導(dǎo)致錯誤 并終止程序的執(zhí)行。按committed、reserved、free 等三種虛擬地址空間分別記錄實(shí)驗(yàn)數(shù)據(jù)。其 中“描述”是指對該組數(shù)據(jù)的簡單描述
40、,例如,對下列一組數(shù)據(jù):00010000 - 00012000 <8.00KB> Committed, READWRITE, Private可描述為:具有READWRITEW艮的已調(diào)配私有內(nèi)存區(qū)。將系統(tǒng)當(dāng)前的自由區(qū)(free)虛擬地址空間按表5-6格式記錄表5-6實(shí)驗(yàn)記錄地址大小虛擬地址空間類型訪問權(quán)限描述(60.0KB)FreeNOACCESS(60.0KB)FreeNOACCESS00294000-002a0000(48.0KB)FreeNOACCESS002a1000-002b0000(60.0 KB)FreeNOACCESS(36.0KB)FreeNOACCESS(60.0
41、 KB)FreeNOACCESS(40.0KB)FreeNOACCESS(636 KB)FreeNOACCESS(0.98MB)FreeNOACCESS(704 KB)FreeNOACCESS提示:詳細(xì)記錄實(shí)驗(yàn)數(shù)據(jù)在實(shí)驗(yàn)活動中是必要的,但想想是否可以簡化記錄的辦 法?將系統(tǒng)當(dāng)前的已調(diào)配區(qū)(committed)虛擬地址空間按表5-7格式記錄表5-7實(shí)驗(yàn)記錄地址大小虛擬地址 空間類型訪問權(quán)限描述(64.0 KB)CommittedREADWRITEMapped(4.00 KB)CommittedREADWRITEPrivate(4.00 KB)CommittedREADONLYImage00089
42、000-0008c000(12.0 KB)CommittedREADWRITEPrivate(16.0 KB)CommittedREADWRITEPrivate00089000-0008c000(12.0 KB)CommittedREADWRITEPrivate(16.0 KB)CommittedREADWRITEPrivate(12.0KB)CommittedREADWRITEPrivate(16.0KB)CommittedREADONLYMapped002a0000-002a1000(4.00KB)CommittedREADWRITEPrivate將系統(tǒng)當(dāng)前的保留區(qū)(reserved)虛擬
43、地址空間按表5-8格式記錄表5-8實(shí)驗(yàn)記錄地址大小虛擬地址空間類型訪問權(quán)限描述(228KB)reservedREADONLYPrivate00090000-0028C000(1.98MB)ReservedREADONLYPrivat(124KB)ReservedREADONLYPrivate00593000-005a0000(52.0KB)ReservedREADONLYPrivate00656000-006d0000(488KB)ReservedREADONLYPrivate(1.44MB)ReservedREADONLYMapped(20.0KB)ReservedREADONLYMappe
44、d(840KB)ReservedREADONLYPrivate00bf4000-01f10000(19.1MB)ReservedREADONLYMapped(60.0KB)ReservedREADONLYImage三、實(shí)驗(yàn)總結(jié)通過對 Windows xp "任務(wù)管理器”、“計算機(jī)管理”、“我的電腦”屬性、“系統(tǒng)信息”、“系統(tǒng)監(jiān)視器”等程序的應(yīng)用,學(xué)習(xí)如何察看和調(diào)整Windows的內(nèi)存性能,加深對操作系統(tǒng)內(nèi)存管理、虛擬存儲管理等理論知識的理解。了解Windows xp的內(nèi)存結(jié)構(gòu)和虛擬內(nèi)存的管理,理解進(jìn)程的虛擬內(nèi)存空間和物理內(nèi)存的映 射關(guān)系。實(shí)驗(yàn)六磁盤調(diào)度一、實(shí)驗(yàn)?zāi)康模?) 了解磁盤結(jié)構(gòu)
45、以及磁盤上數(shù)據(jù)的組織方式。(2)掌握磁盤訪問時間的計算方式。(3)掌握常用磁盤調(diào)度算法及其相關(guān)特性。二、實(shí)驗(yàn)基本知識及原理1 )磁盤數(shù)據(jù)的組織磁盤上每一條物理記錄都有唯一的地址,該地址包括三個部分:磁頭號(盤面好)、柱面號(磁道號)和扇區(qū)號。給定這三個量就可以唯一地確定一個地址。2)磁盤訪問時間的計算方式磁盤在工作室以恒定的速率旋轉(zhuǎn)。為保證讀或?qū)懀蓬^必須移動到所要求的磁道上,當(dāng)所要 求的扇區(qū)的開始位置旋轉(zhuǎn)到磁頭下時,開始讀或?qū)憯?shù)據(jù)。對磁盤的訪問時間包括:尋道時間、旋 轉(zhuǎn)延遲時間和傳輸時間。3)磁盤調(diào)度算法磁盤調(diào)度的目的是要盡可能降低磁盤的尋道時間,以提高磁盤I/O系統(tǒng)的性能。先進(jìn)先出算法:按
46、訪問請求到達(dá)的先后次序進(jìn)行調(diào)度。最短服務(wù)時間優(yōu)先算法:優(yōu)先選擇使磁頭臂從當(dāng)前位置開始移動最少的磁盤I/O請求進(jìn)行調(diào)度。SCAN(電梯算法):要求磁頭臂先沿一個方向移動,并在途中滿足所有未完成的請求,直到它到達(dá)這個方向上的最后一個磁道。 或者在這個方向上沒有別的請求為止, 后一種改進(jìn)有時候稱作LOOK策略。然后倒轉(zhuǎn)服務(wù)方向,沿相反方向掃描,同樣按順序完成所有請求。C-SCAN(循環(huán)掃描)算法:在磁盤調(diào)度時,把掃描限定在一個方向,當(dāng)沿某個方向訪問到最后一個磁道時,磁頭臂返回到磁盤的另一端,并再次開始掃描。三、詳細(xì)設(shè)計/SCAN (電梯算法)void SCAN(int array,int m)int
47、 now;int temp;int i,j;int sum=0;float avg;for(i=0; i<m; i+)for(j=i+1; j<m; j+)/ 對磁道號進(jìn)行從小到大排列if(arrayi>arrayj)/ 兩磁道號之間比較temp=arrayi;arrayi=arrayj;arrayj=temp;for( i=0; i<m; i+)/ 輸出排序后的磁道號數(shù)組printf("%d ",arrayi);printf("n請輸入當(dāng)前的磁道號:");scanf("%d",&now);printf
48、(" 磁道方向:沿磁道增大的方向 ");printf("n SCAN 調(diào)度結(jié)果 : ");for(i=0; i<m; i+)if(now<=arrayi)printf("%d ",arrayi);sum=arrayi-now+sum;now=arrayi;elsej=i;temp=arrayi;for(i=j; i>=0; i-)printf("%d ",arrayi);sum=now-arrayi+sum;now=arrayi;avg=(float)sum/m;printf("n 移動的總道數(shù): %d n",sum);printf(平均尋道長度: %f n",avg);/C-SCAN (循環(huán)掃描)算法void CSCAN(int array,int m)int now;int temp;int i,j;int sum=0;float avg;for(i=0; i<m; i+)for(j=i+1; j<m; j+)/ 對磁道號進(jìn)行從小到大排列if(arrayi>arrayj)/ 兩磁道號之間比較temp=arrayi;arrayi=arra
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 現(xiàn)代辦公環(huán)境的網(wǎng)絡(luò)安全培訓(xùn)
- 未來學(xué)習(xí)模式基于網(wǎng)絡(luò)教育平臺的思考
- 現(xiàn)代辦公空間中的綠色環(huán)保用品設(shè)計思考
- 2024年四年級品德與社會上冊 第三單元 生活在這里真好 第11課《我家來了新鄰居》說課稿 粵教版001
- 2024-2025學(xué)年高中物理 第十二章 機(jī)械波 4 波的衍射和干涉說課稿4 新人教版選修3-4001
- Module 1 Unit 1 She's a nice teacher(說課稿)-2023-2024學(xué)年外研版(三起)英語四年級下冊
- 2023九年級化學(xué)上冊 第一章 大家都來學(xué)化學(xué)1.2 化學(xué)實(shí)驗(yàn)室之旅說課稿(新版)粵教版001
- 2025農(nóng)村養(yǎng)殖場場地租地合同
- 2025國際專利技術(shù)許可合同模板版
- Unit 5 Nature and Culture(說課稿)2023-2024學(xué)年人教新起點(diǎn)版英語六年級下冊
- 電動汽車用驅(qū)動電機(jī)系統(tǒng)-編制說明
- 江蘇卷2024年高三3月份模擬考試化學(xué)試題含解析
- (正式版)JTT 1497-2024 公路橋梁塔柱施工平臺及通道安全技術(shù)要求
- 2024年四川省成都市新都區(qū)中考英語一診試卷(含解析)
- 醫(yī)療器械物價收費(fèi)申請流程
- 招聘專員轉(zhuǎn)正述職報告
- “一帶一路”背景下的西安市文化旅游外宣翻譯研究-基于生態(tài)翻譯學(xué)理論
- 2024年江蘇省昆山市六校中考聯(lián)考(一模)化學(xué)試題
- 大學(xué)生文學(xué)常識知識競賽考試題庫500題(含答案)
- 國家電網(wǎng)智能化規(guī)劃總報告
- 邢臺市橋西區(qū)2024年事業(yè)單位考試《公共基礎(chǔ)知識》全真模擬試題含解析
評論
0/150
提交評論