上機(jī)實(shí)驗(yàn)安排課件_第1頁
上機(jī)實(shí)驗(yàn)安排課件_第2頁
上機(jī)實(shí)驗(yàn)安排課件_第3頁
上機(jī)實(shí)驗(yàn)安排課件_第4頁
上機(jī)實(shí)驗(yàn)安排課件_第5頁
已閱讀5頁,還剩65頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、操作系統(tǒng)實(shí)驗(yàn)指導(dǎo)操作系統(tǒng)實(shí)驗(yàn)指導(dǎo)作作 者:者: 任愛華,李鵬,劉方毅編著任愛華,李鵬,劉方毅編著出出 版版 社:社: 清華大學(xué)出版社清華大學(xué)出版社出版時間:出版時間: 20042004版次:版次: 1 1 實(shí)驗(yàn)時間:第實(shí)驗(yàn)時間:第7 7周周- -第第1212周(周(6 6周),每周二晚上周),每周二晚上7:30-9:007:30-9:00實(shí)驗(yàn)地點(diǎn):文波樓機(jī)房實(shí)驗(yàn)地點(diǎn):文波樓機(jī)房217217 實(shí)驗(yàn)前,認(rèn)真學(xué)習(xí)教材以及實(shí)驗(yàn)指導(dǎo)書的相關(guān)內(nèi)容,提前做實(shí)驗(yàn)前,認(rèn)真學(xué)習(xí)教材以及實(shí)驗(yàn)指導(dǎo)書的相關(guān)內(nèi)容,提前做好實(shí)驗(yàn)準(zhǔn)備。好實(shí)驗(yàn)準(zhǔn)備。 實(shí)驗(yàn)結(jié)束后提交實(shí)驗(yàn)報告,實(shí)驗(yàn)報告內(nèi)容應(yīng)包括(參照實(shí)驗(yàn)結(jié)束后提交實(shí)驗(yàn)報告,實(shí)驗(yàn)

2、報告內(nèi)容應(yīng)包括(參照實(shí)實(shí)驗(yàn)報告格式驗(yàn)報告格式.doc.doc):): 實(shí)驗(yàn)?zāi)康?、?shí)驗(yàn)內(nèi)容、設(shè)計思路和流程框圖,源程序(含實(shí)驗(yàn)?zāi)康?、?shí)驗(yàn)內(nèi)容、設(shè)計思路和流程框圖,源程序(含注釋)清單、測試結(jié)果以及實(shí)驗(yàn)總結(jié)。注釋)清單、測試結(jié)果以及實(shí)驗(yàn)總結(jié)。 實(shí)驗(yàn)報告杜絕抄襲現(xiàn)象,一經(jīng)發(fā)現(xiàn)雷同,雙方成績均以實(shí)驗(yàn)報告杜絕抄襲現(xiàn)象,一經(jīng)發(fā)現(xiàn)雷同,雙方成績均以0 0分計分計算。算。 實(shí)驗(yàn)報告完成后班長收齊上交。實(shí)驗(yàn)報告完成后班長收齊上交。1 1、預(yù)習(xí)要求:、預(yù)習(xí)要求: 進(jìn)程的基本概念;進(jìn)程的同步和互斥進(jìn)程的基本概念;進(jìn)程的同步和互斥2 2、實(shí)驗(yàn)?zāi)康模?、?shí)驗(yàn)?zāi)康模?(1 1)掌握進(jìn)程同步和互斥的含義;)掌握進(jìn)程同步和互斥

3、的含義;(2 2)能進(jìn)行多進(jìn)程的設(shè)計。)能進(jìn)行多進(jìn)程的設(shè)計。3 3、實(shí)驗(yàn)內(nèi)容及要求:、實(shí)驗(yàn)內(nèi)容及要求:參照教材第參照教材第3 3章和章和操作系統(tǒng)實(shí)驗(yàn)指導(dǎo)操作系統(tǒng)實(shí)驗(yàn)指導(dǎo)實(shí)驗(yàn)一實(shí)驗(yàn)一的要求,用信號的要求,用信號量機(jī)制實(shí)現(xiàn)生產(chǎn)者和消費(fèi)者問題。量機(jī)制實(shí)現(xiàn)生產(chǎn)者和消費(fèi)者問題。一、實(shí)驗(yàn)?zāi)康囊?、?shí)驗(yàn)?zāi)康恼莆栈镜倪M(jìn)程同步與互斥算法,理解生產(chǎn)者掌握基本的進(jìn)程同步與互斥算法,理解生產(chǎn)者- -消費(fèi)者問題消費(fèi)者問題。學(xué)習(xí)使用學(xué)習(xí)使用Windows 2000/XPWindows 2000/XP中基本的中基本的同步對象同步對象,掌握相關(guān),掌握相關(guān)APIAPI的使用方法。的使用方法。1.1.了解了解Windows 20

4、00/XPWindows 2000/XP中中多線程多線程的并發(fā)執(zhí)行機(jī)制,實(shí)現(xiàn)進(jìn)的并發(fā)執(zhí)行機(jī)制,實(shí)現(xiàn)進(jìn)程的同步與互斥。程的同步與互斥。 線程與進(jìn)程的比較線程與進(jìn)程的比較二、實(shí)驗(yàn)內(nèi)容及要求二、實(shí)驗(yàn)內(nèi)容及要求實(shí)驗(yàn)內(nèi)容:實(shí)驗(yàn)內(nèi)容:l以生產(chǎn)者以生產(chǎn)者- -消費(fèi)者模型為依據(jù)消費(fèi)者模型為依據(jù),在,在Windows 2000/XPWindows 2000/XP環(huán)境下創(chuàng)建一個控環(huán)境下創(chuàng)建一個控制臺進(jìn)程,在該進(jìn)程中創(chuàng)建制臺進(jìn)程,在該進(jìn)程中創(chuàng)建n n個線程模擬生產(chǎn)者和消費(fèi)者,實(shí)現(xiàn)進(jìn)程個線程模擬生產(chǎn)者和消費(fèi)者,實(shí)現(xiàn)進(jìn)程( (線線程程) )的同步與互斥。的同步與互斥。實(shí)驗(yàn)要求:實(shí)驗(yàn)要求:l學(xué)習(xí)并理解生產(chǎn)者學(xué)習(xí)并理解生產(chǎn)

5、者- -消費(fèi)者模型及其同步和互斥規(guī)則;消費(fèi)者模型及其同步和互斥規(guī)則;l學(xué)習(xí)了解學(xué)習(xí)了解WindowsWindows同步對象及其特性;同步對象及其特性;l熟悉實(shí)驗(yàn)環(huán)境,掌握相關(guān)熟悉實(shí)驗(yàn)環(huán)境,掌握相關(guān)APIAPI的使用方法;的使用方法;l設(shè)計程序,實(shí)現(xiàn)生產(chǎn)者設(shè)計程序,實(shí)現(xiàn)生產(chǎn)者- -消費(fèi)者進(jìn)程消費(fèi)者進(jìn)程( (線程線程) )的同步與互斥;的同步與互斥;l每個人提交一份實(shí)驗(yàn)報告。每個人提交一份實(shí)驗(yàn)報告。 生產(chǎn)者和消費(fèi)者問題生產(chǎn)者和消費(fèi)者問題生產(chǎn)者進(jìn)程的功能:生產(chǎn)東西,供消費(fèi)者消費(fèi);生產(chǎn)者進(jìn)程的功能:生產(chǎn)東西,供消費(fèi)者消費(fèi);消費(fèi)者進(jìn)程的功能:消費(fèi)生產(chǎn)者生產(chǎn)的東西。消費(fèi)者進(jìn)程的功能:消費(fèi)生產(chǎn)者生產(chǎn)的東西。

