版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、操作系統(tǒng)課程設(shè)計湖南科技大學(xué)計算機科學(xué)與工程學(xué)院操作系統(tǒng)課程設(shè)計報告 學(xué) 號 : * 姓 名 : * * 班 級 : *指導(dǎo)老師: *完成時間: *.*.* 目錄 實驗一 Windows進(jìn)程管理 實驗二 Linux進(jìn)程管理 實驗三 互斥與同步 實驗四 銀行家算法的模擬與實現(xiàn) 實驗五 內(nèi)存管理 實驗六 磁盤調(diào)度 實驗七 進(jìn)程間通信實驗一 Windows進(jìn)程管理1、 實驗?zāi)康?) 學(xué)會使用 VC 編寫基本的 Win32 Consol Application(控制臺應(yīng)用程序)。2)通過創(chuàng)建進(jìn)程、觀察正在運行的進(jìn)程和終止進(jìn)程的程序設(shè)計和調(diào)試操作,進(jìn)一步熟悉操作系統(tǒng)的進(jìn)程概念,理解 Windows 進(jìn)程
2、的“一生”。3)通過閱讀和分析實驗程序,學(xué)習(xí)創(chuàng)建進(jìn)程、觀察進(jìn)程、終止進(jìn)程以及父子進(jìn)程同步的基本程序設(shè)計方法。二、實驗內(nèi)容和步驟(1)編寫基本的 Win32 Consol Application 步驟1:登錄進(jìn)入 Windows 系統(tǒng),啟動 VC+ 。 步驟2:在“FILE”菜單中單擊“NEW”子菜單,在“projects”選項卡中選擇“Win32 ConsolApplication”,然后在“Project name”處輸入工程名,在“Location” 處輸入工程目錄。創(chuàng)建一個新的控制臺應(yīng)用程序工程。 步驟3:在“FILE”菜單中單擊“NEW”子菜單,在“Files”選項卡中選擇“C+ So
3、urce File”,然后在“File” 處輸入 C/C+源程序的文件名。 步驟4:將清單 1-1 所示的程序清單復(fù)制到新創(chuàng)建的 C/C+源程序中。編譯成可執(zhí)行文件。 步驟5:在“開始”菜單中單擊“程序”-“附件”-“命令提示符”命令,進(jìn)入 Windows“命令提示符”窗口,然后進(jìn)入工程目錄中的 debug 子目錄,執(zhí)行編譯好的可執(zhí)行程序,列出運行結(jié)果(如果運行不成功,則可能的原因是什么) 如果運行不成功 可能是路徑有問題或者沒有通過編譯。(2) 創(chuàng)建進(jìn)程 本實驗顯示了創(chuàng)建子進(jìn)程的基本框架。該程序只是再一次地啟動自身,顯示它的系統(tǒng)進(jìn)程 ID和它在進(jìn)程列表中的位置。 步驟1:創(chuàng)建一個“Win32
4、 Consol Application”工程,然后拷貝清單 1-2 中的程序編譯成可執(zhí)行文件。 步驟2:在“命令提示符”窗口運行步驟 1 中生成的可執(zhí)行文件,列出運行結(jié)果。按下ctrl+alt+del,調(diào)用 windows 的任務(wù)管理器,記錄進(jìn)程相關(guān)的行為屬性。運行結(jié)果: 步驟3:在“命令提示符”窗口加入?yún)?shù)重新運行生成的可執(zhí)行文件,列出運行結(jié)果。按下ctrl+alt+del,調(diào)用 windows 的任務(wù)管理器,記錄進(jìn)程相關(guān)的行為屬性。運行結(jié)果: 步驟4:nclone為線程開始運行的編號,當(dāng)nclone的值大于或者等于c_nCloneMax時程序運行一次即跳出;變量的定義和初始化方法(位置)對
5、程序的執(zhí)行結(jié)果有影響;(3)父子進(jìn)程的簡單通信及終止進(jìn)程 步驟1: 創(chuàng)建一個“Win32 Consol Application”工程,然后拷貝清單 1-3 中的程序,編譯成可執(zhí)行文件。 步驟2:在 VC 的工具欄單擊“ Execute Program” (執(zhí)行程序) 按鈕,或者按 Ctrl + F5 鍵,或者在“命令提示符”窗口運行步驟 1 中生成的可執(zhí)行文件,列出運行結(jié)果。 步驟3: 按源程序中注釋中的提示,修改源程序 1-3,編譯執(zhí)行(執(zhí)行前請先保存已經(jīng)完成的工作),列出運行結(jié)果。在程序中加入跟蹤語句,或調(diào)試運行程序,同時參考 MSDN 中的幫助文件CreateProcess()的使用方法
6、,理解父子進(jìn)程如何傳遞參數(shù)。給出程序執(zhí)行過程的大概描述。通過main(int argc,char* argv)傳遞參數(shù),每次運行時先檢測argc的值,若小于1程序運行結(jié)束,否則繼續(xù)往下執(zhí)行 步驟4:按源程序中注釋中的提示,修改源程序 1-3,編譯執(zhí)行,列出運行結(jié)果。 步驟5:參 考 MSDN 中 的 幫 助 文 件 CreateMutex() 、 OpenMutex() 、 ReleaseMutex() 和WaitForSingleObject()的使用方法,理解父子進(jìn)程如何利用互斥體進(jìn)行同步的。給出父子進(jìn)程同步過程的一個大概描述。CreateMutex()創(chuàng)建互斥體,OpenMutex()打
7、開互斥體,ReleaseMutex()釋放互斥體,WaitForSingleObject()檢測hHandle事件的信號狀態(tài),通過這些方法可實現(xiàn)當(dāng)前只有一個進(jìn)程被創(chuàng)建或使用,實現(xiàn)進(jìn)程的同步。首先,進(jìn)程創(chuàng)建一個互斥體,打開互斥體,如遇到互斥,則進(jìn)行處理,處理完后,釋放互斥體,下面便是進(jìn)程等待一個要處理的項目3、 實驗心得與體會每個進(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)程都是
8、有始有終,其中有中斷,還有處理進(jìn)程間互斥的函數(shù),已達(dá)到進(jìn)程的完成后自然終止。實驗二 Linux進(jìn)程管理1、 實驗?zāi)康?通過進(jìn)程的創(chuàng)建、撤銷和運行加深對進(jìn)程概念和進(jìn)程并發(fā)執(zhí)行的理解,明確進(jìn)程和程序之間的區(qū)別。2、 背景知識在 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ù)運行,子進(jìn)程在同樣的位置執(zhí)行同樣的程序。對于父進(jìn)程,fork()返回子進(jìn)程的 pid, 對于子進(jìn)程, fork()
9、返回 0。出錯時返回-1。 exec 系列有 6 個函數(shù),原型如下: extern 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); i
10、nt execvp( const char *file, char *const argv); 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é)尾的
11、字符串的指針列表,即執(zhí)行程序的參數(shù)列表。作為約定,第一個 arg 參數(shù)應(yīng)該指向執(zhí)行程序名自身,參數(shù)列表必須用 NULL 指針結(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)程的 en
12、viron 外部變量中獲取新進(jìn)程的環(huán)境。 execlp和execvp可根據(jù)path搜索合適的程序運行,其它則需要給出程序全路徑。 execve()類似 execv(),但是加上了環(huán)境的處理。 wait() , waitpid()可用來等待子進(jìn)程結(jié)束。函數(shù)原型: #include <sys/> 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)程的退出
13、狀態(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)等價于 waitpid(-1, &stat, 0), waitpid 第三個參數(shù) option 可以是 0, WNOHANG,WUNTRACED 或這幾者的組合。三、實驗內(nèi)容與步驟(1)進(jìn)程的創(chuàng)建任務(wù)要求:編寫一段程序,使用系統(tǒng)調(diào)用 fork()創(chuàng)建兩個子進(jìn)程。當(dāng)此程序行 在系統(tǒng)中有
14、一個父進(jìn)程和兩個子進(jìn)程活動。讓每一個進(jìn)程在屏幕上顯示一個字符:父進(jìn)程顯示字符“ a”;兩子進(jìn)程分別顯示字符“ b”和字符“ c”。 步驟 1:使用 vi 或 gedit 新建一個 程序,然后拷貝清單 2-1 中的程序,使用 cc或者 gcc 編譯成可執(zhí)行文件 fork_demo。例如,可以使用 gcc o fork_demo 完成編譯。 步驟 2:在命令行輸入./fork_demo 運行該程序。 (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)前目錄
15、的列表),然后調(diào)用 exit()函數(shù)結(jié)束。父進(jìn)程則調(diào)用 waitpid()等待子進(jìn)程結(jié)束,并在子進(jìn)程結(jié)束后顯示子進(jìn)程的標(biāo)識符,然后正常結(jié)束。程序執(zhí)行過程如圖 2-1 所示。 步驟 1:使用 vi 或 gedit 新建一個 程序,然后拷貝清單 2-2 中的程序(該程序的執(zhí)行如圖 2-1 所示),使用 cc 或者 gcc 編譯成可執(zhí)行文件 exec_demo。例如,可以使用 gcc o exec_demo 完成編譯。 步驟 2:在命令行輸入./exec_demo 運行該程序。 步驟 3:觀察該程序在屏幕上的顯示結(jié)果,并分析。 圖2-1 程序的執(zhí)行過程4、 實驗心得及體會這個課題的實驗讓我學(xué)會了Wi
16、ndows系統(tǒng)下虛擬機中的基本程序的編寫,第一次在虛擬級的環(huán)境中編寫了這一個程序。并通過進(jìn)程的創(chuàng)建。撤銷和運行加深對進(jìn)程概念和進(jìn)程并發(fā)執(zhí)行的理解,明確了進(jìn)程和程序之間的區(qū)別。實驗三 互斥與同步一、實驗?zāi)康?)回顧操作系統(tǒng)進(jìn)程、線程的有關(guān)概念,加深對 Windows 線程的理解。2)了解互斥體對象,利用互斥與同步操作編寫生產(chǎn)者-消費者問題的并發(fā)程序,加深對 P (即semWait)、 V(即 semSignal)原語以及利用 P、 V 原語進(jìn)行進(jìn)程間同步與互斥操作的理解。二、實驗內(nèi)容和步驟1)生產(chǎn)者消費者問題步驟 1:創(chuàng)建一個“Win32 Consol Application”工程,然后拷貝清單
17、 3-1 中的程序,編譯成可執(zhí)行文件。 步驟 2:在“命令提示符”窗口運行步驟 1 中生成的可執(zhí)行文件,列出運行結(jié)果。 步驟 3:仔細(xì)閱讀源程序,找出創(chuàng)建線程的 WINDOWS API 函數(shù),回答下列問題:線程的第一個執(zhí)行函數(shù)是什么(從哪里開始執(zhí)行)它位于創(chuàng)建線程的 API 函數(shù)的第幾個參數(shù)中答:第一個執(zhí)行函數(shù)是Producer;位于創(chuàng)建線程API函數(shù)的第三個參數(shù)中 步驟 4:修改清單 3-1 中的程序,調(diào)整生產(chǎn)者線程和消費者線程的個數(shù),使得消費者數(shù)目大與生產(chǎn)者,看看結(jié)果有何不同。察看運行結(jié)果,從中你可以得出什么結(jié)論當(dāng)生產(chǎn)者數(shù)目大于消費者時,生產(chǎn)者需要等待消費者;當(dāng)消費者數(shù)目大于生產(chǎn)者時,消費
18、者要經(jīng)常等待. 步驟 5:修改清單 3-1 中的程序,按程序注釋中的說明修改信號量 EmptySemaphore 的初始化方法,看看結(jié)果有何不同。 步驟 6:根據(jù)步驟 4 的結(jié)果,并查看 MSDN,回答下列問題: 1)CreateMutex 中有幾個參數(shù),各代表什么含義。有三個參數(shù);1)LPSECURITY_ATTRIBUTESIpMutexAttributes代表安全屬性的指針2)BOOL bInitialOwner代表布爾 bInitialOwner3)LPCTSTR IpName代表LPCTSTR類型 IpName 2)CreateSemaphore 中有幾個參數(shù),各代表什么含義,信號量
19、的初值在第幾個參數(shù)中。有四個參數(shù);1)表示采用不允許繼承的默認(rèn)描述符;2)設(shè)置信號機的初始計數(shù);3)設(shè)置信號機的最大計數(shù);指定信號機對象的名稱.3)程序中 P、V 原語所對應(yīng)的實際 Windows API 函數(shù)是什么,寫出這幾條語句。P:WaitForSingleObject(EmptySemaphore, INFINITE); WaitForSingleObject(Mutex, INFINITE); WaitForSingleObject(FullSemaphore, INFINITE);V:ReleaseMutex(Mutex); ReleaseSemaphore(FullSemapho
20、re, 1, NULL); ReleaseSemaphore(EmptySemaphore, 1, NULL);4) CreateMutex 能用 CreateSemaphore 替代嗎嘗試修改程序 3-1,將信號量 Mutex 完全用CreateSemaphore 及相關(guān)函數(shù)實現(xiàn)。寫出要修改的語句??梢裕籑utex = CreateSemaphore(NULL, 1, 1, NULL); P:WaitForSingleObject(Mutex, INFINITE); V:ReleaseSemaphore(Mutex, 1, NULL); 3、 實驗總結(jié) 這次實驗加深了對Windows線程的理
21、解,了解互斥體對象,通過對生產(chǎn)者消費者等進(jìn)程間同步與互斥經(jīng)典算法的實現(xiàn),加深對P、V原語以及利用P、V原語進(jìn)行進(jìn)程間同步與互斥操作的理解,將信號量看做生產(chǎn)或消費的一個對象,將信號量的生成和銷毀操作如同P操作和V操作一樣,生成者消費者問題模擬的就是對信號量的生成和銷毀,其中牽涉了信號量的同步,這也是該問題為何成為同步的經(jīng)典問題的原因。實驗四 銀行家算法的模擬與實現(xiàn)一、實驗?zāi)康?1) 進(jìn)一步了解進(jìn)程的并發(fā)執(zhí)行。(2) 加強對進(jìn)程死鎖的理解,理解安全狀態(tài)與不安全狀態(tài)的概念。(3) 掌握使用銀行家算法避免死鎖問題。二、實驗基本知識與原理1)基本概念 死鎖:多個進(jìn)程在執(zhí)行過程中,因為競爭資源會造成相互等
22、待的局面。如果沒有外力作用,這些進(jìn)程將永遠(yuǎn)無法向前推進(jìn)。此時稱系統(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)程能在
23、有限的時間內(nèi)歸還資源,以供其它進(jìn)程使用資源。如果資源分配不當(dāng),就會發(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)。3、 詳細(xì)設(shè)計 (1)數(shù)據(jù)結(jié)構(gòu) 資源總量向量Resource,m 維,表示m種資源的總量。 可用資源向量Available,m 維,表示未分配的各種可用資源數(shù)量。 需求矩陣Claim, n*m 矩陣,表示 n 個進(jìn)程對 m 類資源的最大需求。 分
24、配矩陣 Allocation , n*m 矩陣,表示 n 個進(jìn)程已分配的各種資源數(shù).(2)編程實現(xiàn)/*安全性檢查函數(shù)*/int chkerr()統(tǒng)執(zhí)行安全性算法第二部分主要是進(jìn)行資源的修改。在這里可以修改資源的可用資源和資源還需求資源。多個進(jìn)程同時運行時,系統(tǒng)根據(jù)各類系統(tǒng)資源的最大需求和各類系統(tǒng)的剩余資源為進(jìn)程安排安全序列,使得系統(tǒng)能快速且安全地運行進(jìn)程,不至發(fā)生死鎖。銀行家算法是避免死鎖的主要方法,其思路在很多方面都非常值得我們來學(xué)習(xí)借鑒。實驗五 內(nèi)存管理一、實驗?zāi)康?(1) 通過對 Windows xp“任務(wù)管理器”、“計算機管理”、“我的電腦”屬性、“系統(tǒng)信息”、“系統(tǒng)監(jiān)視器”等程序的應(yīng)
25、用,學(xué)習(xí)如何察看和調(diào)整 Windows 的內(nèi)存性能,加深對操作系統(tǒng)內(nèi)存管理、虛擬存儲管理等理論知識的理解。 (2)了解 Windows xp 的內(nèi)存結(jié)構(gòu)和虛擬內(nèi)存的管理,理解進(jìn)程的虛擬內(nèi)存空間和物理內(nèi)存的映射關(guā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)用
26、程序使用的內(nèi)存數(shù)量。運行一個應(yīng)用程序的多個副本時,每一個實例都可以使用相同的代碼和數(shù)據(jù),這意味著不必維護(hù)所加載應(yīng)用程序代碼的單獨副本并使用相同的內(nèi)存資源。無論正在運行多少個應(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)
27、本身就有變得不穩(wěn)定的危險。分頁合并內(nèi)存:存儲遲早需要的可分頁代碼或數(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)存的最大限制是多少 最大限制為256MB 4) Windows xp 分頁文件默認(rèn)設(shè)置的最小容量和最大容量是多少步驟 2:登錄進(jìn)入 Windows xp。步驟 3:查看包含多個實例的應(yīng)用程序的內(nèi)存需求。1) 啟動想要監(jiān)視的應(yīng)用程序,例如 Word。2) 右鍵單擊任務(wù)欄以啟動“任務(wù)管理器”。3) 在“ Win
28、dows 任務(wù)管理器”對話框中選定“進(jìn)程”選項卡。4) 向下滾動在系統(tǒng)上運行的進(jìn)程列表,查找想要監(jiān)視的應(yīng)用程序。請在表 5-3 中記錄:表 5-3 實驗記錄映像名稱 PID CPU CPU時間 內(nèi)存使用1640000:00:0816996K *323548000:00:082048K *325836020:00:3859264K“內(nèi)存使用”列顯示了該應(yīng)用程序的一個實例正在使用的內(nèi)存數(shù)量。5) 啟動應(yīng)用程序的另一個實例并觀察它的內(nèi)存需求。請描述使用第二個實例占用的內(nèi)存與使用第一個實例時的內(nèi)存對比情況。步驟4:未分頁合并內(nèi)存估算未分頁合并內(nèi)存大小的最簡單方法是使用“任務(wù)管理器”。未分頁合并內(nèi)存的估
29、計值顯示在“任務(wù)管理器”的“性能”選項卡的“核心內(nèi)存”部分??倲?shù) (K) : 8122*_1024 分頁數(shù) : 328*1024未分頁 (K) : 116*1024還可以使用“任務(wù)管理器”查看一個獨立進(jìn)程正在使用的未分頁合并內(nèi)存數(shù)量和分頁合并內(nèi)存數(shù)量。操作步驟如下:1) 單擊“ Windows 任務(wù)管理器”的“進(jìn)程”選項卡,然后從“查看”菜單中選擇“選擇列”命令,顯示“進(jìn)程”選項卡的可查看選項。2) 在“選擇列”對話框中,選定“頁面緩沖池”選項和“非頁面緩沖池”選項旁邊的復(fù)選框,然后單擊“確定”按鈕。返回 Windows Xp“任務(wù)管理器”的“進(jìn)程”選項卡時,將看到其中增加顯示了各個進(jìn)程占用的
30、分頁合并內(nèi)存數(shù)量和未分頁合并內(nèi)存數(shù)量。仍以剛才打開觀察的應(yīng)用程序 (例如 Word) 為例,請在表 5-4 中記錄: 表 5-4 實驗記錄 映像名稱 PID CPU CPU時間 內(nèi)存使用1640000:00:1217248K *323548000:00:1073888K *325836020;01;1467088K從性能的角度來看,未分頁合并內(nèi)存越多,可以加載到這個空間的數(shù)據(jù)就越多。擁有的物理內(nèi)存越多,未分頁合并內(nèi)存就越多。但未分頁合并內(nèi)存被限制為 256MB,因此添加超出這個限制的內(nèi)存對未分頁合并內(nèi)存沒有影響。步驟 5:提高分頁性能。在 Windows xp 的安裝過程中,將使用連續(xù)的磁盤空
31、間自動創(chuàng)建分頁文件 。用戶可以事先監(jiān)視變化的內(nèi)存需求并正確配置分頁文件,使得當(dāng)系統(tǒng)必須借助于分頁時的性能達(dá)到最高。 雖然分頁文件一般都放在系統(tǒng)分區(qū)的根目錄下面,但這并不總是該文件的最佳位置。要想從分頁獲得最佳性能,應(yīng)該首先檢查系統(tǒng)的磁盤子系統(tǒng)的配置,以了解它是否有多個物理硬盤驅(qū)動器。1) 在“開始”菜單中單擊“設(shè)置” “控制面板”命令,雙擊“管理工具”圖標(biāo),再雙擊“計算機管理”圖標(biāo)。2) 在“計算機管理”窗口的左格選擇“磁盤管理”管理單元來查看系統(tǒng)的磁盤配置。請在表 5-5 中記錄:表 5-5 實驗記錄卷布局類型文件系統(tǒng)容量狀態(tài)簡單基本狀態(tài)良好(OEM分區(qū))C:簡單基本NTFS狀態(tài)良好(系統(tǒng),
32、啟動,頁面文件)D:簡單基本NTFS狀態(tài)良好(邏輯驅(qū)動器)E:簡單基本NTFS狀態(tài)良好(邏輯驅(qū)動器)F:簡單基本NTFS狀態(tài)良好(邏輯驅(qū)動器)如果系統(tǒng)只有一個硬盤,那么建議應(yīng)該盡可能為系統(tǒng)配置額外的驅(qū)動器。這是因為: Windows xp 最多可以支持在多個驅(qū)動器上分布的 16 個獨立的分頁文件。為系統(tǒng)配置多個分頁文件可以實現(xiàn)對不同磁盤 I/O 請求的并行處理,這將大大提高 I/O 請求的分頁文件性能。 步驟 6:計算分頁文件的大小。要想更改分頁文件的位置或大小配置參數(shù),可按以下步驟進(jìn)行:1) 右鍵單擊桌面上的“我的電腦”( Win7 為計算機)圖標(biāo)并選定“屬性”( Win7 為高級系統(tǒng)設(shè)置)
33、。2) 在“高級”選項卡上單擊“性能選項”按鈕。3) 單擊對話框中的“虛擬內(nèi)存”區(qū)域中的“更改”按鈕。請記錄:所選驅(qū)動器 (C: ) 的頁面文件大?。候?qū)動器: C: ;可用空間: 56362 MB初始大小 (MB) : 最大值 (MB) : 所選驅(qū)動器 (D: ) 的頁面文件大?。?(如果有的話)驅(qū)動器: D: 可用空間: 30622 MB所有驅(qū)動器頁面文件大小的總數(shù):30622 MB允許的最小值: 16 MB 推薦:12183 MB當(dāng)前已分配: 8122 MB4) 要想將另一個分頁文件添加到現(xiàn)有配置,在“虛擬內(nèi)存”對話框中選定一個還沒有分頁文件的驅(qū)動器,然后指定分頁文件的初始值和最大值 (以
34、兆字節(jié)表示) ,單擊“設(shè)置”,然后單擊“確定”。5) 要想更改現(xiàn)有分頁文件的最大值和最小值,可選定分頁文件所在的驅(qū)動器。然后指定分頁文件的初始值和最大值,單擊“設(shè)置”按鈕,然后單擊“確定”按鈕。6) 在“性能選項”對話框中單擊“確定”按鈕。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 鍵,或者在“命令提示符”窗
35、口運行步驟 1 中生成的可執(zhí)行文件。步驟 3: 根據(jù)運行結(jié)果,回答下列問題虛擬內(nèi)存每頁容量為: 最小應(yīng)用地址:0x00010000最大應(yīng)用地址: 0x7ffeffff當(dāng)前可供應(yīng)用程序使用的內(nèi)存空間為:提示: 可供應(yīng)用程序使用的內(nèi)存空間實際上已經(jīng)減去了開頭與結(jié)尾兩個 64KB 的保護(hù)區(qū)。虛擬內(nèi)存空間中的 64KB 保護(hù)區(qū)是防止編程錯誤的一種 Windows 方式。任何對內(nèi)存中這一區(qū)域的訪問 (讀、寫、執(zhí)行) 都將引發(fā)一個錯誤陷阱,從而導(dǎo)致錯誤并終止程序的執(zhí)行。按 committed、 reserved、 free 等三種虛擬地址空間分別記錄實驗數(shù)據(jù)。其中“描述”是指對該組數(shù)據(jù)的簡單描述,例如,對
36、下列一組數(shù)據(jù):00010000 00012000 <> Committed, READWRITE, Private可描述為:具有 READWRITE 權(quán)限的已調(diào)配私有內(nèi)存區(qū)。將系統(tǒng)當(dāng)前的自由區(qū) (free) 虛擬地址空間按表 5-6 格式記錄。 表 5-6 實驗記錄地址大小虛擬地址空間類型訪問權(quán)限描述 KB)FreeNOACCESS KB)FreeNOACCESS00294000-002a0000 KB)FreeNOACCESS002a1000-002b0000 KB)FreeNOACCESS KB)Free NOACCESS KB)FreeNOACCESS KB)Free NOA
37、CCESS(636 KB) FreeNOACCESS MB) FreeNOACCESS(704 KB)FreeNOACCESS提示: 詳細(xì)記錄實驗數(shù)據(jù)在實驗活動中是必要的,但想想是否可以簡化記錄的辦法將系統(tǒng)當(dāng)前的已調(diào)配區(qū) (committed) 虛擬地址空間按表 5-7 格式記錄。表 5-7 實驗記錄地址大小虛擬地址空間類型訪問權(quán)限描述 KB)CommittedREADWRITEMapped KB)CommittedREADWRITEPrivate KB) CommittedREADONLYImage00089000-0008c000 KB) CommittedREADWRITEPrivate
38、 KB) CommittedREADWRITE Private00089000-0008c000 KB) CommittedREADWRITEPrivate KB) CommittedREADWRITEPrivate CommittedREADWRITE PrivateCommittedREADONLYMapped002a0000-002a1000 CommittedREADWRITE Private將系統(tǒng)當(dāng)前的保留區(qū) (reserved) 虛擬地址空間按表 5-8 格式記錄。表 5-8 實驗記錄地址大小虛擬地址空間類型訪問權(quán)限描述(228KB) reservedREADONLYPrivate
39、00090000-0028c000 ReservedREADONLY Privat(124KB) ReservedREADONLY Private00593000-005a0000 ReservedREADONLY Private00656000-006d0000 (488KB)ReservedREADONLY Private ReservedREADONLY Mapped ReservedREADONLY Mapped(840KB)ReservedREADONLY Private00bf4000-01f10000 ReservedREADONLY MappedReservedREADONLY
40、 Image3、 實驗總結(jié) 通過對 Windows xp“任務(wù)管理器”、“計算機管理”、“我的電腦”屬性、“系統(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)系。實驗六 磁盤調(diào)度1、 實驗?zāi)康?1)了解磁盤結(jié)構(gòu)以及磁盤上數(shù)據(jù)的組織方式。(2)掌握磁盤訪問時間的計算方式。(3)掌握常用磁盤調(diào)度算法及其相關(guān)特性。二、實驗基本知識及原理 1)磁盤數(shù)據(jù)的組織 磁盤上每一條物理記錄都有唯一的地址,該地址包括三個部分:
41、磁頭號(盤面好)、柱面號(磁道號)和扇區(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)先出算法:按訪問請求到達(dá)的先后次序進(jìn)行調(diào)度。最短服務(wù)時間優(yōu)先算法:優(yōu)先選擇使磁頭臂從當(dāng)前位置開始移動最少的磁盤I/O請求進(jìn)行調(diào)度。SCAN(電梯算法):要求磁頭臂先沿一個方向移動,并在途中滿足所有未完成的請求
42、,直到它到達(dá)這個方向上的最后一個磁道?;蛘咴谶@個方向上沒有別的請求為止,后一種改進(jìn)有時候稱作LOOK 策略。然后倒轉(zhuǎn)服務(wù)方向,沿相反方向掃描,同樣按順序完成所有請求。C-SCAN(循環(huán)掃描)算法: 在磁盤調(diào)度時,把掃描限定在一個方向,當(dāng)沿某個方向訪問到最后一個磁道時,磁頭臂返回到磁盤的另一端,并再次開始掃描。3、 詳細(xì)設(shè)計/SCAN(電梯算法)void SCAN(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)
43、行從小到大排列 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(" 磁道方向:沿磁道增大的方向"); printf("n SCAN 調(diào)度結(jié)果: "); for(i=0; i<m;
44、 i+) if(now<=arrayi) printf("%d ",arrayi); sum=arrayi-now+sum; now=arrayi; else j=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
45、(循環(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=arrayj; arrayj=temp; for( i=0; i<m; i+) /輸出排序后的磁道號數(shù)組 printf("%d ",arrayi); printf("n 請輸入當(dāng)前的磁道號: "); scanf("%d",
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 椅子銷售合同
- 2025勞動合同示范(簽訂、續(xù)簽、終止等)
- 2025轉(zhuǎn)讓房屋買賣合同書范本
- 2025手機購銷合同
- 2025年商標(biāo)權(quán)續(xù)展服務(wù)合同書
- 民間個人借款合同簡單版范本3
- 2025年個人合伙入股合同(2篇)
- 2025合同模板房屋買賣合同標(biāo)準(zhǔn)版范本
- 2025城市供熱合同范文
- 2025年上海房地產(chǎn)居間合同模板(2篇)
- 2024年蘇州工業(yè)園區(qū)服務(wù)外包職業(yè)學(xué)院高職單招職業(yè)適應(yīng)性測試歷年參考題庫含答案解析
- 人教版初中語文2022-2024年三年中考真題匯編-學(xué)生版-專題08 古詩詞名篇名句默寫
- 2024-2025學(xué)年人教版(2024)七年級(上)數(shù)學(xué)寒假作業(yè)(十二)
- 山西粵電能源有限公司招聘筆試沖刺題2025
- ESG表現(xiàn)對企業(yè)財務(wù)績效的影響研究
- 醫(yī)療行業(yè)軟件系統(tǒng)應(yīng)急預(yù)案
- 使用錯誤評估報告(可用性工程)模版
- 《精密板料矯平機 第2部分:技術(shù)規(guī)范》
- 2023-2024年同等學(xué)力經(jīng)濟學(xué)綜合真題及參考答案
- 農(nóng)村集體土地使用權(quán)轉(zhuǎn)讓協(xié)議
- 2024年高考全國甲卷英語試卷(含答案)
評論
0/150
提交評論