版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、操作系統(tǒng)實 驗 報 告課程名稱操作系統(tǒng)實驗課程編號0906553實驗項目名稱物理存儲器與進(jìn)程邏輯地址空間的管理學(xué)號年級姓名專業(yè)學(xué)生所在學(xué)院指導(dǎo)教師實驗室名稱地點 哈爾濱工程大學(xué)計算機(jī)科學(xué)與技術(shù)學(xué)院實驗七 物理存儲器與進(jìn)程邏輯地址空間的管理 一、實驗概述1. 實驗名稱物理存儲器與進(jìn)程邏輯地址空間的管理2. 實驗?zāi)康膌 通過查看物理存儲器的使用情況,并練習(xí)分配和回收物理內(nèi)存,從而掌握物理存儲器的管理方法。 l 通過查看進(jìn)程邏輯地址空間的使用情況,并練習(xí)分配和回收虛擬內(nèi)存,從而掌握進(jìn)程邏輯地址空間的管理方法。 3. 實驗類型驗證、設(shè)計4. 實驗內(nèi)容4.1 準(zhǔn)備實驗4.2 閱讀控制臺命令“pm”相關(guān)的
2、源代碼,并查看其執(zhí)行的結(jié)果4.3 分配物理頁和釋放物理頁4.4閱讀控制臺命令“vm”相關(guān)的源代碼,并查看其執(zhí)行的結(jié)果4.5 在系統(tǒng)進(jìn)程中分配虛擬頁和釋放虛擬頁4.6 在應(yīng)用程序進(jìn)程中分配虛擬頁和釋放虛擬頁 4.6.1 要求 4.6.2 測試方法二、實驗環(huán)境OS Lab實驗環(huán)境,EOS操作系統(tǒng)三、實驗過程1. 設(shè)計思路和流程圖MiAllocateAnyPages函數(shù)的流程圖MiFreePages函數(shù)的流程圖2. 需要解決的問題及解答(1)在本實驗3.3 中,如果分配了物理頁后,沒有回收,會對 EOS 操作系統(tǒng)造成什么樣的影響?目前EOS操作系統(tǒng)內(nèi)核函數(shù)Mi
3、AllocateAnyPages 能處理所有物理頁被分配完畢的情況嗎?例如在沒有可分配的物理頁的情況下調(diào)用該內(nèi)核函數(shù),是否會返回失?。咳绻麅?nèi)核函數(shù)MiAllocateAnyPages 還不能處理這種極端情況,嘗試修改代碼解決這個問題。答:如果分配了物理頁后,沒有回收,將會使可分配自由頁和零頁越來越少,最終導(dǎo)致內(nèi)存溢出,系統(tǒng)無法運行。目前 EOS操作系統(tǒng)內(nèi)核函數(shù) MiAllocateAnyPages 不能處理所有物理頁被分配完畢的情況,在沒有可分配的物理頁的情況下,不會分配物理頁,但仍然會返回成功,添加以下代碼即可:Else retu
4、rn STATUS_MEMORY_NOT_ALLOCATED; (2)在本實驗 3.3 中,在分配物理頁時是調(diào)用的內(nèi)核函數(shù) MiAllocateAnyPages,該函數(shù)會優(yōu)先分配空閑頁,嘗試修改代碼,調(diào)用內(nèi)核函數(shù)MiAllocateZeroedPages優(yōu)先分配零頁,并調(diào)試分配零頁的情況。嘗試從性能的角度分析內(nèi)核函數(shù)MiAllocateAnyPages 和MiAllocateZeroedPages。嘗試從安全性的角度分析分配零頁的必要性。答:將MiAllocateAnyPages(1, PfnArray);修改為MiAll
5、ocateZeroedPages(1, PfnArray);即可。系統(tǒng)啟動時,所有空閑物理頁都是未初始化的,此時零頁鏈表為空,MiAllocateAnyPages函數(shù)可以直接從自由頁鏈表分配,而MiAllocateZeroedPages函數(shù)會對從自由頁鏈表中分配的每一頁進(jìn)行零初始化,確保所有分配頁都是被零初始化的,再進(jìn)行分配,因此MiAllocateZeroedPages函數(shù)效率較低。但因為MiAllocateZeroedPages函數(shù)對自由頁進(jìn)行了初始化,減小了出錯的可能性,從而安全性較高。(3)按F10單步調(diào)試MiAllocateAnyPages函數(shù)的執(zhí)行過程,嘗試回答下面的問題
6、:本次分配的物理頁的數(shù)量是多少?分配的物理頁的頁框號是多少?物理頁是從空閑頁鏈表中分配的?還是從零頁鏈表中分配的?哪一行語句減少了空閑頁的數(shù)量?哪一行語句將剛剛分配的物理頁由空閑狀態(tài)修改為忙狀態(tài)?繪制MiAllocateAnyPages函數(shù)的流程圖。答:本次分配的物理頁的數(shù)量是1,分配的物理頁的頁框號是0x409;物理頁是從空閑頁鏈表中分配的;第226行MiFreePageListHead = MiGetPfnDatabaseEntry(Pfn)->Next;和第227行MiFreePageCount-;減少了空閑頁的數(shù)量,第229行將剛剛分配的物理頁由空閑狀態(tài)修改為
7、忙狀態(tài);見實驗過程開頭流程圖部分。(4) 按 F10單步調(diào)試MiFreePages函數(shù)的執(zhí)行過程,嘗試回答下面的問題: 本次釋放的物理頁的數(shù)量是多少?釋放的物理頁的頁框號是多少?釋放的物理頁是之前分配的物理頁嗎? 釋放的物理頁是被放入了空閑頁鏈表中?還是零頁鏈表中? 繪制MiFreePages函數(shù)的流程圖。答: 本次釋放的物理頁的數(shù)量是1,釋放的物理頁的頁框號0x409,釋放的物理頁是之前分配的物理頁; 釋放的物理頁被放入了空閑頁鏈表中; 見實驗過程開頭
8、流程圖部分。(5)按F10單步調(diào)試MmAllocateVirtualMemory函數(shù)的執(zhí)行過程,嘗試回答下面的問題:分配的虛擬頁的起始地址是多少?分配的虛擬頁的數(shù)量是多少?它們和參數(shù)BaseAddress和RegionSize初始化的值有什么樣的關(guān)系? 配虛擬頁的同時有為虛擬頁映射實際的物理頁嗎?這是由哪個參數(shù)決定的? 分配的虛擬頁是在系統(tǒng)地址空間(高2G)還是在用戶地址空間(低2G)?這是由哪個參數(shù)決定的? 參考MiReserveAddressRegion函數(shù)的定義和注釋,說明該函數(shù)的功能。答:分配的虛擬頁的起始地址是0xa0003000,分配的虛擬頁的數(shù)量是1,Base
9、Address和RegionSize初始化的值是期望保留或者提交的地址區(qū)域的起始地址和大?。环峙涮摂M頁的同時有為虛擬頁映射實際的物理頁,這是由第三個參數(shù)AllocationType決定的; 分配的虛擬頁是在系統(tǒng)地址空間(高2G),這是由第四個參數(shù)SystemVirtual決定的;MiReserveAddressRegion函數(shù)的功能是保留一段虛擬地址區(qū)域。(6)按F10單步調(diào)試MmFreeVirtualMemory函數(shù)的執(zhí)行過程,嘗試回答下面的問題: 本次釋放的虛擬地址是多少?釋放的虛擬頁是之前分配的虛擬頁嗎?參考MiFindReservedAddressRegion函數(shù)、
10、MiFreeAddressRegion函數(shù)和MiDecommitPages函數(shù)的定義和注釋,說明這些函數(shù)的功能。答:本次釋放的虛擬地址是0xa0003000,是之前分配的虛擬頁; MiFindReservedAddressRegion函數(shù)用于查找已保留地址區(qū)域,如果目標(biāo)區(qū)域非已保留區(qū)域則返回失敗,MiFreeAddressRegion函數(shù)用于釋放已保留地址區(qū)域和MiDecommitPages函數(shù)用于釋放映射在連續(xù)虛擬頁框上的物理頁框。3. 源程序并附上注釋#include "EOSApp.h"/ main 函數(shù)參數(shù)的意義:/ argc - argv 數(shù)
11、組的長度,大小至少為 1,argc - 1 為命令行參數(shù)的數(shù)量。/ argv - 字符串指針數(shù)組,數(shù)組長度為命令行參數(shù)個數(shù) + 1。其中 argv0 固定指向當(dāng)前/ 進(jìn)程所執(zhí)行的可執(zhí)行文件的路徑字符串,argv1 及其后面的指針指向各個命令行/ 參數(shù)。/ 例如通過命令行內(nèi)容 "a:hello.exe -a -b" 啟動進(jìn)程后,hello.exe 的 main 函/ 數(shù)的參數(shù) argc 的值為 3,argv0 指向字符串 "a:hello.exe",argv1 指向/ 參數(shù)字符串 "-a",argv2 指向參數(shù)字符串 "-b&
12、quot;。/int main(int argc, char* argv)/ 啟動調(diào)試 EOS 應(yīng)用程序前要特別注意下面的問題:/ 1、如果要在調(diào)試應(yīng)用程序時能夠調(diào)試進(jìn)入內(nèi)核并顯示對應(yīng)的源碼,/ 必須使用 EOS 核心項目編譯生成完全版本的 SDK 文件夾,然/ 后使用此文件夾覆蓋應(yīng)用程序項目中的 SDK 文件夾,并且 EOS/ 核心項目在磁盤上的位置不能改變。/ 2、在啟動調(diào)試應(yīng)用程序之前必須首先刪除/禁用所有的斷點,在斷/ 點中斷 (int 3) 被命中后才能重新添加/啟用斷點,否則啟動/ 調(diào)試會失敗。/#ifdef _DEBUG/_asm("int $3n nop")
13、;#endif/* TODO: 在此處添加自己的代碼 */INT *p;if(p=VirtualAlloc(0,sizeof(int),MEM_RESERVE|MEM_COMMIT)/申請空間/如果分配成功進(jìn)行以下操作printf("allocation successn");printf("allocate %d byte at %xn",sizeof(int),p);/申請空間大小printf("Virtual memory original value 0x%xn",*p);/賦值之前*p=0xFFFFFFFF;printf(&
14、quot;Virtual memory new value is 0x%xn",*p);printf("wait for 10 seconds n");/等10sSleep(10000);if(VirtualFree(p,0,MEM_RELEASE)/釋放/RegionSize - 作輸入時,如果參數(shù)FreeType的值為MEM_RELEASE則必須為0,否則輸入/期望MEM_DECOMMIT的內(nèi)存大小;作輸出時,輸出實際釋放的區(qū)域大小。printf("Release virtual memory successn");elseprintf(&
15、quot;free failedn");printf("endless loop");for(;)/死循環(huán) ;else/如果分配失敗printf("allocation failedn");return -1;return 0;4. 程序運行時的初值和運行結(jié)果4.1 準(zhǔn)備實驗 按照下面的步驟準(zhǔn)備實驗: 1. 啟動OS Lab。 2. 新建一個EOS Kernel項目。 4.2 閱讀控制臺命令“pm”相關(guān)的源代碼,并查看其執(zhí)行的結(jié)果 閱讀ke/sysproc.c文件中第1059行的ConsoleCmdPhysicalMemory函數(shù),學(xué)習(xí)“pm”
16、命令是如何統(tǒng)計并輸出物理存儲器信息的。在閱讀的過程中需要注意下面幾點: l 在統(tǒng)計輸出物理存儲器信息之前要關(guān)閉中斷,之后要打開中斷,這樣可以防止在命令執(zhí)行的過程中有其它線程分配或者釋放物理頁。 l 全局變量MiTotalPageFrameCount保存了物理頁的總數(shù)。每個物理頁的大小是4KB,由宏P(guān)AGE_SIZE定義。 l 全局變量MiZeroedPageCount和MiFreePageCount分別保存了零頁和空閑頁的數(shù)量。 l 計算已用物理頁數(shù)量的方法是:物理頁總數(shù)減去零頁數(shù)量,再減去空閑頁數(shù)量。 按照下面的步驟執(zhí)行控制臺命令“pm”,查看物理存儲器的信息: 1. 按F7生成在本實驗3.
17、1中創(chuàng)建的EOS Kernel項目。 2. 按F5啟動調(diào)試。 3. 待EOS啟動完畢,在EOS控制臺中輸入命令“pm”后按回車。 觀察命令執(zhí)行的結(jié)果,可以了解當(dāng)前物理存儲器的使用情況。 4.3 分配物理頁和釋放物理頁 接下來,在pm命令函數(shù)中添加分配物理頁和釋放物理頁的代碼,單步調(diào)試管理物理頁的方法。按照下面的步驟修改pm命令的源代碼: 1. 使用OS Lab打開本實驗文件夾中的pm.c文件(將文件拖動到OS Lab窗口中釋放即可打開)。此文件中有一個修改后的ConsoleCmdPhysicalMemory函數(shù),主要是在原有代碼的后面增加了分配物理頁和釋放物理頁的代碼。 2. 使用pm.c文件
18、中ConsoleCmdPhysicalMemory函數(shù)的函數(shù)體替換ke/sysproc.c文件中ConsoleCmdPhysicalMemory函數(shù)的函數(shù)體。 3. 按F7生成修改后的EOS Kernel項目。 4. 按F5啟動調(diào)試。 5. 待EOS啟動完畢,在EOS控制臺中輸入命令“pm”后按回車。 觀察命令執(zhí)行的結(jié)果,嘗試說明分配物理頁或者釋放物理頁后物理存儲器的變化情況。 按照下面的步驟調(diào)試分配物理頁和釋放物理頁的過程: 1. 結(jié)束之前的調(diào)試。 2. 在ke/sysproc.c文件的ConsoleCmdPhysicalMemory函數(shù)中,在調(diào)用MiAllocateAnyPages函數(shù)的代
19、碼行(第1103行)添加一個斷點,在調(diào)用MiFreePages函數(shù)的代碼行(第1115行)添加一個斷點。 3. 按F5啟動調(diào)試。 4. 待EOS啟動完畢,在EOS控制臺中輸入命令“pm”后按回車。 5. pm命令開始執(zhí)行后,會在調(diào)用MiAllocateAnyPages函數(shù)的代碼行處中斷,按F11調(diào)試進(jìn)入MiAllocateAnyPages函數(shù)。 6. 按F10單步調(diào)試MiAllocateAnyPages函數(shù)的執(zhí)行過程,嘗試回答下面的問題: (1) 本次分配的物理頁的數(shù)量是多少?分配的物理頁的頁框號是多少? (2) 物理頁是從空閑頁鏈表中分配的?還是從零頁鏈表中分配的? (3) 哪一行語句減少了
20、空閑頁的數(shù)量?哪一行語句將剛剛分配的物理頁由空閑狀態(tài)修改為忙狀態(tài)? (4) 繪制MiAllocateAnyPages函數(shù)的流程圖。 繼續(xù)調(diào)試釋放物理頁的過程: 1. 按F5繼續(xù)執(zhí)行,會在調(diào)用MiFreePages函數(shù)的代碼行處中斷,按F11調(diào)試進(jìn)入MiFreePages函數(shù)。 2. 按F10單步調(diào)試MiFreePages函數(shù)的執(zhí)行過程,嘗試回答下面的問題: (1) 本次釋放的物理頁的數(shù)量是多少?釋放的物理頁的頁框號是多少?釋放的物理頁是之前分配的物理頁嗎? (2) 釋放的物理頁是被放入了空閑頁鏈表中?還是零頁鏈表中? (3) 繪制MiFreePages函數(shù)的流程圖。 結(jié)束此次調(diào)試。繼續(xù)修改pm
21、命令的源代碼,嘗試在調(diào)用MiAllocateAnyPages函數(shù)時分配多個物理頁,然后在調(diào)用MiFreePages函數(shù)時將分配的多個物理頁釋放,并練習(xí)調(diào)試這兩個函數(shù)在分配多個物理頁和釋放多個物理頁時執(zhí)行的過程。 4.4閱讀控制臺命令“vm”相關(guān)的源代碼,并查看其執(zhí)行的結(jié)果 閱讀ke/sysproc.c文件中第959行的ConsoleCmdVM函數(shù),學(xué)習(xí)“vm”命令是如何統(tǒng)計并輸出進(jìn)程的虛擬地址描述符信息的。在閱讀的過程中需要注意下面幾點: l 與“pm”命令輸出的是整個系統(tǒng)的物理存儲器的使用情況不同,“pm”命令輸出的是某個進(jìn)程的虛擬地址描述符信息,所以“pm”命令使用了一個參數(shù)進(jìn)程ID,用來
22、指定一個進(jìn)程。這個進(jìn)程既可以是系統(tǒng)進(jìn)程,也可以是用戶進(jìn)程。 l 在統(tǒng)計輸出指定進(jìn)程的虛擬地址描述符信息之前要關(guān)閉中斷,之后要打開中斷,這樣可以防止在命令執(zhí)行的過程中有其它線程分配或者釋放虛擬頁。 l EOS操作系統(tǒng)的進(jìn)程有4G的虛擬地址空間,但并不是所有的虛擬地址空間都使用虛擬地址描述符來管理,有一些地址空間是靜態(tài)的,還有一些地址空間由其他的動態(tài)方式來管理(例如系統(tǒng)內(nèi)存池)。 l 進(jìn)程4G虛擬地址空間中由虛擬地址描述符所管理空間的低地址和高地址是固定的,在這段地址空間中,如果有虛擬頁被占用,就會使用虛擬地址描述符來標(biāo)識,并放入鏈表中管理。 按照下面的步驟執(zhí)行控制臺命令“pm”,查看系統(tǒng)進(jìn)程的虛
23、擬地址描述符信息: 1. 按F5啟動調(diào)試。 2. 待EOS啟動完畢,在EOS控制臺中輸入命令“pt”后按回車。“pt”命令可以輸出當(dāng)前系統(tǒng)中的進(jìn)程列表,其中系統(tǒng)進(jìn)程的ID為1。 3. 在EOS控制臺中輸入命令“vm 1”后按回車。 觀察命令執(zhí)行的結(jié)果,如圖15-3所示,可以了解系統(tǒng)進(jìn)程的虛擬地址描述符信息。 系統(tǒng)進(jìn)程中由虛擬地址描述符所管理的虛擬頁只會分配給進(jìn)程的句柄表(句柄表占用一個虛擬頁)和線程的堆棧(堆棧占用兩個虛擬頁)。結(jié)合之前“pt”命令輸出的進(jìn)程和線程信息可知,當(dāng)前系統(tǒng)中只有1個系統(tǒng)進(jìn)程以及10個系統(tǒng)線程,所以在圖15-3中,1號描述符所包含的一個虛擬頁即為系統(tǒng)進(jìn)程的句柄表,而2到
24、11號這10個描述符所分別包含的兩個虛擬頁即為10個系統(tǒng)線程的堆棧。 可以按照下面的步驟執(zhí)行控制臺命令“vm”,查看當(dāng)創(chuàng)建了一個應(yīng)用程序進(jìn)程后,系統(tǒng)進(jìn)程和應(yīng)用程序進(jìn)程中虛擬地址描述符的信息: 1. 在“項目管理器”窗口中雙擊Floppy.img文件,使用FloppyImageEditor工具打開此軟盤鏡像。 2. 將本實驗文件夾中的LoopApp.exe文件添加到軟盤鏡像的根目錄中(將LoopApp.exe文件拖動到FloppyImageEditor窗口中釋放即可)。EOS應(yīng)用程序LoopApp.exe的源代碼可以參考本實驗文件夾中的LoopApp.c文件。 3. 點擊FloppyImageE
25、ditor工具欄上的保存按鈕,關(guān)閉該工具。 4. 按F5啟動調(diào)試。 5. 待EOS啟動完畢,在EOS控制臺中輸入命令“A:LoopApp.exe”后按回車。此時就使用EOS應(yīng)用程序文件LoopApp.exe創(chuàng)建了一個應(yīng)用程序進(jìn)程,由于此進(jìn)程執(zhí)行了一個死循環(huán),所以此進(jìn)程不會結(jié)束執(zhí)行,除非關(guān)閉虛擬機(jī)。 6. 此時按Ctrl+F2切換到“Console-2”,然后輸入命令“pt”后按回車。輸出的信息如圖15-4所示。其中ID為31的進(jìn)程就是應(yīng)用程序進(jìn)程,ID為33的線程就是應(yīng)用程序進(jìn)程的主線程。 7. 輸入命令“vm 1”后按回車,可以查看系統(tǒng)進(jìn)程中虛擬地址描述符的信息。輸出的信息如圖15-5所示。
26、與圖15-3比較可知,3號描述符所包含的一個虛擬頁即為應(yīng)用程序進(jìn)程的句柄表,13號描述符所包含的兩個虛擬頁即為應(yīng)用程序進(jìn)程主線程的堆棧。 8. 輸入命令“vm 31”后按回車,可以查看應(yīng)用程序進(jìn)程中虛擬地址描述符的信息。在進(jìn)程的4G邏輯地址空間中,應(yīng)用程序進(jìn)程可以自行管理低2G的用戶空間。從圖15-6中的信息可以得知,低2G的用戶空間又被分為了三部分: l 0x00000000-0x0000FFFF 由16個虛擬頁構(gòu)成的64KB靜態(tài)空間,用于捕捉對空指針的非法訪問。 l 0x00010000-0x7FFEFFFF 由虛擬地址描述符管理的動態(tài)空間,用于存儲應(yīng)用程序進(jìn)程的代碼和數(shù)據(jù)。圖15-6顯示
27、應(yīng)用程序進(jìn)程的代碼和數(shù)據(jù)占用了此空間中的5個虛擬頁,并且是用從應(yīng)用程序的基址0x00400000起始的。 l 0x7FFF0000-0x7FFFFFFF由16個虛擬頁構(gòu)成的64KB靜態(tài)空間,用于捕捉對空指針的非法訪問。 為了加深對進(jìn)程邏輯地址空間的理解,可以在控制臺1至控制臺7中都執(zhí)行命令“A:LoopApp.exe”,從而讓應(yīng)用程序創(chuàng)建7個進(jìn)程,然后在控制臺8中執(zhí)行“pt”、“vm”等命令,查看系統(tǒng)進(jìn)程和應(yīng)用程序進(jìn)程的虛擬地址描述符。4.5 在系統(tǒng)進(jìn)程中分配虛擬頁和釋放虛擬頁 接下來,在vm命令函數(shù)中添加分配虛擬頁和釋放虛擬頁的代碼,單步調(diào)試管理虛擬頁的方法。首先,按照下面的步驟修改vm命令
28、的源代碼: 1. 使用OS Lab打開本實驗文件夾中的vm.c文件(將文件拖動到OS Lab窗口中釋放即可打開)。此文件中有一個修改后的ConsoleCmdVM函數(shù),主要是在原有代碼的后面增加了分配虛擬頁和釋放物理頁的代碼。 2. 使用vm.c文件中ConsoleCmdVM函數(shù)的函數(shù)體替換ke/sysproc.c文件中ConsoleCmdVM函數(shù)的函數(shù)體。 3. 按F7生成修改后的EOS Kernel項目。 4. 按F5啟動調(diào)試。 5. 待EOS啟動完畢,在EOS控制臺中輸入命令“vm 1”后按回車。 命令執(zhí)行的結(jié)果會同時轉(zhuǎn)儲在“輸出”窗口中。嘗試說明分配虛擬頁或者釋放虛擬頁后虛擬地址描述符以
29、及物理存儲器的變化情況。 按照下面的步驟調(diào)試分配虛擬頁和釋放虛擬頁的過程: 1. 在ke/sysproc.c文件的ConsoleCmdVM函數(shù)中,在調(diào)用MmAllocateVirtualMemory函數(shù)的代碼行(第1082行)添加一個斷點,在調(diào)用MmFreeVirtualMemory函數(shù)的代碼行(第1147行)添加一個斷點。 2. 按F5啟動調(diào)試。 3. 待EOS啟動完畢,在EOS控制臺中輸入命令“vm 1”后按回車。 4. vm命令開始執(zhí)行后,會在調(diào)用MmAllocateVirtualMemory函數(shù)的代碼行處中斷。此時要注意參數(shù)BaseAddress和RegionSize初始化的值。按F1
30、1調(diào)試進(jìn)入MmAllocateVirtualMemory函數(shù)。 5. 按F10單步調(diào)試MmAllocateVirtualMemory函數(shù)的執(zhí)行過程,嘗試回答下面的問題: (1) 分配的虛擬頁的起始地址是多少?分配的虛擬頁的數(shù)量是多少?它們和參數(shù)BaseAddress和RegionSize初始化的值有什么樣的關(guān)系? (2) 分配虛擬頁的同時有為虛擬頁映射實際的物理頁嗎?這是由哪個參數(shù)決定的? (3) 分配的虛擬頁是在系統(tǒng)地址空間(高2G)還是在用戶地址空間(低2G)?這是由哪個參數(shù)決定的? (4) 參考MiReserveAddressRegion函數(shù)的定義和注釋,說明該函數(shù)的功能。 繼續(xù)調(diào)試釋放
31、虛擬頁的過程: 1. 按F5繼續(xù)執(zhí)行,會在調(diào)用MmFreeVirtualMemory函數(shù)的代碼行處中斷。此時要注意參數(shù)BaseAddress和RegionSize初始化的值。按F11調(diào)試進(jìn)入MmFreeVirtualMemory函數(shù)。 2. 按F10單步調(diào)試MmFreeVirtualMemory函數(shù)的執(zhí)行過程,嘗試回答下面的問題: (1) 本次釋放的虛擬地址是多少?釋放的虛擬頁是之前分配的虛擬頁嗎? (2) 參考MiFindReservedAddressRegion函數(shù)、MiFreeAddressRegion函數(shù)和MiDecommitPages函數(shù)的定義和注釋,說明這些函數(shù)的功能。 結(jié)束此次調(diào)
32、試后,繼續(xù)按照下列要求修改ConsoleCmdVM函數(shù)的源代碼,加深對虛擬頁分配和釋放過程的理解: 1. 嘗試在調(diào)用MmAllocateVirtualMemory函數(shù)時將RegionSize參數(shù)的值設(shè)置為PAGE_SIZE+1或者PAGE_SIZE*2+1。觀察“輸出”窗口中轉(zhuǎn)儲的信息,并說明申請?zhí)摂M內(nèi)存的大小與實際分配的大小之間的關(guān)系,以及分配的虛擬內(nèi)存大小會對分配的虛擬地址產(chǎn)生什么樣的影響。將“輸出”窗口中轉(zhuǎn)儲的信息保存在文本文件中。 2. 嘗試在調(diào)用MmAllocateVirtualMemory函數(shù)時將BaseAddress參數(shù)的值設(shè)置為已經(jīng)被占用的虛擬內(nèi)存,例如0xA0000000,觀察“輸出”窗口中轉(zhuǎn)儲的信息。將“輸出”窗口中轉(zhuǎn)儲的信息保存在文本文件中。 3. 嘗試在調(diào)用MmA
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- GB/T 12690.20-2024稀土金屬及其氧化物中非稀土雜質(zhì)化學(xué)分析方法第20部分:稀土氧化物中微量氟、氯的測定離子色譜法
- 本周工作總結(jié)與下周工作計劃報告
- 2025年禁毒宣傳工作計劃例文
- 個人教學(xué)計劃范文集合
- 做好班級家長工作計劃
- 個人工作計劃書的寫作模板
- 學(xué)年度第二學(xué)期四年級班主任個人工作計劃
- 2025護(hù)理個人的工作計劃范文
- 銀行新員工個人工作計劃
- 2025年“心起點”工作室開學(xué)工作計劃范文
- 股權(quán)激勵對賭協(xié)議范本
- 銀行保安服務(wù) 投標(biāo)方案(技術(shù)標(biāo))
- 食材配送服務(wù)方案投標(biāo)方案(技術(shù)方案)
- 經(jīng)營分析培訓(xùn)課件(課件)
- 人教版三年級數(shù)學(xué)上冊第十單元《總復(fù)習(xí)》(大單元教學(xué)設(shè)計)
- 排球試題題庫
- CJJT148-2010 城鎮(zhèn)燃?xì)饧映艏夹g(shù)規(guī)程
- 人教版八年級上冊地理問答題提綱
- 試驗檢測方案
- 小學(xué)語文朗讀指導(dǎo)案例
- 小提琴入門教學(xué)法智慧樹知到期末考試答案章節(jié)答案2024年四川音樂學(xué)院
評論
0/150
提交評論