6、三、相關(guān)基礎(chǔ)知識介紹三、相關(guān)基礎(chǔ)知識介紹同步對象同步對象l同步對象是指同步對象是指WindowsWindows中用于實(shí)現(xiàn)同步與互斥的實(shí)體,包括中用于實(shí)現(xiàn)同步與互斥的實(shí)體,包括信號信號量量(Semaphore)(Semaphore)、互斥量互斥量(Mutex)(Mutex)、臨界區(qū)臨界區(qū)(Critical Section)(Critical Section)和和事件事件(Events)(Events)等。本實(shí)驗(yàn)中使用到信號量、互斥量和臨界區(qū)三個等。本實(shí)驗(yàn)中使用到信號量、互斥量和臨界區(qū)三個同步對象。同步對象。同步對象的使用步驟:同步對象的使用步驟:創(chuàng)建創(chuàng)建/ /初始化同步對象。初始化同步對象。請求

7、該同步對象,隨即進(jìn)入臨界區(qū)請求該同步對象,隨即進(jìn)入臨界區(qū)( (這一步相當(dāng)于這一步相當(dāng)于P P操作操作) )。釋放該同步對象釋放該同步對象( (這一步相當(dāng)于這一步相當(dāng)于V V操作操作) )。這些對象在一個線程中創(chuàng)建,在其它線程中都可以使用。這些對象在一個線程中創(chuàng)建,在其它線程中都可以使用。三、相關(guān)基礎(chǔ)知識介紹三、相關(guān)基礎(chǔ)知識介紹相關(guān)相關(guān)APIAPI的功能及使用的功能及使用l我們利用我們利用Windows SDKWindows SDK提供的提供的APIAPI編程實(shí)現(xiàn)實(shí)驗(yàn)題目的要求,編程實(shí)現(xiàn)實(shí)驗(yàn)題目的要求,在在VCVC中包含有中包含有Windows SDKWindows SDK的所有工具和定義。要使

8、用這些的所有工具和定義。要使用這些APIAPI,需要包含對這些函數(shù)進(jìn)行說明的,需要包含對這些函數(shù)進(jìn)行說明的SDKSDK頭文件頭文件最常見的是最常見的是Windows.hWindows.h。l下面給出的是本實(shí)驗(yàn)使用到的下面給出的是本實(shí)驗(yàn)使用到的APIAPI的功能和使用方法的簡單介的功能和使用方法的簡單介紹。紹。相關(guān)相關(guān)APIAPI的功能及使用(具體的用法可以參考的功能及使用(具體的用法可以參考MSDNMSDN)(1) CreateThread(1) CreateThreadl功能:創(chuàng)建一個線程,該線程在調(diào)用進(jìn)程的地址空間中執(zhí)行。功能:創(chuàng)建一個線程,該線程在調(diào)用進(jìn)程的地址空間中執(zhí)行。l格式:格式:

9、HANDLE CreateThread( LPSECURITY_ATTRIBUTES lpThreadAttributes,HANDLE CreateThread( LPSECURITY_ATTRIBUTES lpThreadAttributes,DWORD dwStackSize,DWORD dwStackSize,LPTHREAD_START_ROUTINE lpStartAddress,LPTHREAD_START_ROUTINE lpStartAddress,LPVOID lpParamiter,LPVOID lpParamiter,DWORD dwCreationFlags,DWOR

10、D dwCreationFlags,Lpdword lpThread );Lpdword lpThread );l參數(shù)說明:參數(shù)說明:lpThreadAttributeslpThreadAttributes指向一個指向一個LPSECURITY_ATTRIBUTES(LPSECURITY_ATTRIBUTES(新線程的安全性描述符新線程的安全性描述符) )。dwStackSizedwStackSize定義原始堆棧大小。定義原始堆棧大小。lpStartAddresslpStartAddress指向使用指向使用LPTHRLPTHREAEAD_START_ROUTINED_START_ROUTINE類

11、型定義的函數(shù)。類型定義的函數(shù)。lpParamiterlpParamiter定義一個給進(jìn)程傳遞參數(shù)的指針。定義一個給進(jìn)程傳遞參數(shù)的指針。dwCreationFlagsdwCreationFlags定義控制線程創(chuàng)建的附加標(biāo)志。定義控制線程創(chuàng)建的附加標(biāo)志。lpThreadlpThread保存線程標(biāo)志符保存線程標(biāo)志符(32(32位位) )handle在在windows中表示一個中表示一個void型指針,占用型指針,占用32bit空間,空間,用來標(biāo)示不同的用來標(biāo)示不同的API對象,例對象,例如:信號量、線程等如:信號量、線程等相關(guān)相關(guān)APIAPI的功能及使用的功能及使用(2) CreateMutex(2

12、) CreateMutex結(jié)合以下結(jié)合以下2 2個函數(shù)使用:個函數(shù)使用:WaitForSingleObjectWaitForSingleObject(對應(yīng)對應(yīng)p p操作)互斥量上鎖;操作)互斥量上鎖;ReleaseMutexReleaseMutex(對應(yīng)對應(yīng)v v操作)互斥量解鎖。操作)互斥量解鎖。l功能:創(chuàng)建一個命名的或者匿名的互斥量對象功能:創(chuàng)建一個命名的或者匿名的互斥量對象l格式:格式:HANDLE CreateMutex(LPSECURITY_ATTRIBUTES lpMutexAttributes,HANDLE CreateMutex(LPSECURITY_ATTRIBUTES lp

13、MutexAttributes,BOOL bInitialOwner,BOOL bInitialOwner,LPCTSTR lpName);LPCTSTR lpName);l參數(shù)說明:參數(shù)說明:lpMutexAttributeslpMutexAttributes必須取值必須取值NULLNULL。bInitialOwnerbInitialOwner指示當(dāng)前線程是否馬上擁有該互斥量指示當(dāng)前線程是否馬上擁有該互斥量( (即馬上加鎖即馬上加鎖) )。lpNamelpName互斥量名稱。互斥量名稱。相關(guān)相關(guān)APIAPI的功能及使用的功能及使用(3) CreateSemaphore(3) CreateSe

14、maphorel功能:創(chuàng)建一個命名的或者匿名的信號量對象。功能:創(chuàng)建一個命名的或者匿名的信號量對象。l格式:格式:HANDLE CreateSemaphore( LPSECURITY_ATTRIBUTES lpSemaphoreAttributes,HANDLE CreateSemaphore( LPSECURITY_ATTRIBUTES lpSemaphoreAttributes, LONG lInitialCount, LONG lInitialCount, LONG lMaximumCount, LONG lMaximumCount, LPCTSTR lpName ); LPCTSTR

15、lpName );l參數(shù)說明:參數(shù)說明:lpSemaphoreAttributeslpSemaphoreAttributes必須取值必須取值NULLNULL。lInitialCountlInitialCount信號量的初始值。該值大于信號量的初始值。該值大于0 0,但小于,但小于l lMaximumCountMaximumCount指定的最大值。指定的最大值。lMaximumCountlMaximumCount信號量的最大值。信號量的最大值。lpNamelpName信號量名稱。信號量名稱。相關(guān)相關(guān)APIAPI的功能及使用的功能及使用(4) WaitForSingleObject(4) Wait

