![物理存儲器與進程邏輯地址空間的管理實驗報告_第1頁](http://file3.renrendoc.com/fileroot_temp3/2022-6/3/315473b2-86dc-4892-a4f9-f20a82ee69ba/315473b2-86dc-4892-a4f9-f20a82ee69ba1.gif)
![物理存儲器與進程邏輯地址空間的管理實驗報告_第2頁](http://file3.renrendoc.com/fileroot_temp3/2022-6/3/315473b2-86dc-4892-a4f9-f20a82ee69ba/315473b2-86dc-4892-a4f9-f20a82ee69ba2.gif)
![物理存儲器與進程邏輯地址空間的管理實驗報告_第3頁](http://file3.renrendoc.com/fileroot_temp3/2022-6/3/315473b2-86dc-4892-a4f9-f20a82ee69ba/315473b2-86dc-4892-a4f9-f20a82ee69ba3.gif)
![物理存儲器與進程邏輯地址空間的管理實驗報告_第4頁](http://file3.renrendoc.com/fileroot_temp3/2022-6/3/315473b2-86dc-4892-a4f9-f20a82ee69ba/315473b2-86dc-4892-a4f9-f20a82ee69ba4.gif)
![物理存儲器與進程邏輯地址空間的管理實驗報告_第5頁](http://file3.renrendoc.com/fileroot_temp3/2022-6/3/315473b2-86dc-4892-a4f9-f20a82ee69ba/315473b2-86dc-4892-a4f9-f20a82ee69ba5.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、操作系統(tǒng)實 驗 報 告課程名稱操作系統(tǒng)實驗課程編號0906553實驗項目名稱物理存儲器與進程邏輯地址空間的管理學號年級姓名專業(yè)計算機科學與技術(shù)學生所在學院計算機科學與技術(shù)學院指導教師實驗室名稱地點 哈爾濱工程大學計算機科學與技術(shù)學院物理存儲器與進程邏輯地址空間的管理一 實驗概述:1.實驗名稱:物理存儲器與進程邏輯地址空間的管理2.實驗目的:1)通過查看物理存儲器的使用情況,并練習分配和回收物理內(nèi)存,從而掌握物理存儲器的管理方法;2)通過查看進程邏輯地址空間的使用情況,并練習分配和回收虛擬內(nèi)存,從而掌握進程邏輯地址空間的 管理方法。 3.實驗類型:驗證、設(shè)計4.實驗內(nèi)容: 1)準備實驗,創(chuàng)建一個
2、EOS Kernel項目; 2)閱讀控制臺命令“pm”相關(guān)的源代碼,并查看其執(zhí)行的結(jié)果; 3)分配物理頁和釋放物理頁; 4)閱讀控制臺命令“vm”相關(guān)的源代碼,并查看執(zhí)行的結(jié)果; 5)在系統(tǒng)進程中分配虛擬頁和釋放虛擬頁; 6)在應用程序進程中分配虛擬頁和釋放虛擬頁。二實驗環(huán)境操作系統(tǒng):windows XP編譯器:Tevalaton OS Lab語言:C三實驗過程1.設(shè)計思路和流程圖:MiAllocateAny函數(shù)流程圖:MiFreePages函數(shù)流程圖:2.實驗過程:1)新建一個 EOS Kernel 項目;2)閱讀 ke/sysproc.c 文件中的 ConsoleCmdPhysicalMe
3、mory 函數(shù),學習“pm”命令是如何統(tǒng)計并輸出物理存儲器信息的。在閱讀的過程中應注意:在統(tǒng)計輸出物理存儲器信息之前要關(guān)閉中斷,之后要打開中斷,這樣可以防止在命令執(zhí)行的過程 中有其它線程分配或者釋放物理頁;全局變量 MiTotalPageFrameCount 保存了物理頁的總數(shù)。每個物理頁的大小是 4KB,由宏 PAGE_SIZE 定義;全局變量 MiZeroedPageCount 和 MiFreePageCount 分別保存了零頁和空閑頁的數(shù)量;計算已用物理頁數(shù)量的方法是:物理頁總數(shù)減去零頁數(shù)量,再減去空閑頁數(shù)量。3)生成所創(chuàng)建的項目,啟動調(diào)試,待EOS啟動完畢,在EOS控制臺中輸入命令“p
4、m”后回車,觀察命令執(zhí)行的結(jié)果。4)將修改后的ConsoleCmdPhysicalMemory 函數(shù)進行替換,主要是在原有代碼的后面添加了分配物理頁和釋放物理頁的代碼,生成修改后的EOS Kernel項目,啟動調(diào)試,待 EOS 啟動完畢,在 EOS 控制臺中輸入命令“pm”后按回車;5)結(jié)束調(diào)試,在調(diào)用 MiAllocateAnyPages 函數(shù)的代碼行添加一個斷點,在調(diào)用 MiFreePages 函數(shù)的代碼行添加一個斷點;6)啟動調(diào)試,待 EOS 啟動完畢,在 EOS 控制臺中輸入命令“pm”后按回車,pm 命令開始執(zhí)行后,會在調(diào)用 MiAllocateAnyPages 函數(shù)的代碼行處中斷,
5、按 F11(逐語句)調(diào)試進入 MiAllocateAnyPages 函數(shù);按 F10(逐過程)單步調(diào)試 MiAllocateAnyPages 函數(shù)的執(zhí)行過程:7)繼續(xù)執(zhí)行,會在調(diào)用 MiFreePages 函數(shù)的代碼行處中斷,按F11(逐語句)調(diào)試進入 MiFreePages 函數(shù);按 F10(逐過程)單步調(diào)試 MiFreePages 函數(shù)的執(zhí)行過程: 8)閱讀控制臺命令“vm”相關(guān)的代碼,并查看執(zhí)行結(jié)果。 閱讀 ke/sysproc.c 文件中的 ConsoleCmdVM 函數(shù),學習“vm”命令是如何統(tǒng)計并輸出進程的 虛擬地址描述符信息的,注意一下幾點: 與“pm” ”命令輸出的是整個系統(tǒng)的
6、物理存儲器的使用情況不同,“vm”命令輸出的是某個進程的 虛擬地址描述符信息,所以“vm”命令使用了一個參數(shù)進程 ID,用來指定一個進程。這個進 程既可以是系統(tǒng)進程,也可以是用戶進程; 在統(tǒng)計輸出指定進程的虛擬地址描述符信息之前要關(guān)閉中斷,之后要打開中斷,這樣可以防止在命令執(zhí)行的過程中有其它線程分配或者釋放虛擬頁; EOS 操作系統(tǒng)的進程有 4G 的虛擬地址空間,但并不是所有的虛擬地址空間都使用虛擬地址描述符 來管理,有一些地址空間是靜態(tài)的,還有一些地址空間由其他的動態(tài)方式來管理(例如系統(tǒng)內(nèi)存 池); 進程 4G 虛擬地址空間中由虛擬地址描述符所管理空間的低地址和高地址是固定的,在這段地址空間
7、中,如果有虛擬頁被占用,就會使用虛擬地址描述符來標識,并放入鏈表中管理;9)啟動調(diào)試,待 EOS 啟動完畢,在 EOS 控制臺中輸入命令“pt”后按回車。“pt”命令可以輸出當前系統(tǒng)中的 進程列表,其中系統(tǒng)進程的 ID 為 1;在 EOS 控制臺中輸入命令“vm 1”后按回車,觀察命令執(zhí)行的結(jié)果:系統(tǒng)進程中由虛擬地址描述符所管理的虛擬頁只會分配給進程的句柄表(句柄表占用一個虛擬頁)和 線程的堆棧(堆棧占用兩個虛擬頁)。結(jié)合之前“pt”命令輸出的進程和線程信息可知,當前系統(tǒng)中只有 1 個系統(tǒng)進程以及 10 個系統(tǒng)線程,所以在上圖中,1 號描述符所包含的一個虛擬頁即為系統(tǒng)進程的句柄表,而2到11號
8、這10個描述符所分別包含的兩個虛擬頁即為 10 個系統(tǒng)線程的堆棧。10)將LoopApp.exe文件添加到軟盤鏡像的根目錄中,并保存,啟動調(diào)試,待 EOS 啟動完畢,在 EOS 控制臺中輸入命令“A:LoopApp.exe”后按回車。此時就使用 EOS 應用 程序文件 LoopApp.exe 創(chuàng)建了一個應用程序進程,由于此進程執(zhí)行了一個死循環(huán),所以此進程不 會結(jié)束執(zhí)行,除非關(guān)閉虛擬機;11)切換到“Console-2”,然后輸入命令“pt”后按回車。輸出的信息如圖所示。其中 ID 為 31 的進程就是應用程序進程,ID 為 33 的線程就是應用程序進程的主線程;12)輸入命令“vm 1”后按回
9、車,可以查看系統(tǒng)進程中虛擬地址描述符的信息。輸出的信息如圖所示。與第9步圖比較可知,3 號描述符所包含的一個虛擬頁即為應用程序進程的句柄表,13號描述符所包含的兩個虛擬頁即為應用程序進程主線程的堆棧;13)輸入命令“vm 31”后按回車,可以查看應用程序進程中虛擬地址描述符的信息;在進程的 4G 邏輯地址空間中,應用程序進程可以自行管理低 2G 的用戶空間。從圖 15-6 中的信息可以得知,低 2G 的用戶空間又被分為了三部分: 0x00000000-0x0000FFFF 由 16 個虛擬頁構(gòu)成的 64KB 靜態(tài)空間,用于捕捉對空指針的非法訪問; 0x00010000-0x7FFEFFFF 由
10、虛擬地址描述符管理的動態(tài)空間,用于存儲應用程序進程的代碼和數(shù) 據(jù)。上圖顯示應用程序進程的代碼和數(shù)據(jù)占用了此空間中的 5 個虛擬頁,并且是用從應用程 序的基址 0x00400000 起始的; 0x7FFF0000-0x7FFFFFFF 由 16 個虛擬頁構(gòu)成的 64KB 靜態(tài)空間,用于捕捉對空指針的非法訪問。14)在系統(tǒng)進程中分配虛擬頁和釋放虛擬頁,使用修改后的ConsoleCmdVM 函數(shù)的函數(shù)體替換 ke/sysproc.c 文件中 ConsoleCmdVM 函數(shù)的函數(shù)體,生成修改后的EOS Kernel項目,啟動調(diào)試,待 EOS 啟動完畢,在 EOS 控制臺中輸入命令“vm 1”后按回車;
11、15)在 ke/sysproc.c 文件的ConsoleCmdVM 函數(shù)中,在調(diào)用MmAllocateVirtualMemory 函數(shù)的代碼行添加一個斷點,在調(diào)用 MmFreeVirtualMemory 函數(shù)的代碼行添加一 個斷點;16)啟動調(diào)試,待 EOS 啟動完畢,在 EOS 控制臺中輸入命令“vm 1”后按回車,vm 命令開始執(zhí)行后,會在調(diào)用 MmAllocateVirtualMemory 函數(shù)的代碼行處中斷。此時要注意參數(shù) BaseAddress 和 RegionSize 初始化的值。按 F11(逐過程)調(diào)試進入 MmAllocateVirtualMemory 函數(shù);17)按 F10(
12、逐過程)單步調(diào)試 MmAllocateVirtualMemory 函數(shù)的執(zhí)行過程,繼續(xù)執(zhí)行,會在調(diào)用 MmFreeVirtualMemory 函數(shù)的代碼行處中斷。此時要注意參數(shù) BaseAddress 和 RegionSize 初始化的值。按 F11 調(diào)試進入 MmFreeVirtualMemory 函數(shù);18)嘗試在調(diào)用 MmAllocateVirtualMemory 函數(shù)時將 RegionSize 參數(shù)的值設(shè)置為 PAGE_SIZE+1 或者 PAGE_SIZE*2+1。觀察“輸出”窗口中轉(zhuǎn)儲的信息,并說明申請?zhí)摂M內(nèi)存的大小與實際分配的大 小之間的關(guān)系,以及分配的虛擬內(nèi)存大小會對分配的虛擬
13、地址產(chǎn)生什么樣的影響。將“輸出”窗 口中轉(zhuǎn)儲的信息保存在文本文件中;19)嘗試在調(diào)用 MmAllocateVirtualMemory 函數(shù)時將 BaseAddress 參數(shù)的值設(shè)置為已經(jīng)被占用的虛擬 內(nèi)存,例如 0xA0000000,觀察“輸出”窗口中轉(zhuǎn)儲的信息。將“輸出”窗口中轉(zhuǎn)儲的信息保存在 文本文件中;20)嘗試在調(diào)用 MmAllocateVirtualMemory 函數(shù)時將 RegionSize 參數(shù)的值設(shè)置為 PAGE_SIZE*2,將 BaseAddress 參數(shù)的值設(shè)置為 0xA0017004,觀察“輸出”窗口中轉(zhuǎn)儲的信息,并說明申請?zhí)摂M內(nèi) 存的大小與實際分配的大小之間的關(guān)系,以
14、及申請的虛擬地址會對分配的虛擬內(nèi)存大小產(chǎn)生什么 樣的影響。將“輸出”窗口中轉(zhuǎn)儲的信息保存在文本文件中;21)創(chuàng)建一個EOS應用程序,調(diào)用API函數(shù)VirtualAlloc,分配一個整型變量所需的空間,并使用一個整型變量的指針指向這個空間。修改整型變量的值為 0xFFFFFFFF。在修改前輸出整型變量的值,在修改后再輸出整型變量的值。調(diào)用 API 函數(shù) Sleep,等待 10 秒鐘,調(diào)用 API 函數(shù) VirtualFree,釋放之前分配的整型變量的空間,進入死循環(huán),這樣應用程序就不會結(jié)束。#include “EOSApp.h”int main(int argc,char* argv)/啟動調(diào)試
15、EOS應用程序前要特別注意下面的問題:/ 1、如果要在調(diào)試應用程序時能夠調(diào)試進入內(nèi)核顯示對應的源碼,必須使用EOS核心項目編譯生成完全版本的SDK 文件夾,然后使用此文件夾覆蓋應用程序項目中的SDK 文件夾,并且EOS核心項目在磁盤上的位置不能改變。 2、在啟動調(diào)試應用程序之前必須首先刪除禁用所有的斷點,在斷點中斷(int 3) 被命中后才能重新添加啟用斷點,否則啟動調(diào)試會失敗。 #ifdef_DEBUG_asm(“int$3n nop”); #endif INT* p;/調(diào)用API函數(shù)VirtualAlloc,分配一個整型變量所需的空間,并使用一個整型變量的指針指向這個空間 If(p=Vir
16、tualAlloc(0,sizeof(int),MEM_RESERVE|MEM_COMMIT) printf(“Allocated %d bytes virtual memory of 0x%xnn”,sizeof(int),d); /輸出原始整型變量的值 printf("virtual memory original value:0x%xnn",p); /修改整型變量的值為0xFFFFFFFF *p=0xFFFFFFFF; /輸出修改后的整型變量的值 printf("virtual memory new value:0x%xnn",*p); print
17、f("nWait for 10 secondsn"); / 調(diào)用API函數(shù)Sleep,等待10秒鐘 Sleep(10000); / 調(diào)用API函數(shù)VirtualFree,釋放之前分配的整型變量的空間 if(VirtualFree(p,0,MEM_RELEASE) printf("nRealease virtual memory success!n"); else /若釋放不成功,打印輸出錯誤,并返回-1。 printf("VirtualFree Error!n"); return -1; return 0;22)代碼修改完畢后,生成E
18、OS應用程序項目,啟動調(diào)試,輸出結(jié)果如圖所示。在應用程序分配虛擬頁后,利用10秒后才釋放虛擬頁的間隙,可以在控制臺2中執(zhí)行命令“vm 31”, 查看此時應用程序進程的虛擬地址描述符信息,在應用程序釋放虛擬頁后,可以在控制臺 2 中再 次執(zhí)行命令“vm 31”,查看此時應用程序進程的虛擬地址描述符信息。提示:API 函數(shù) VirtualAlloc 定義在 api/eosapi.c 文件,此 API 函數(shù)主要調(diào)用了 EOS 內(nèi)核函 數(shù) MmAllocateVirtualMemory,在 EOS 應用程序中調(diào)用函數(shù) VirtualAlloc 時,除了使用 MEM_RESERVE 標志外,還必須使用 MEM_COMMIT 標志;API 函數(shù) VirtualFree 定義在 api/eosapi.c 文件,此 API 函數(shù)主要調(diào)用了 EOS 內(nèi)核函 數(shù) MmFreeVirtualMemory,在 EOS 應用程序中調(diào)用函數(shù) VirtualFree 時,要使用 MEM_RELEASE 標志。3. 主要數(shù)據(jù)結(jié)構(gòu)、實現(xiàn)代碼及其說明 typedef struct _MMPFN ULONG Unused : 9; / 未用 ULONG PageState : 3; / 物理頁的狀態(tài) ULONG Next : 20; / 下一個物理頁的頁框號 MMPFN, *PMMPFN; typedef enum
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年重慶貨運從業(yè)資格證模擬試題答案大全及答案
- 2025年貴州貨運從業(yè)資格證500道題目答案
- 2025年池州道路貨運駕駛員從業(yè)資格證考試
- 2025年巴彥淖爾貨運從業(yè)資格證考試模擬考試
- 病人護理服務合同(2篇)
- 北京課改版歷史七年級下冊第2課《貞觀之治》聽課評課記錄
- 2024-2025學年八年級數(shù)學上冊第十三章軸對稱13.1軸對稱教案新版新人教版
- 2024-2025學年高中數(shù)學課時分層作業(yè)13向量的概念含解析新人教B版必修4
- 2024-2025學年七年級數(shù)學上冊第1章有理數(shù)1.5有理數(shù)的乘法和除法作業(yè)設(shè)計新版湘教版
- 英語七年級聽評課記錄
- 西門子starter軟件簡易使用手冊
- 暢捷通g6財務管理系統(tǒng)專業(yè)版使用手冊
- 化工儀表及自動化ppt課件匯總?cè)譸pt完整版課件最全教學教程整套課件全書電子教案全套電子講義
- 2022注冊電氣工程師專業(yè)考試規(guī)范清單匯總
- 桂花-作文ppt-PPT課件(共14張)
- 高一數(shù)學概率部分知識點總結(jié)及典型例題解析 新課標 人教版 必修
- 鐵路運費計算方法
- 《小腦梗死護理查房》
- 免疫及炎癥相關(guān)信號通路
- 某風電場設(shè)備材料設(shè)備清單
- —橋梁專業(yè)施工圖設(shè)計審查要(終)
評論
0/150
提交評論