




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第12章內存管理實驗第一頁,共34頁。第12章:內存管理實驗第二頁,共34頁。提綱第三頁,共34頁。提綱第四頁,共34頁。實驗目的了解WindowsXP/7及Linux內存管理機制。掌握頁面虛擬存儲技術。了解內存分配原理,特別是以頁面為單位的虛擬內存分配方法。學會使用WindowsXP/7下內存管理的基本API函數。了解進程中內存分配與虛內存的區別;第五頁,共34頁。提綱第六頁,共34頁。實驗內容運行vs,創建工程,并導入virtumem.cpp文件。再次編譯,通過后直接在vs下運行,觀察輸出結果,確信六種虛存操作都出現過。看懂程序,要求另寫一段小程序,獲得當前系統的存儲空間使用概況。編譯、運行小程序,觀察結果。打開memoryAlloc.cpp運行vs,直接編譯memoryAlloc.cpp,創建了一個工程。編譯、運行小程序,觀察結果。第七頁,共34頁。實驗內容小組任務根據實驗課提供的Windows虛擬內存管理代碼以及相關Linux內存管理知識在Linux系統下完成同樣功能的程序。第八頁,共34頁。提綱第九頁,共34頁。實驗算法堆和棧的區別?
棧(stack)
堆(heap)
區別申請方式系統自動分配需要程序員向操作系統申請,并指明大小,在C語言中使用malloc函數來分配分配條件操作若棧的剩余空間大于申請空間,則系統為程序分配內存;否則提示棧溢出遍歷鏈表(操作系統中用于記錄空閑內存地址的鏈表),找到第一個空間大于申請空間的堆結點,將該結點從鏈表中刪除,并將該節點對應的存儲空間分配給程序。申請大小限制在Windows下,棧是向低地址擴展的數據結構,是一塊連續的內存區域,即棧頂的地址和棧的最大容量是系統預先規定好的;在Windows下,棧的大小是由編譯器決定,通常為1M,如果申請的空間超過棧的剩余空間時,將提示overflow。因此,能從棧獲得的空間較小。堆是向高地址擴展的數據結構,系統通過鏈表結構來組織,因此是不連續的內存區域。遍歷方向是由低地址向高地址。堆的大小受限于計算機系統中有效的虛擬內存。由此可見,堆獲得的空間比較靈活,容量也比較大。
申請效率系統自動分配,速度較快,程序員無法控制。由new分配內存,使用方便,但是速度較慢,且容易產生內存碎片第十頁,共34頁。實驗算法Windows系統存儲器管理相關知識頁面文件以磁盤文件的形式來存儲沒有裝入內存的程序和數據文件部分,文件名為page,默認安裝在系統盤的根目錄下,屬性為系統隱藏文件。通過系統設置可以使頁面文件位于非系統盤的根目錄下。虛擬內存頁面文件和物理內存共同構成“虛擬內存”,必要情況下,Windows操作系統可將數據從頁面文件移至內存,或將數據從內存移至頁面文件,以便為新數據釋放內存空間。第十一頁,共34頁。實驗算法Windows系統存儲器管理相關知識Windows的虛擬存儲技術Windows采用分頁存儲方式,實現虛擬內存技術,利用頁面文件在內存中的調入調出實現物理內存的擴展。虛擬內存的頁面狀態A.提交頁面:已經分得物理存儲的虛擬地址頁面,通過設定該區域的屬性可對它加以保護。B.保留頁面:邏輯頁面已分配,但尚未分配物理存儲頁面,即為某些進程保留的一部分虛擬地址。C.空閑頁面:可以保留或提交的可用頁面,對當前的進程是不可存取的。第十二頁,共34頁。實驗算法Windows系統存儲器管理相關知識頁面操作A.保留:保留進程的虛擬地址空間,而不分配物理存儲空間。B.釋放:全部釋放物理存儲和虛擬地址空間。C.提交:為進程的虛擬地址分配物理存儲空間,可以對處于空閑、保留、提交狀態的頁面進行提交操作。D.回收:釋放物理內存空間,保留虛擬地址空間。E.加鎖:對已提交的頁面進行加鎖,使得頁面常駐內存而不會產生缺頁現象。F.解鎖:對已加鎖的頁面進行解鎖操作。第十三頁,共34頁。實驗算法Windows內存管理Windows內存管理程序采用VS編譯器編譯。程序最初執行時交沒有給地址指針BASE_PTR賦初值,所以在前幾次隨機的虛存模擬活動中可能導致動作失敗,但這不影響程序功能的實現。第十四頁,共34頁。實驗算法Windows系統API函數(1)GlobalMemoryStatus:獲取存儲系統的概況及程序存儲空間的使用狀況。voidGlobalMemoryStatus(LPMEMORYSTATUSlpBuffer)GlobalMemoryStatus是本實驗重要的API函數,該函數無返回值,參數是一個指向名為MEMORYSTATUS的結構的指針。函數的返回信息會被存儲在MEMORYSTATUS結構中。第十五頁,共34頁。實驗算法Windows系統API函數(2)VirtualQuery:查詢一個進程的虛擬內存。DWORDVirtualQuery(LPCVOIDlpAddress,//指向查詢頁區域基地址的指針PMEMORY_BASIC_INFORMATIONlpBuffer,//查詢信息返回到該緩沖區中SIZE_TdwLength//lpBuffer指向緩沖區的大小);第十六頁,共34頁。實驗算法Windows系統API函數(3)_beginthreadex:創建新線程執行指定的可執行模塊。第十七頁,共34頁。實驗算法Windows系統API函數(4)VirtualAlloc:保留或提交某一范圍的虛擬地址LPVOIDVirtualAlloc(LPVOIDlpAddress,//分配內存區域的地址SIZE_TdwSize,//要分配或者保留的區域的大小DWORDflAllocationType,//分配類型,頁面狀態(類型):MEM_COMMIT或MEM_RESERVEDWORDflProtect //頁面屬性,指定了被分配區域的訪問保護方式);返回值:如果調用成功,返回分配的首地址;否則,返回NULL。可通過GetLastError函數來獲取錯誤消息第十八頁,共34頁。實驗算法Windows系統API函數(5)VirtualFree:解除已被提交的或者釋放被保留(或提交)的進程虛擬地址空間。BOOLVirtualFree(LPVOIDlpAddress,//要釋放的頁面區域的地址SIZE_TdwSize,//區域大小DWORDdwFreeType//類型);其中dwFreeTye參數的內容如下:MEM_DECOMMIT:取消VirtualAlloc提交的頁;MEM_RELEASE:釋放指定頁,如果制定了這個類型而dwSize設置為0,否則函數會調用失敗。返回值:如果調用成功,返回一個非0值;否則,返回0第十九頁,共34頁。實驗算法Windows系統API函數(6)VirtualProtect:改變虛擬內存頁的保護方式(所操作的區塊必須是由同一次分配動作保留或提交的區塊)BOOLVirtualProtect(LPVOIDlpAddress,//目標地址起始位置SIZE_TdwSize,//要變更的記憶體分頁區域的大小DWORDflNewProtect, //請求的保護方式PDWORDlpflOldProtect//輸出參數,指向保護原保護屬性值的DWORD變量,可以為NULL);返回值:返回BOOL值,表示是否成功,可以使用GetLastError函數獲取錯誤代碼。第二十頁,共34頁。實驗算法Windows系統API函數(7)VirtualLock:對虛擬內存頁加鎖以保證對它們的使用不會出現缺頁現象。VirtualLock(LPVOIDlpAddress,SIZE_TdwSize);VirtualUnlock:對加鎖的虛擬內存頁解鎖。VirtualUnlock(LPVOIDlpAddress,SIZE_TdwSize);第二十一頁,共34頁。實驗算法相關數據結構1)相關數據結構:Actnum:指示器,通過它實現兩個線程的同步和信息傳遞。初始化為0,模擬線程將0值改變為一個1~6的隨機數,監視線程恢復它的初值0.BASE_PTR:地址指針,記錄虛存分配操作時返回的虛存起始地址,程序初始執行時并沒有賦初值,所以在開始幾次隨機的虛存模擬活動中可能導致動作失敗。2)存儲系統的統計指標:A系統虛擬和物理內存的指標第二十二頁,共34頁。實驗算法相關數據結構3)內存狀態:typedefstruct_MEMORYSTATUS{//mst
DWORDdwLength;
//sizeof(MEMORYSTATUS)
DWORDdwMemoryLoad;
//percentofmemoryinuse
DWORDdwTotalPhys;
//bytesofphysicalmemory
DWORDdwAvailPhys;
//freephysicalmemorybytes
DWORDdwTotalPageFile;//bytesofpagingfile
DWORDdwAvailPageFile;//freebytesofpagingfile
DWORDdwTotalVirtual;//userbytesofaddressspace
DWORDdwAvailVirtual;//freeuserbytes
}MEMORYSTATUS,*LPMEMORYSTATUS;第二十三頁,共34頁。實驗算法相關數據結構內存基本信息_MEM_MEMORY_BASIC_INFORMATION{PVOIDBaseAddress; PVOIDAllocationBase; DWORDAllocationProtect; //頁面屬性SIZE_TRegionSize; DWORDState; //頁面狀態DWORDProtect;//取值可能與AllocationProtect相同DWORDType; //內存塊類型}MEMORY_BASIC_INFORMATION,*PMEMORY_BASIC_INFORMATION;第二十四頁,共34頁。實驗算法相關數據結構頁面狀態state:提交狀態:MEM_COMMIT釋放狀態:MEM_FREE保留狀態:MEM_RESERVE內存塊類型的變量type:鏡像:MEM_IMAGE映射:MEM_MAPPED私有:MEM_PRIVATE第二十五頁,共34頁。實驗算法相關數據結構頁面屬性變量AllocationProtect六種取值:只讀:PAGE_READONLY只讀寫:PAGE_READWRITE可執行:PAGE_EXECUTE可執行和讀取:PAGE_EXECUTE_READ可執行讀寫:PAGE_EXECUTE_READWRITE不允許存儲:PAGE_NOACCESS第二十六頁,共34頁。實驗算法Linux虛擬內存管理圖2-6-1虛擬內存的實現機制第二十七頁,共34頁。實驗算法Linux虛擬內存管理請求分頁:首先內存管理程序通過映射機制把用戶程序的邏輯地址映射到物理地址,在用戶程序運行時,如果發現程序中要用的虛擬地址沒有對應的物理地址,
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年全員安全培訓考試試題附下載答案
- 2025年管理人員安全培訓考試試題答案全面
- 2025新入職員工安全培訓考試試題附參考答案(奪分金卷)
- 2025項目內部承包合同模板
- 【部編版】四年級語文下冊《習作例文》精美課件
- 2025年律師事務所律師聘用勞動合同范本
- 2025健身教練股權激勵合同范本
- 2025教育培訓機構師資培訓勞動合同模板
- 2025企業間的貸款協議范本:借款合同示例
- 2025電纜施工合同范本
- (二模)2025年深圳市高三年級第二次調研考試歷史試卷(含標準答案)
- 廣西《疼痛綜合評估規范》(材料)
- 2025年山東省淄博市張店區中考一模歷史試題(含答案)
- 美容師考試與法律法規相關知識及試題答案
- 推動研究生教育高質量發展方案
- 2025-2030中國藥用活性炭行業市場現狀供需分析及投資評估規劃分析研究報告
- 2025-2031年中國竹鼠養殖及深加工行業投資研究分析及發展前景預測報告
- 超星爾雅學習通《國際經濟學(中國人民大學)》2025章節測試附答案
- 第13課 遼宋夏金元時期的對外交流 教案2024-2025學年七年級歷史下冊新課標
- 陜西省2024年高中學業水平合格考化學試卷試題(含答案解析)
- 輸液泵/微量注射泵使用技術操作考核評分標準
評論
0/150
提交評論