16、ForSingleObjectl功能功能: :使程序處于等待狀態(tài),直到信號量或者互斥量出現(xiàn)使程序處于等待狀態(tài),直到信號量或者互斥量出現(xiàn)或者超過規(guī)定的等待時間。信號量出現(xiàn)指信號量大于或等于或者超過規(guī)定的等待時間。信號量出現(xiàn)指信號量大于或等于1 1,互斥量出現(xiàn)指互斥量解鎖。在返回之前將信號量減,互斥量出現(xiàn)指互斥量解鎖。在返回之前將信號量減1 1或者或者互斥量加鎖。互斥量加鎖。l格式格式: :DWORD WaitForSingleObject(HANDLE hHandle, DWORD dwMilliseconds);DWORD WaitForSingleObject(HANDLE hHandle,

17、 DWORD dwMilliseconds);l參數(shù)說明參數(shù)說明: :hHandlehHandle信號量指針。信號量指針。dwMillisecondsdwMilliseconds等待的最長時間等待的最長時間(INFINITE(INFINITE為無限等待為無限等待) )。相關(guān)相關(guān)APIAPI的功能及使用的功能及使用(5) ReleaseSemaphore(5) ReleaseSemaphorel功能功能: :對指定信號量加上一個指定大小的量。成功執(zhí)行則對指定信號量加上一個指定大小的量。成功執(zhí)行則返回非返回非0 0值。值。l格式格式: :BOOL ReleaseSemaphore( HANDLE

18、hSemaphore,BOOL ReleaseSemaphore( HANDLE hSemaphore, LONG lReleaseCount, LONG lReleaseCount, LPLONG lppreviousCount); LPLONG lppreviousCount);l參數(shù)說明參數(shù)說明: :hSemaphorehSemaphore信號量指針。信號量指針。lReleaseCountlReleaseCount信號量的增量。信號量的增量。lppreviousCountlppreviousCount保存信號量當(dāng)前值。保存信號量當(dāng)前值。相關(guān)相關(guān)APIAPI的功能及使用的功能及使用(6)

19、ReleaseMutex(6) ReleaseMutexl功能:用來打開互斥鎖(互斥量解鎖),即將互斥量加功能:用來打開互斥鎖(互斥量解鎖),即將互斥量加1 1。成功調(diào)用則。成功調(diào)用則返回返回0 0。l格式:格式:BOOL ReleaseMutex(HANDLE hMutex);BOOL ReleaseMutex(HANDLE hMutex);l參數(shù)說明:參數(shù)說明:hMutexhMutex互斥量指針?;コ饬恐羔?。(7) InitializeCriticalSection(7) InitializeCriticalSectionl功能:初始化臨界區(qū)對象功能:初始化臨界區(qū)對象l格式:格式:VOID

20、 InitializeCriticalSection(LPCRITICAL_SECTION lpCriticalSection);VOID InitializeCriticalSection(LPCRITICAL_SECTION lpCriticalSection);l參數(shù)說明:參數(shù)說明:lpCriticalSectionlpCriticalSection指向臨界區(qū)對象的指針。指向臨界區(qū)對象的指針。相關(guān)相關(guān)APIAPI的功能及使用的功能及使用(8) EnterCriticalSection(8) EnterCriticalSectionl功能:該函數(shù)用于等待指定臨界區(qū)對象的所有權(quán)。當(dāng)調(diào)用線程被

21、賦予功能:該函數(shù)用于等待指定臨界區(qū)對象的所有權(quán)。當(dāng)調(diào)用線程被賦予所有權(quán)時,該函數(shù)返回。所有權(quán)時,該函數(shù)返回。l格式:格式:VOID enterCriticalSection(LPCRITICAL_SECTION lpCriticalSection);VOID enterCriticalSection(LPCRITICAL_SECTION lpCriticalSection);l參數(shù)說明:參數(shù)說明:lpCriticalSectionlpCriticalSection指向臨界區(qū)對象的指針。指向臨界區(qū)對象的指針。(9) LeaveCriticalSection(9) LeaveCriticalSec

22、tionl功能功能: :釋放指定臨界區(qū)對象的所有權(quán)。釋放指定臨界區(qū)對象的所有權(quán)。l格式格式: :VOID LeaveCriticalSection(LPCRITICAL_SECTION lpCriticalSection);VOID LeaveCriticalSection(LPCRITICAL_SECTION lpCriticalSection);l參數(shù)說明參數(shù)說明: :lpCriticalSectionlpCriticalSection指向臨界區(qū)對象的指針。指向臨界區(qū)對象的指針。四、程序的實(shí)現(xiàn)四、程序的實(shí)現(xiàn)程序的結(jié)構(gòu)包括程序的結(jié)構(gòu)包括:一個主函數(shù)、分別用于模擬消費(fèi)者和生產(chǎn):一個主函數(shù)、分別

23、用于模擬消費(fèi)者和生產(chǎn)者的兩個函數(shù)以及三個輔助性的函數(shù)。者的兩個函數(shù)以及三個輔助性的函數(shù)。主函數(shù)主函數(shù)用于初始化緩沖區(qū)和各個同步對象,并完成線程信用于初始化緩沖區(qū)和各個同步對象,并完成線程信息的讀入和記錄,最后根據(jù)該組線程記錄啟動模擬線程,并息的讀入和記錄,最后根據(jù)該組線程記錄啟動模擬線程,并等待所有線程的運(yùn)行結(jié)束后退出整個程序。等待所有線程的運(yùn)行結(jié)束后退出整個程序。消費(fèi)者和生產(chǎn)者函數(shù)消費(fèi)者和生產(chǎn)者函數(shù)運(yùn)行于相應(yīng)線程中完成對緩沖區(qū)的讀運(yùn)行于相應(yīng)線程中完成對緩沖區(qū)的讀寫動作。寫動作。三個輔助函數(shù)三個輔助函數(shù)被生產(chǎn)者和消費(fèi)者函數(shù)調(diào)用,是生產(chǎn)和消費(fèi)被生產(chǎn)者和消費(fèi)者函數(shù)調(diào)用,是生產(chǎn)和消費(fèi)函數(shù)中對緩沖區(qū)訪

24、問功能的一些包裝。函數(shù)中對緩沖區(qū)訪問功能的一些包裝。四、程序的實(shí)現(xiàn)四、程序的實(shí)現(xiàn) 數(shù)據(jù)結(jié)構(gòu)數(shù)據(jù)結(jié)構(gòu)用一個整型數(shù)組用一個整型數(shù)組Buffer_CriticalBuffer_Critical表示緩沖區(qū)。表示緩沖區(qū)。緩沖區(qū)數(shù)組初始化為緩沖區(qū)數(shù)組初始化為-1-1(表示緩沖區(qū)為空)(表示緩沖區(qū)為空)當(dāng)生產(chǎn)者找到一個空的緩沖區(qū),準(zhǔn)備將生產(chǎn)的產(chǎn)品放入其中前,將該緩當(dāng)生產(chǎn)者找到一個空的緩沖區(qū),準(zhǔn)備將生產(chǎn)的產(chǎn)品放入其中前,將該緩沖區(qū)的值設(shè)為沖區(qū)的值設(shè)為-2-2,表示該緩沖區(qū)正處于被寫的狀態(tài),不允許其他生產(chǎn)者,表示該緩沖區(qū)正處于被寫的狀態(tài),不允許其他生產(chǎn)者訪問該緩沖區(qū)訪問該緩沖區(qū)生產(chǎn)者將自己的生產(chǎn)者將自己的IDI

25、D號作為產(chǎn)品編號寫入緩沖區(qū),方便消費(fèi)者識別號作為產(chǎn)品編號寫入緩沖區(qū),方便消費(fèi)者識別緩沖區(qū)數(shù)組緩沖區(qū)數(shù)組Buffer_CriticalBuffer_Critical:1-2-1-1.四、程序的實(shí)現(xiàn)四、程序的實(shí)現(xiàn) 數(shù)據(jù)結(jié)構(gòu)數(shù)據(jù)結(jié)構(gòu)2.2.用一個用一個自定義結(jié)構(gòu)自定義結(jié)構(gòu)ThreadInfoThreadInfo記錄一條線程的信息,多個線程對應(yīng)一個記錄一條線程的信息,多個線程對應(yīng)一個ThreadInfoThreadInfo數(shù)組。數(shù)組。線程信息數(shù)組線程信息數(shù)組ThreadInfo ThreadInfo :線程號serial線程標(biāo)識(P/C)entity延遲時間delay請求個數(shù)n_request請求數(shù)組

26、thread_request.存放請求產(chǎn)品號的數(shù)組四、程序的實(shí)現(xiàn)四、程序的實(shí)現(xiàn) 數(shù)據(jù)結(jié)構(gòu)數(shù)據(jù)結(jié)構(gòu)3.3.通過如下同步對象實(shí)現(xiàn)互斥:通過如下同步對象實(shí)現(xiàn)互斥:l設(shè)一個互斥量設(shè)一個互斥量h_mutexh_mutex,實(shí)現(xiàn)生產(chǎn)者在查詢和保留緩沖區(qū)的下一個空位,實(shí)現(xiàn)生產(chǎn)者在查詢和保留緩沖區(qū)的下一個空位置時進(jìn)行互斥。置時進(jìn)行互斥。l每 一 個 生 產(chǎn) 者 用 一 個 信 號 量 與 其 消 費(fèi) 者 同 步 , 通 過 設(shè) 置每 一 個 生 產(chǎn) 者 用 一 個 信 號 量 與 其 消 費(fèi) 者 同 步 , 通 過 設(shè) 置h_Semaphoreh_SemaphoreMAX_THREAD_NUMMAX_THRE

27、AD_NUM信號量數(shù)組實(shí)現(xiàn),表示相應(yīng)產(chǎn)品已經(jīng)生信號量數(shù)組實(shí)現(xiàn),表示相應(yīng)產(chǎn)品已經(jīng)生產(chǎn)。同時用一個表示空緩沖區(qū)數(shù)目的信號量產(chǎn)。同時用一個表示空緩沖區(qū)數(shù)目的信號量empty_semephoreempty_semephore指示是否指示是否存在空位置,以便開始下一個產(chǎn)品的生產(chǎn)。存在空位置,以便開始下一個產(chǎn)品的生產(chǎn)。l每一個緩沖區(qū)用一個同步對象實(shí)現(xiàn)該緩沖區(qū)上消費(fèi)者之間的互斥,通每一個緩沖區(qū)用一個同步對象實(shí)現(xiàn)該緩沖區(qū)上消費(fèi)者之間的互斥,通過設(shè)置臨界區(qū)對象數(shù)組過設(shè)置臨界區(qū)對象數(shù)組PC_CriticalPC_CriticalMAX_BUFFER_NUMMAX_BUFFER_NUM實(shí)現(xiàn)。實(shí)現(xiàn)。四、程序的實(shí)現(xiàn)四、

28、程序的實(shí)現(xiàn) 實(shí)驗(yàn)環(huán)境:實(shí)驗(yàn)環(huán)境: Windows 2000/XP + Visual C+ 6.0 Windows 2000/XP + Visual C+ 6.0 實(shí)驗(yàn)步驟:實(shí)驗(yàn)步驟: 在在VCVC里新建一個名為里新建一個名為R_WP1R_WP1的的win32 console applicationwin32 console application工工程。程。 在工程中創(chuàng)建一個名為在工程中創(chuàng)建一個名為R_WP1.cppR_WP1.cpp的源文件,輸入源程序代的源文件,輸入源程序代碼。碼。 編譯連接程序,得到編譯連接程序,得到R_WP1.exeR_WP1.exe文件文件, , 然后把給定的然后把給

29、定的test.txttest.txt文件存入文件存入R_WP1R_WP1工程所在目錄下的工程所在目錄下的debugdebug文件夾里。文件夾里。 在在DOSDOS控制臺里運(yùn)行該程序??刂婆_里運(yùn)行該程序。四、程序的實(shí)現(xiàn)四、程序的實(shí)現(xiàn)實(shí)驗(yàn)所用的測試用例文件實(shí)驗(yàn)所用的測試用例文件創(chuàng)建一個控制臺進(jìn)程,在此進(jìn)程中創(chuàng)建創(chuàng)建一個控制臺進(jìn)程,在此進(jìn)程中創(chuàng)建n n個線程來模擬生產(chǎn)者或者消費(fèi)者。這個線程來模擬生產(chǎn)者或者消費(fèi)者。這些線程的信息在些線程的信息在“測試用例文件測試用例文件”中予以指定。該文件的格式和含義如下:中予以指定。該文件的格式和含義如下: 3 31 P 31 P 32 P 42 P 43 C 4

30、13 C 4 14 P 24 P 25 C 3 1 2 45 C 3 1 2 4說明:說明:第一行:給出的是程序中設(shè)置的臨界區(qū)的個數(shù);其余各行分別描述了一個生產(chǎn)者或者消費(fèi)者線第一行:給出的是程序中設(shè)置的臨界區(qū)的個數(shù);其余各行分別描述了一個生產(chǎn)者或者消費(fèi)者線程的信息。每行中的數(shù)據(jù)之間用程的信息。每行中的數(shù)據(jù)之間用TabTab鍵分隔。鍵分隔。第一列:線程號。(不管是消費(fèi)者還是生產(chǎn)者,都有一個對應(yīng)的線程號)。第一列:線程號。(不管是消費(fèi)者還是生產(chǎn)者,都有一個對應(yīng)的線程號)。第二列:第二列:P P生產(chǎn)者,生產(chǎn)者,C C消費(fèi)者。消費(fèi)者。第三列:線程在生產(chǎn)和消費(fèi)前的休眠時間,單位為秒。設(shè)置這個參數(shù)的目的是

31、可以通過調(diào)整這第三列:線程在生產(chǎn)和消費(fèi)前的休眠時間,單位為秒。設(shè)置這個參數(shù)的目的是可以通過調(diào)整這一列參數(shù),控制開始進(jìn)行生產(chǎn)和消費(fèi)動作的時間。一列參數(shù),控制開始進(jìn)行生產(chǎn)和消費(fèi)動作的時間。如果是生產(chǎn)者,則該行只有三個字段。如果代表消費(fèi)者,則該行后邊還有若干字段,代表要求如果是生產(chǎn)者,則該行只有三個字段。如果代表消費(fèi)者,則該行后邊還有若干字段,代表要求消費(fèi)的產(chǎn)品所對應(yīng)的生產(chǎn)者的線程號。消費(fèi)的產(chǎn)品所對應(yīng)的生產(chǎn)者的線程號。典型測試用例分析典型測試用例分析3號生產(chǎn)者生產(chǎn)產(chǎn)品放到號生產(chǎn)者生產(chǎn)產(chǎn)品放到0號緩沖區(qū)單元號緩沖區(qū)單元4號消費(fèi)者等待號消費(fèi)者等待1號生產(chǎn)者生產(chǎn)號生產(chǎn)者生產(chǎn)2號生產(chǎn)者生產(chǎn)產(chǎn)品放到號生產(chǎn)者生

32、產(chǎn)產(chǎn)品放到1號緩沖區(qū)單元號緩沖區(qū)單元1號生產(chǎn)者生產(chǎn)產(chǎn)品放到號生產(chǎn)者生產(chǎn)產(chǎn)品放到2號緩沖區(qū)單元號緩沖區(qū)單元 (4號消費(fèi)者等待號消費(fèi)者等待1號生產(chǎn)者生產(chǎn)號生產(chǎn)者生產(chǎn)),),1號生產(chǎn)者完成生產(chǎn)后號生產(chǎn)者完成生產(chǎn)后,4號消費(fèi)者被激活號消費(fèi)者被激活,此時,此時4號消費(fèi)者所要求的號消費(fèi)者所要求的1、3、2號生號生產(chǎn)者的產(chǎn)品都已經(jīng)放在緩沖區(qū)單元中,所以產(chǎn)者的產(chǎn)品都已經(jīng)放在緩沖區(qū)單元中,所以4號消費(fèi)者依次號消費(fèi)者依次進(jìn)行進(jìn)行3個產(chǎn)品的消費(fèi)。個產(chǎn)品的消費(fèi)。 消費(fèi)完成后如果沒有其他的消費(fèi)者請求消費(fèi)該產(chǎn)品,則釋消費(fèi)完成后如果沒有其他的消費(fèi)者請求消費(fèi)該產(chǎn)品,則釋放該產(chǎn)品所占用的緩沖區(qū)單元。放該產(chǎn)品所占用的緩沖區(qū)單元。

33、同步和互斥同步和互斥-11.生產(chǎn)者請求生產(chǎn),首先要判斷當(dāng)前緩沖區(qū)中是否有一生產(chǎn)者請求生產(chǎn),首先要判斷當(dāng)前緩沖區(qū)中是否有一個 空 的 緩 沖 區(qū) 單 元 , 設(shè) 置 一 個 同 步 信 號 量個 空 的 緩 沖 區(qū) 單 元 , 設(shè) 置 一 個 同 步 信 號 量empty_semaphore來表示緩沖區(qū)中空的緩沖區(qū)單元的來表示緩沖區(qū)中空的緩沖區(qū)單元的數(shù)量,初始值是緩沖區(qū)的數(shù)目。數(shù)量,初始值是緩沖區(qū)的數(shù)目。 對應(yīng)的對應(yīng)的P操作為(操作為(在生產(chǎn)者進(jìn)程中):): 對應(yīng)的對應(yīng)的V操作為(操作為(在消費(fèi)者進(jìn)程中):):同步和互斥同步和互斥-22.在為生產(chǎn)者分配空的緩沖區(qū)單元時,生產(chǎn)者之間要互斥,設(shè)置一個

34、互斥信號量h_mutex來實(shí)現(xiàn)對空的緩沖區(qū)單元的互斥訪問。 對應(yīng)的P操作為: 對應(yīng)的V操作為:同步和互斥同步和互斥-33.對于每一個生產(chǎn)者,生產(chǎn)完產(chǎn)品后要告訴消費(fèi)者生產(chǎn)已經(jīng)完成,使它生產(chǎn)的產(chǎn)品可以被多個 消 費(fèi) 者 使 用 , 設(shè) 置 一 個 同 步 信 號 量h_Semaphore來實(shí)現(xiàn)生產(chǎn)者和消費(fèi)者之間的同步。 對應(yīng)的P操作為(在消費(fèi)者進(jìn)程中): 對應(yīng)的V操作為(在生產(chǎn)者進(jìn)程中):同步和互斥同步和互斥-3 信號量數(shù)組h_Semaphore初始化為0,最大值是線程的實(shí)際數(shù)目,消費(fèi)者在消費(fèi)相應(yīng)的產(chǎn)品時,先要對對應(yīng)的生產(chǎn)者的信號量進(jìn)行測試,看生產(chǎn)者是否已經(jīng)生產(chǎn)此產(chǎn)品,如果生產(chǎn)則消費(fèi),如果沒有生產(chǎn)

35、則等待(如果一直等待有可能會出現(xiàn)死鎖),為了不出現(xiàn)死鎖,可將等待的最長時間設(shè)為5秒,如果超時則認(rèn)為出現(xiàn)死鎖,此時放棄對此產(chǎn)品的消費(fèi),進(jìn)而消費(fèi)下一個沒有消費(fèi)的產(chǎn)品。 生產(chǎn)者生產(chǎn)了產(chǎn)品時,為對應(yīng)的信號量一次增加的值是線程的實(shí)際數(shù)目n_Thread,因此同一個產(chǎn)品最多允許n_Thread個消費(fèi)者消費(fèi)。同步和互斥同步和互斥-44.消費(fèi)者和消費(fèi)者之間的互斥: 緩沖區(qū)是一個臨界資源,每一次只允許一個消費(fèi)者進(jìn)入到某一個緩沖區(qū)單元消費(fèi)產(chǎn)品,設(shè)置一個臨界區(qū)數(shù)組PC_Critical來實(shí)現(xiàn)對緩沖區(qū)的互斥訪問。 對應(yīng)的P操作(進(jìn)入臨界區(qū)): 對應(yīng)的V操作(離開臨界區(qū)):l 要求:要求: 分析程序結(jié)構(gòu),看懂源程序,把

36、程序調(diào)通;分析程序結(jié)構(gòu),看懂源程序,把程序調(diào)通; 自己設(shè)計不同的測試用例,分析、觀察程序運(yùn)行的自己設(shè)計不同的測試用例,分析、觀察程序運(yùn)行的結(jié)果(程序運(yùn)行的結(jié)果和分析要在實(shí)驗(yàn)報告中寫出結(jié)果(程序運(yùn)行的結(jié)果和分析要在實(shí)驗(yàn)報告中寫出來);來); 在某些情況下會出現(xiàn)死鎖,修改程序,解決死鎖。在某些情況下會出現(xiàn)死鎖,修改程序,解決死鎖。每個同學(xué)交一份實(shí)驗(yàn)報告。(每個同學(xué)交一份實(shí)驗(yàn)報告。(11.111.1號之前交)號之前交)解決生產(chǎn)者和消費(fèi)者模型解決生產(chǎn)者和消費(fèi)者模型中的死鎖問題中的死鎖問題死鎖例子死鎖例子 消費(fèi)者C請求3號產(chǎn)品而等待,而生產(chǎn)3號產(chǎn)品的生產(chǎn)者3因請求空緩沖區(qū)而等待(緩沖區(qū)滿),相互等待,出

37、現(xiàn)死鎖。死鎖分析 源程序中之所以會產(chǎn)生死鎖,是因?yàn)樵闯绦蛑兄詴a(chǎn)生死鎖,是因?yàn)橄M(fèi)者對產(chǎn)品的消費(fèi)消費(fèi)者對產(chǎn)品的消費(fèi)是按次序執(zhí)行的是按次序執(zhí)行的,當(dāng)生產(chǎn)者生產(chǎn)的產(chǎn)品占滿緩沖區(qū),緩沖,當(dāng)生產(chǎn)者生產(chǎn)的產(chǎn)品占滿緩沖區(qū),緩沖區(qū)中卻沒有消費(fèi)者所需要的產(chǎn)品時,消費(fèi)者等待,同時其區(qū)中卻沒有消費(fèi)者所需要的產(chǎn)品時,消費(fèi)者等待,同時其他生產(chǎn)者因得不到緩沖區(qū)而被阻塞,因此造成了死鎖。他生產(chǎn)者因得不到緩沖區(qū)而被阻塞,因此造成了死鎖。 如果,如果,讓消費(fèi)者在當(dāng)前沒有所需產(chǎn)品的情況下先跳過該產(chǎn)讓消費(fèi)者在當(dāng)前沒有所需產(chǎn)品的情況下先跳過該產(chǎn)品,而去消費(fèi)下一個要消費(fèi)的產(chǎn)品品,而去消費(fèi)下一個要消費(fèi)的產(chǎn)品,如此進(jìn)行下去,緩沖,如

38、此進(jìn)行下去,緩沖區(qū)中的產(chǎn)品肯定是消費(fèi)者所需的某個產(chǎn)品。消費(fèi)后,緩沖區(qū)中的產(chǎn)品肯定是消費(fèi)者所需的某個產(chǎn)品。消費(fèi)后,緩沖區(qū)得以釋放,其他生產(chǎn)者也可繼續(xù)運(yùn)行。然后再循環(huán)消費(fèi)區(qū)得以釋放,其他生產(chǎn)者也可繼續(xù)運(yùn)行。然后再循環(huán)消費(fèi)消費(fèi)者所需的產(chǎn)品,直到進(jìn)程結(jié)束即可。消費(fèi)者所需的產(chǎn)品,直到進(jìn)程結(jié)束即可。死鎖分析 用上述解決死鎖的方案,既然消費(fèi)者得不到用上述解決死鎖的方案,既然消費(fèi)者得不到3號生產(chǎn)者的產(chǎn)品,號生產(chǎn)者的產(chǎn)品,可跳過此產(chǎn)品可跳過此產(chǎn)品,先去消費(fèi),先去消費(fèi)下一個(即下一個(即1號)生產(chǎn)者的產(chǎn)品,此時緩沖區(qū)號)生產(chǎn)者的產(chǎn)品,此時緩沖區(qū)中存在中存在1號生產(chǎn)者的產(chǎn)品,因此可以消費(fèi),消號生產(chǎn)者的產(chǎn)品,因此可以

39、消費(fèi),消費(fèi)后相應(yīng)的緩沖區(qū)得到釋放,費(fèi)后相應(yīng)的緩沖區(qū)得到釋放,3號生產(chǎn)者得到號生產(chǎn)者得到緩沖區(qū)而不必阻塞。然后消費(fèi)者循環(huán)消費(fèi)所緩沖區(qū)而不必阻塞。然后消費(fèi)者循環(huán)消費(fèi)所需的產(chǎn)品即可,直到整個進(jìn)程的結(jié)束。需的產(chǎn)品即可,直到整個進(jìn)程的結(jié)束。 顯然死鎖問題被解決了。顯然死鎖問題被解決了。解決死鎖的基本思路解決死鎖的基本思路 改變消費(fèi)者對產(chǎn)品的消費(fèi)順序改變消費(fèi)者對產(chǎn)品的消費(fèi)順序,為等待消費(fèi),為等待消費(fèi)的產(chǎn)品信號量的產(chǎn)品信號量設(shè)一個最大等待時間,當(dāng)?shù)却O(shè)一個最大等待時間,當(dāng)?shù)却瑫r時,就認(rèn)為出現(xiàn)了死鎖超時時,就認(rèn)為出現(xiàn)了死鎖,此時暫時放棄,此時暫時放棄對本產(chǎn)品的消費(fèi),轉(zhuǎn)而消費(fèi)下一個產(chǎn)品,當(dāng)對本產(chǎn)品的消費(fèi),轉(zhuǎn)而

40、消費(fèi)下一個產(chǎn)品,當(dāng)再次對導(dǎo)致死鎖的那個產(chǎn)品有消費(fèi)請求時,再次對導(dǎo)致死鎖的那個產(chǎn)品有消費(fèi)請求時,一般來說已經(jīng)有空的緩沖區(qū)了,生產(chǎn)者已經(jīng)一般來說已經(jīng)有空的緩沖區(qū)了,生產(chǎn)者已經(jīng)生產(chǎn)了此產(chǎn)品,可以立即消費(fèi),如果還沒有生產(chǎn)了此產(chǎn)品,可以立即消費(fèi),如果還沒有生產(chǎn),可以等到下一輪再請求,必有可以消生產(chǎn),可以等到下一輪再請求,必有可以消費(fèi)的時候,因此不會死鎖。費(fèi)的時候,因此不會死鎖。對源程序的改進(jìn)(對消費(fèi)者進(jìn)程的改進(jìn))對源程序的改進(jìn)(對消費(fèi)者進(jìn)程的改進(jìn))/循環(huán)進(jìn)行所需產(chǎn)品的消費(fèi)for(i=0;counter!=0;i=(i+1)%m_requestNum)/增加了一個新的變量counter,初始值為請求的個數(shù)

41、,counter=m_requestNum;if(m_thread_requesti=-1)/消費(fèi)請求已經(jīng)得到滿足continue;/請求消費(fèi)產(chǎn)品printf(“Consumer%2drequesttoconsume%2dproduct.n,m_serial,m_thread_requesti);/如果對應(yīng)的生產(chǎn)者沒有生產(chǎn),則等待有限的時間(例如5秒),超時后退出該產(chǎn)品的等待,轉(zhuǎn)去消費(fèi)下一個產(chǎn)品wait_for_semaphore=WaitForSingleObject(h_Semaphorem_thread_requesti,5000);if(wait_for_semaphore=WAIT_

42、TIMEOUT)printf(“Consumer%2dcanntconsume%2dproductnowandbegintocomsumethenextproduct.n”,m_serial,m_thread_requesti);continue;對源程序的改進(jìn)(對消費(fèi)者進(jìn)程的改進(jìn))對源程序的改進(jìn)(對消費(fèi)者進(jìn)程的改進(jìn))/查詢要消費(fèi)的產(chǎn)品放在哪一個緩沖區(qū)中intBufferPos=FindBufferPosition(m_thread_requesti);/開始進(jìn)行具體緩沖區(qū)的消費(fèi)處理,讀和讀在該緩沖區(qū)上仍然是互斥的;/進(jìn)入臨界區(qū)后執(zhí)行消費(fèi)動作;并在完成此次請求后,通知另外的消費(fèi)者本處請求已經(jīng)滿

43、足;同時如果對應(yīng)的產(chǎn)品使用完畢,就將相應(yīng)緩沖區(qū)清空,并增加代表空緩沖區(qū)的信號量;EnterCriticalSection(&PC_CriticalBufferPos);printf(“Consumer%2dbegintoconsume%2dproduct.n,m_serial,m_thread_requesti);(ThreadInfo*)(p)-thread_requesti=-1;counter-;對源程序的改進(jìn)(對消費(fèi)者進(jìn)程的改進(jìn))對源程序的改進(jìn)(對消費(fèi)者進(jìn)程的改進(jìn))if(!IfInOtherRequest(m_thread_requesti)Buffer_CriticalBuf

44、ferPos=-1;/標(biāo)記緩沖區(qū)為空;printf(“Consumer%2dfinishconsuming%2dproduct.n,m_serial,m_thread_requesti);printf(position%2d:%3dn,BufferPos,Buffer_CriticalBufferPos);ReleaseSemaphore(empty_semaphore,1,NULL);/使空緩沖區(qū)的個數(shù)加1elseprintf(Consumer%2dfinishconsumingproduct%2dn,m_serial,m_thread_requesti);/離開臨界區(qū)LeaveCritic

45、alSection(&PC_CriticalBufferPos);1 1、預(yù)習(xí)要求:、預(yù)習(xí)要求: 存儲管理的基本方法。存儲管理的基本方法。2 2、實(shí)驗(yàn)?zāi)康模骸?shí)驗(yàn)?zāi)康模?(1 1) 理解內(nèi)存管理機(jī)制,掌握頁式虛擬存儲技術(shù);理解內(nèi)存管理機(jī)制,掌握頁式虛擬存儲技術(shù);(2 2) 掌握掌握 Windows Windows 環(huán)境下內(nèi)存管理的基本環(huán)境下內(nèi)存管理的基本APIAPI。3 3、實(shí)驗(yàn)內(nèi)容及要求:、實(shí)驗(yàn)內(nèi)容及要求: 按照按照操作系統(tǒng)實(shí)驗(yàn)指導(dǎo)操作系統(tǒng)實(shí)驗(yàn)指導(dǎo)實(shí)驗(yàn)二的要求,設(shè)計程序來實(shí)現(xiàn)。實(shí)驗(yàn)二的要求,設(shè)計程序來實(shí)現(xiàn)。一、實(shí)驗(yàn)?zāi)康囊?、?shí)驗(yàn)?zāi)康? 1理解內(nèi)存分配原理,特別是頁式虛擬內(nèi)存分配(理解內(nèi)

46、存分配原理,特別是頁式虛擬內(nèi)存分配(4.4 4.4 請求分請求分頁存儲管理)方法。頁存儲管理)方法。2 2了解了解Windows 2000/XPWindows 2000/XP的內(nèi)存管理機(jī)制,掌握頁式虛擬存儲的內(nèi)存管理機(jī)制,掌握頁式虛擬存儲技術(shù)。技術(shù)。3 3掌握掌握Windows 2000/XPWindows 2000/XP中內(nèi)存管理基本中內(nèi)存管理基本APIAPI的使用方法。的使用方法。二、實(shí)驗(yàn)內(nèi)容及要求二、實(shí)驗(yàn)內(nèi)容及要求1 1實(shí)驗(yàn)內(nèi)容實(shí)驗(yàn)內(nèi)容在程序中,用一個在程序中,用一個線程模擬線程模擬各種虛存活動,如虛存的保留各種虛存活動,如虛存的保留、提交等。、提交等。用一個用一個監(jiān)控線程監(jiān)控線程實(shí)時監(jiān)

47、控系統(tǒng)當(dāng)前的虛存操作,并在控制實(shí)時監(jiān)控系統(tǒng)當(dāng)前的虛存操作,并在控制臺輸出虛存操作信息。要求監(jiān)控線程與模擬虛存活動的線程臺輸出虛存操作信息。要求監(jiān)控線程與模擬虛存活動的線程保持同步,即模擬線程出現(xiàn)模擬活動,監(jiān)控線程應(yīng)立即監(jiān)控保持同步,即模擬線程出現(xiàn)模擬活動,監(jiān)控線程應(yīng)立即監(jiān)控到該活動的信息。到該活動的信息。在用監(jiān)控線程監(jiān)控內(nèi)存活動的同時,匯報整個存儲系統(tǒng)的在用監(jiān)控線程監(jiān)控內(nèi)存活動的同時,匯報整個存儲系統(tǒng)的使用情況。使用情況。2 2實(shí)驗(yàn)要求實(shí)驗(yàn)要求學(xué)習(xí)并理解學(xué)習(xí)并理解WindowsWindows中的虛擬存儲技術(shù);中的虛擬存儲技術(shù);學(xué)習(xí)了解虛存頁面的狀態(tài)及操作;學(xué)習(xí)了解虛存頁面的狀態(tài)及操作;熟悉實(shí)驗(yàn)

48、環(huán)境,掌握相關(guān)熟悉實(shí)驗(yàn)環(huán)境,掌握相關(guān)APIAPI的使用方法;的使用方法;設(shè)計程序,實(shí)現(xiàn)虛存活動的模擬及監(jiān)控;設(shè)計程序,實(shí)現(xiàn)虛存活動的模擬及監(jiān)控;提交實(shí)驗(yàn)報告。提交實(shí)驗(yàn)報告。三、相關(guān)知識介紹三、相關(guān)知識介紹1 1WindowsWindows中的虛擬存儲技術(shù)中的虛擬存儲技術(shù)Windows 2000/XPWindows 2000/XP作為作為3232位操作系統(tǒng),提供位操作系統(tǒng),提供3232位虛地址,每個位虛地址,每個進(jìn)程虛地址空間最多進(jìn)程虛地址空間最多4GB4GB,其中,其中2GB2GB為進(jìn)程的私有空間(為進(jìn)程的私有空間(用戶可以訪問),操作系統(tǒng)占用剩下的用戶可以訪問),操作系統(tǒng)占用剩下的2GB2G

49、B。Windows 2000/XPWindows 2000/XP以頁為單位進(jìn)行虛擬內(nèi)存的分配以頁為單位進(jìn)行虛擬內(nèi)存的分配,WindowsWindows利用利用頁面文件(頁面文件(pagefile.syspagefile.sys)來實(shí)現(xiàn)物理內(nèi)存的擴(kuò)來實(shí)現(xiàn)物理內(nèi)存的擴(kuò)展。需要時,將數(shù)據(jù)從頁面文件移到內(nèi)存,或者將數(shù)據(jù)從內(nèi)存展。需要時,將數(shù)據(jù)從頁面文件移到內(nèi)存,或者將數(shù)據(jù)從內(nèi)存移到頁面文件以便釋放內(nèi)存空間。移到頁面文件以便釋放內(nèi)存空間。頁面文件和內(nèi)存構(gòu)成頁面文件和內(nèi)存構(gòu)成“虛擬內(nèi)存虛擬內(nèi)存”/ /地址空間地址空間/ /虛擬存儲器虛擬存儲器/ /虛虛擬空間。擬空間。三、相關(guān)知識介紹三、相關(guān)知識介紹2.2

50、.虛擬頁面的狀態(tài)虛擬頁面的狀態(tài) (1) (1) 頁面的種類頁面的種類 每個進(jìn)程的虛擬地址空間中的頁面狀態(tài)可以分為每個進(jìn)程的虛擬地址空間中的頁面狀態(tài)可以分為3 3種:種:提交頁面:已經(jīng)分得內(nèi)存塊的虛擬頁面;提交頁面:已經(jīng)分得內(nèi)存塊的虛擬頁面;保留頁面:邏輯頁面已經(jīng)分配,但還沒有分配內(nèi)存塊;保留頁面:邏輯頁面已經(jīng)分配,但還沒有分配內(nèi)存塊;空閑頁面:可以保留或者提交的可用頁面。空閑頁面:可以保留或者提交的可用頁面。三、相關(guān)知識介紹三、相關(guān)知識介紹2.2.虛擬頁面的狀態(tài)虛擬頁面的狀態(tài) (2) (2) 頁面的操作頁面的操作 保留:保留進(jìn)程的虛擬地址空間,但不分配物理存儲空間;保留:保留進(jìn)程的虛擬地址空間

51、,但不分配物理存儲空間;提交:在內(nèi)存中為進(jìn)程的虛擬地址空間分配物理存儲空間;提交:在內(nèi)存中為進(jìn)程的虛擬地址空間分配物理存儲空間;回收回收/ /除配:釋放物理內(nèi)存空間,但是虛擬地址空間仍然保留;除配:釋放物理內(nèi)存空間,但是虛擬地址空間仍然保留;釋放:將物理內(nèi)存空間和虛擬地址空間全部釋放;釋放:將物理內(nèi)存空間和虛擬地址空間全部釋放;加鎖:對已經(jīng)提交的頁面進(jìn)行加鎖操作或者對已經(jīng)加鎖的頁面加鎖:對已經(jīng)提交的頁面進(jìn)行加鎖操作或者對已經(jīng)加鎖的頁面進(jìn)行解鎖。進(jìn)行解鎖。三、相關(guān)知識介紹三、相關(guān)知識介紹3.3.存儲系統(tǒng)的統(tǒng)計指標(biāo):存儲系統(tǒng)的統(tǒng)計指標(biāo):MEMORYSTATUS Structure MEMORYST

52、ATUS Structure 該結(jié)構(gòu)體用來表示系統(tǒng)當(dāng)前的虛擬內(nèi)該結(jié)構(gòu)體用來表示系統(tǒng)當(dāng)前的虛擬內(nèi)存和物理內(nèi)存的狀態(tài)信息。函數(shù)存和物理內(nèi)存的狀態(tài)信息。函數(shù)GlobalMemoryStatusGlobalMemoryStatus從該結(jié)構(gòu)從該結(jié)構(gòu)體中獲取數(shù)據(jù)。體中獲取數(shù)據(jù)。Syntax:typedefstruct_MEMORYSTATUSDWORDdwLength;DWORDdwMemoryLoad;/物理內(nèi)存使用負(fù)荷(百分?jǐn)?shù)表示,當(dāng)前物理內(nèi)存已被占用多少)SIZE_TdwTotalPhys;/物理內(nèi)存總數(shù)SIZE_TdwAvailPhys;/可用物理內(nèi)存數(shù)SIZE_TdwTotalPageFile;

53、/頁面文件總數(shù)SIZE_TdwAvailPageFile;/可用頁面文件數(shù)SIZE_TdwTotalVirtual;/虛存空間總數(shù):2GSIZE_TdwAvailVirtual;/可用虛存空間數(shù)MEMORYSTATUS,*LPMEMORYSTATUS;三、相關(guān)知識介紹三、相關(guān)知識介紹MEMORYSTATUS StructureMEMORYSTATUS Structure該函數(shù)詳細(xì)用法可以參考下面該函數(shù)詳細(xì)用法可以參考下面MSDNMSDN在線幫助:在線幫助:http:/ Structure MEMORY_BASIC_INFORMATION Structure 該結(jié)構(gòu)體表示進(jìn)程在某該結(jié)構(gòu)體表示進(jìn)程

54、在某一個具體的虛擬地址空間的頁面狀態(tài)信息。一個具體的虛擬地址空間的頁面狀態(tài)信息。typedefstruct_MEMORY_BASIC_INFORMATIONPVOIDBaseAddress;PVOIDAllocationBase;DWORDAllocationProtect;SIZE_TRegionSize;DWORDState;/頁面狀態(tài)DWORDProtect;/頁面保護(hù)屬性DWORDType;MEMORY_BASIC_INFORMATION,*PMEMORY_BASIC_INFORMATION;MSDNMSDN在線幫助:在線幫助: http:/ http:/ (1) _(1) _begi

55、nthreadexbeginthreadex函數(shù):創(chuàng)建新線程(在本實(shí)驗(yàn)中,創(chuàng)建了函數(shù):創(chuàng)建新線程(在本實(shí)驗(yàn)中,創(chuàng)建了2 2個線程:個線程:simulatorsimulator模擬線程和模擬線程和inspectorinspector監(jiān)控線程)監(jiān)控線程)(2) Sleep(2) Sleep函數(shù):使當(dāng)前線程休眠函數(shù):使當(dāng)前線程休眠(3) (3) VirtualAllocVirtualAlloc函數(shù)函數(shù):保留或提交某一范圍的虛擬地址:保留或提交某一范圍的虛擬地址(4) (4) VirtualFreeVirtualFree函數(shù):解除已被提交的虛存,或釋放被保留函數(shù):解除已被提交的虛存,或釋放被保留/ /

56、提交的進(jìn)程虛擬地址空間提交的進(jìn)程虛擬地址空間(5) (5) VirtualProtectVirtualProtect函數(shù):改變虛擬內(nèi)存頁的保護(hù)方式函數(shù):改變虛擬內(nèi)存頁的保護(hù)方式(6) (6) VirtualLockVirtualLock和和VirtualUnlockVirtualUnlock函數(shù):鎖定或解鎖虛擬內(nèi)存函數(shù):鎖定或解鎖虛擬內(nèi)存頁頁 (7) (7) VirtualQueryVirtualQuery函數(shù):查詢進(jìn)程的虛擬內(nèi)存函數(shù):查詢進(jìn)程的虛擬內(nèi)存 (8) (8) GlobalMemoryStatusGlobalMemoryStatus函數(shù):獲取程序存儲空間的使用狀況函數(shù):獲取程序存儲空間的使用狀況以及系統(tǒng)的使用情況信息

溫馨提示

  • 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

提交評論