07物理存儲(chǔ)器與進(jìn)程邏輯地址空間的管理_第1頁(yè)
07物理存儲(chǔ)器與進(jìn)程邏輯地址空間的管理_第2頁(yè)
07物理存儲(chǔ)器與進(jìn)程邏輯地址空間的管理_第3頁(yè)
07物理存儲(chǔ)器與進(jìn)程邏輯地址空間的管理_第4頁(yè)
07物理存儲(chǔ)器與進(jìn)程邏輯地址空間的管理_第5頁(yè)
已閱讀5頁(yè),還剩17頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

《操作系統(tǒng)》實(shí)驗(yàn)報(bào)告實(shí)驗(yàn)題目物理存儲(chǔ)器與進(jìn)程邏輯地址空間的管理 學(xué)生姓名 lee 學(xué)號(hào) 專業(yè)班級(jí) 指導(dǎo)教師 院系名稱 計(jì)算機(jī)與信息學(xué)院2017年10月30日7物理存儲(chǔ)器與進(jìn)程邏輯地址空間的管理實(shí)驗(yàn)?zāi)康呐c要求通過查看物理存儲(chǔ)器的使用情況,并練習(xí)分配和回收物理內(nèi)存,從而掌握物理存儲(chǔ)器的管理方法。通過查看進(jìn)程邏輯地址空間的使用情況,并練習(xí)分配和回收虛擬內(nèi)存,從而掌握進(jìn)程邏輯地址空間的管理方法。實(shí)驗(yàn)原理閱讀本書第 6章。重點(diǎn)閱讀第6.3節(jié)和第6.6節(jié),了解物理存儲(chǔ)器的管理方式和進(jìn)程邏輯地址空間的管理方式。實(shí)驗(yàn)內(nèi)容準(zhǔn)備實(shí)驗(yàn)按照下面的步驟準(zhǔn)備實(shí)驗(yàn):?jiǎn)?dòng)OSLab。新建一個(gè)EOSKernel項(xiàng)目。閱讀控制臺(tái)命令"pm’相關(guān)的源代碼,并查看其執(zhí)行的結(jié)果閱讀ke/sysproc.c文件中第1059行的ConsoleCmdPhysicalMemory函數(shù),學(xué)習(xí)pmf命令是如何統(tǒng)計(jì)并輸出物理存儲(chǔ)器信息的。在閱讀的過程中需要注意下面幾點(diǎn):在統(tǒng)計(jì)輸出物理存儲(chǔ)器信息之前要關(guān)閉中斷,之后要打開中斷,這樣可以防止在命令執(zhí)行的過程中有其它線程分配或者釋放物理頁(yè)。全局變量MiTotalPageFrameCount保存了物理頁(yè)的總數(shù)。每個(gè)物理頁(yè)的大小是 4KB由宏P(guān)AGE_SIZ定義。全局變量MiZeroedPageCount和MiFreePageCount分別保存了零頁(yè)和空閑頁(yè)的數(shù)量。計(jì)算已用物理頁(yè)數(shù)量的方法是:物理頁(yè)總數(shù)減去零頁(yè)數(shù)量,再減去空閑頁(yè)數(shù)量。按照下面的步驟執(zhí)行控制臺(tái)命令" pm’,查看物理存儲(chǔ)器的信息:.按F7生成在本實(shí)驗(yàn)3.1中創(chuàng)建的EOSKernel項(xiàng)目。.按F5啟動(dòng)調(diào)試。.待EOSB動(dòng)完畢,在EOSS制臺(tái)中輸入命令"pm’后按回車。觀察命令執(zhí)行的結(jié)果,如圖1所示,可以了解當(dāng)前物理存儲(chǔ)器的使用情況。

OSLabPC-BicrosuftVirtualPC200?圖i:pm’命令的執(zhí)行結(jié)果3.3分配物理頁(yè)和釋放物理頁(yè)接下來(lái),在pm命令函數(shù)中添加分配物理頁(yè)和釋放物理頁(yè)的代碼,單步調(diào)試管理物理頁(yè)的方法。按照下面的步驟修改 pm命令的源代碼:.使用OSLab打開本實(shí)驗(yàn)文件夾中的pm.c文件(將文件拖動(dòng)到OSLab窗口中釋放即可打開)。此文件中有一個(gè)修改后的ConsoleCmdPhysicalMemory函數(shù),主要是在原有代碼的后面增加了分配物理頁(yè)和釋放物理頁(yè)的代碼。.使用pm.c文件中ConsoleCmdPhysicalMemory函數(shù)的函數(shù)體替換ke/sysproc.c文件中ConsoleCmdPhysicalMemory函數(shù)的函數(shù)體。.按F7生成修改后的EOSKernel項(xiàng)目。.按F5啟動(dòng)調(diào)試。.待EOSB動(dòng)完畢,在EO的制臺(tái)中輸入命令pm'后按回車。觀察命令執(zhí)行的結(jié)果,如圖2所示,嘗試說明分配物理頁(yè)或者釋放物理頁(yè)后物理存儲(chǔ)器的變化情況。COSLabFC-MicropuftVirtualPC2007 匚ILfxIActionEAitCDfloppyHelpCONSOLE-1(PressCtrl+Fl~FBtoswitchconsolewind。*..)UelcometoEOSshell>pnPageCount:8176,MemoryCount:8176*4096=33488896Byte*ZeroedPageCount:0.FreePageCount:71Z6.UsedPageCount;1050.xK/HKitAfterAllocateOnePageZeroedPageCount:0.FreePageCount:7125.UsedPageCourt:1051.xxMXMMAfterFreeOnePagehxxhxhZeroedPageCount:0.FreePageCount:7126.UsedPageCount:105G.圖2:分配物理頁(yè)或者釋放物理頁(yè)后物理存儲(chǔ)器的變化情況。按照下面的步驟調(diào)試分配物理頁(yè)和釋放物理頁(yè)的過程:1.結(jié)束之前的調(diào)試。.在ke/sysproc.c文件的ConsoleCmdPhysicalMemory函數(shù)中,在調(diào)用MiAllocateAnyPages函數(shù)的代碼行(第1103行)添加一個(gè)斷點(diǎn),在調(diào)用MiFreePages函數(shù)的代碼行(第1115行)添加一個(gè)斷點(diǎn)。.按F5啟動(dòng)調(diào)試。.待EOSB動(dòng)完畢,在EO醛制臺(tái)中輸入命令 pm’后按回車。.pm^令開始執(zhí)行后,會(huì)在調(diào)用 MiAllocateAnyPages函數(shù)的代碼行處中斷,按F11調(diào)試進(jìn)入MiAllocateAnyPages函數(shù)。.按F10單步調(diào)試MiAllocateAnyPages函數(shù)的執(zhí)行過程,嘗試回答下面的問題:(1)本次分配的物理頁(yè)的數(shù)量是多少?分配的物理頁(yè)的頁(yè)框號(hào)是多少?(2)物理頁(yè)是從空閑頁(yè)鏈表中分配的?還是從零頁(yè)鏈表中分配的?(3)哪一行語(yǔ)句減少了空閑頁(yè)的數(shù)量?哪一行語(yǔ)句將剛剛分配的物理頁(yè)由空閑狀態(tài)修改為忙狀態(tài)?(4)繪制MiAllocateAnyPages函數(shù)的流程圖。答:(1)本次分配的物理頁(yè)的數(shù)量是 1,分配的物理頁(yè)的頁(yè)框號(hào)是0x409;(2)物理頁(yè)是從空閑頁(yè)鏈表中分配的 ,;

(3)第226行MiFreePageListHead=MiGetPfnDatabaseEntry(Pfn)->Next;和第227行MiFreePageCount--;減少了空閑頁(yè)的數(shù)量,第 229行將剛剛分配的物理頁(yè)由空閑狀態(tài)修改為忙狀態(tài);中斷禁止】事由,白由仙Pitt,*監(jiān)視名稱 一L值NuiTiber0tPages 0x1MiFreeFageC口utlt Ox1bd5表是否夠分血>-啊從零'鏈我分配|監(jiān)視名稱 一L值NuiTiber0tPages 0x1MiFreeFageC口utlt Ox1bd5表是否夠分血>-啊從零'鏈我分配|舊蛻站束MiAllocateAnyPages函數(shù)的流程圖▼qX調(diào)用堆棧名稱MiAllocatwAiiyPagee(NijjiiberOfl'agee=Ux1,,FEhlAtray=Uxa0008a50)地址:0x3001a488CoreoleCmdPhysicalMemoryCStdHandls=0k2)地址:0x800192e4ICiShellThn-ead(Farainwtwrnh口)地址:1:1]-:8001852.2PspThreadStartup0地址:0x8001e2Sa??O地址:口筑口口口口口口口口優(yōu)調(diào)試信息)<:] >|朝查找結(jié)果1]厘查找結(jié)果2]后監(jiān)視圜輸出[0斷點(diǎn)[能調(diào)用堆棧就緒行1T4圖3MiAllocateAnyPages 函數(shù)監(jiān)視和堆棧繼續(xù)調(diào)試釋放物理頁(yè)的過程:.按F5繼續(xù)執(zhí)行,會(huì)在調(diào)用MiFreePages函數(shù)的代碼行處中斷, 按F11調(diào)試進(jìn)入MiFreePages函數(shù)。.按F10單步調(diào)試MiFreePages函數(shù)的執(zhí)行過程,嘗試回答下面的問題:(1)本次釋放的物理頁(yè)的數(shù)量是多少?釋放的物理頁(yè)的頁(yè)框號(hào)是多少?釋放的物理頁(yè)是之前分配的物理頁(yè)嗎?(2)釋放的物理頁(yè)是被放入了空閑頁(yè)鏈表中?還是零頁(yè)鏈表中?(3)繪制MiFreePages函數(shù)的流程圖。答:(1)本次釋放的物理頁(yè)的數(shù)量是1,釋放的物理頁(yè)的頁(yè)框號(hào)0x409,釋放的物理頁(yè)是之前分配的物理頁(yè);(2)釋放的物理頁(yè)被放入了空閑頁(yè)鏈表中;(3)見下圖:修諛物理頁(yè)的狀態(tài)為空闈井播入空閑嵯表如a:%17闈;ri:他占MiFreePages修諛物理頁(yè)的狀態(tài)為空闈井播入空閑嵯表如a:%17闈;ri:他占MiFreePages函數(shù)的流程圖圖4MiFreePages圖4MiFreePages函數(shù)監(jiān)視和堆棧(問題:兩次一加一減????)結(jié)束此次調(diào)試。繼續(xù)修改pm^令的源代碼,嘗試在調(diào)用MiAllocateAnyPages函數(shù)時(shí)分配多個(gè)物理頁(yè),然后在調(diào)用 MiFreePages函數(shù)時(shí)將分配的多個(gè)物理頁(yè)釋放,并練習(xí)調(diào)試這兩個(gè)函數(shù)在分配多個(gè)物理頁(yè)和釋放多個(gè)物理頁(yè)時(shí)執(zhí)行的過程。3.4閱讀控制臺(tái)命令"vm’相關(guān)的源代碼,并查看其執(zhí)行的結(jié)果閱讀ke/sysproc.c文件中第959行的ConsoleCmdVME數(shù),學(xué)習(xí)Vmf命令是如何統(tǒng)計(jì)并輸出進(jìn)程的虛擬地址描述符信息的。在閱讀的過程中需要注意下面幾點(diǎn):與“pm”命令輸出的是整個(gè)系統(tǒng)的物理存儲(chǔ)器的使用情況不同, Vm”命令輸出的是某個(gè)進(jìn)程的虛擬地址描述符信息,所以Vm”命令使用了一個(gè)參數(shù)一一進(jìn)程ID,用來(lái)指定一個(gè)進(jìn)程。這個(gè)進(jìn)程既可以是系統(tǒng)進(jìn)程,也可以是用戶進(jìn)程。在統(tǒng)計(jì)輸出指定進(jìn)程的虛擬地址描述符信息之前要關(guān)閉中斷,之后要打開中斷,這樣可以防止在命令執(zhí)行的過程中有其它線程分配或者釋放虛擬頁(yè)。EO舞作系統(tǒng)白進(jìn)程有4G勺虛擬地址空間,但并不是所有的虛擬地址空間都使用虛擬地址描述符來(lái)管理,有一些地址空間是靜態(tài)的,還有一些地址空間由其他的動(dòng)態(tài)方式來(lái)管理 (例如系統(tǒng)內(nèi)存池)。進(jìn)程4GI擬地址空間中由虛擬地址描述符所管理空間的低地址和高地址是固定的, 在這段地址空間中,如果有虛擬頁(yè)被占用,就會(huì)使用虛擬地址描述符來(lái)標(biāo)識(shí), 并放入鏈表中管理。按照下面的步驟執(zhí)行控制臺(tái)命令“ vm”,查看系統(tǒng)進(jìn)程的虛擬地址描述符信息:.按F5啟動(dòng)調(diào)試。.待EOSB動(dòng)完畢,在EOS!制臺(tái)中輸入命令"pt”后按回車?!皃t”命令可以輸出當(dāng)前系統(tǒng)中的進(jìn)程列表,其中系統(tǒng)進(jìn)程的 ID為1。圖5輸入命令“pt”.在EO醛制臺(tái)中輸入命令vm1”后按回車。觀察命令執(zhí)行的結(jié)果,如圖15-3所示,可以了解系統(tǒng)進(jìn)程的虛擬地址描述符信息?!鯫SLabPC-licrospftVirtualPC2007ActionEditCDFloppyHelpCONSOLE-1(PressCtr1+F1T8toswitchconsolewindow...)人Z4¥Z4Uaiting10X80018Z5D25V24Waiting10x80018Z6D26¥24Uaiting10X8OO1826DZ7YZ4Uaiting10X80018Z6D28¥24Waiting10X8OO18Z6D1TotalUpnfron655360to657407.(OxAOQOOOQO-0xA07FFFFD1?UadIncludeUpnFrom655360to65536。.(0XA0O000O0-OxAOOOOFFF)ZUUadIncludeUp力Froti655361to65536Z.(OxAQOOlOOQ-OXAO0O2FFF)3ttUadIncludeUpnFron655365to655366.(OxA0O05OOO-0xAOOO6FFF)UadIncludeUpnFron655367to655368.(0xA0OO70oe-OxAOOQBFFF)UadIncludeUpnFrow655369to6553704(QxAQ00900Q-OxAOOOAFFF)UadIncludeUpnFron655371to655372.(OxAOOOBOOO-OxAOOOCFFF)7ttUadIncludeUpnFron655373to655374,(0XAOO0D000-OxAOOGEFFF)a#UadIncludeUp力From655375to655376.(OxAQOOFOOQ-OxA001OFFF)SttUadIncludeUpnFron655377to655378.(OxAOOllOOO-OxAGOlZFFF)10#UadInclude2UpnFrom655379to655380.(0xA0O13O0O-0xAOO14FFF)llflWadInclude2UpnFrom655381to655382.(0XAOO15OQO-OxAOOlGFFF)TotaLUpnCount:2046?AllocatedUpnCount:ZL1414>_圖6:使用Vm”命令查看系統(tǒng)進(jìn)程虛擬地址描述符的結(jié)果系統(tǒng)進(jìn)程中由虛擬地址描述符所管理的虛擬頁(yè)只會(huì)分配給進(jìn)程的句柄表 (句柄表占用一個(gè)虛擬頁(yè))和線程的堆棧(堆棧占用兩個(gè)虛擬頁(yè))。結(jié)合之前 優(yōu)”命令輸出的進(jìn)程和線程信息可知,當(dāng)前系統(tǒng)中只有1個(gè)系統(tǒng)進(jìn)程以及10個(gè)系統(tǒng)線程,所以在圖15-3中,1號(hào)描述符所包含的一個(gè)虛擬頁(yè)即為系統(tǒng)進(jìn)程的句柄表,而 2到11號(hào)這10個(gè)描述符所分別包含的兩個(gè)虛擬頁(yè)即為10個(gè)系統(tǒng)線程的堆棧??梢园凑障旅娴牟襟E執(zhí)行控制臺(tái)命令 Vm”,查看當(dāng)創(chuàng)建了一個(gè)應(yīng)用程序進(jìn)程后, 系統(tǒng)進(jìn)程和應(yīng)用程序進(jìn)程中虛擬地址描述符的信息:.在項(xiàng)目管理器”窗口中雙擊Floppy.img文件,使用FloppylmageEditor工具打開此軟盤鏡像。.將本實(shí)驗(yàn)文件夾中的LoopApp.exe文件添加到軟盤鏡像的根目錄中(將LoopApp.exe文件拖動(dòng)到FloppyImageEditor窗口中釋放即可)。 EOS^Z用程序LoopApp.exe的源代碼可以參考本實(shí)驗(yàn)文件夾中的LoopApp.c文件。.點(diǎn)擊FloppyImageEditor工具欄上的保存按鈕,關(guān)閉該工具。.按F5啟動(dòng)調(diào)試。.待EOSB動(dòng)完畢,在EO醛制臺(tái)中輸入命令A(yù):\LoopApp.exe”后按回車。此時(shí)就使用EOS應(yīng)用程序文件LoopApp.exe創(chuàng)建了一個(gè)應(yīng)用程序進(jìn)程,由于此進(jìn)程執(zhí)行了一個(gè)死循環(huán),所以此進(jìn)程不會(huì)結(jié)束執(zhí)行,除非關(guān)閉虛擬機(jī)。.此時(shí)按Ctrl+F2切換到Console-2”,然后輸入命令pt”后按回車。輸出的信息如圖 15-4

所示。其中ID為31的進(jìn)程就是應(yīng)用程序進(jìn)程,ID為33的線程就是應(yīng)用程序進(jìn)程的主線程。.輸入命令Vm1”后按回車,可以查看系統(tǒng)進(jìn)程中虛擬地址描述符的信息。輸出的信息如圖6所示。與圖15-3比較可知,3號(hào)描述符所包含的一個(gè)虛擬頁(yè)即為應(yīng)用程序進(jìn)程的句柄表,13號(hào)描述符所包含的兩個(gè)虛擬頁(yè)即為應(yīng)用程序進(jìn)程主線程的堆棧。.輸入命令Vm31”后按回車,可以查看應(yīng)用程序進(jìn)程中虛擬地址描述符的信息。輸出的信息如圖7所示。圖7:使用pt命令查看有應(yīng)用程序運(yùn)行時(shí)進(jìn)程和線程的信息。

$OSLabPC-licropuftVirtualPC200?IActionEAitCDfloppyHelpCOMSOLE-Z(PressCtrl+Fl^FBtoswitchconsolewindou.,.)Z7 Y Z4 Uniting 1 Qx8G018Z6D28 V 24 Uaitlng 1 0x8001BZ6D33 N 8 Ready 31 Qx8O01E29C>un1TotalUpnfrom655360to65740?.(OxAOOOOOOO-OxAOVFFFFF)IttUadInclude1VpnFrom655360to655360.COxAOOOGOOO-OxAQQOOFFF)ZttUadInclude2UpnFrom655361to655362.COxAOOOlOOO-OxAOOOZFFF)3ttUadInclude1UpnFron655363to655363.(OxAOG03G0O-0xA00O3FFF)4ItUadIncludeZUp力From655365to655366.COxAOOOSOOO-OxAO0e6FFF)5ttUadIncludeZUpnFrom655367to655368.COxAOOOVOOO-OxAOOOBFFF)6ttUadInclude2UpnFron655369to655370.COxAOO0900O-0xA00OAFFF)7#UadIncludeZUp力From655371to655372.COxAOOOBOOO-OxACGOCFFD8ttUadInclude2UpnFrom655373to655374.COxAOGODOOO-OxAOOeEFFF)9ttUadInclude2UpnFron655375to655376.COxAOOOFOOO-OxAOOlOFFF)IQttUadIncludeZUpnFron65537?to655378.(OxAO011O0O-QxAOOlZrFF)liftUadIncludeZUpnFram655375to655380.(GbcAOO13O0O-GxA0ei4FFF)12#UadInclude2UpnFrom655381to655382?(0xA0015OOO-OxA0O16FFF)13#UadIncludeZUpnFron655383to655384.(OxAO017OOO-QxAOOlBFFF)TotaIUpnCount:204B.AllocatedUpnCount:24,FreeUpnCount:2024.>||■■一H?.圖8:創(chuàng)建了一個(gè)應(yīng)用程序進(jìn)程后,系統(tǒng)進(jìn)程中虛擬地址描述符的信息。JlLUbU1 MJUIIbI1.U?AllocatedUpnCount:24.FreeUpnCount:Z0Z4.Dun31TotalUpnfrom16to524271.COx10000-&x?FFEFFFF)IttUadInclude5UpnFrom10Z4to10Z8.(0x400000-0x404FFF)TotaIUpnCount:524256.AllocatedUpnCountJ5.FreeUpnCount:524251.圖9:使用Vm”命令查看應(yīng)用程序進(jìn)程虛擬地址描述符的結(jié)果。在進(jìn)程的4G邏輯地址空間中,應(yīng)用程序進(jìn)程可以自行管理低 2G的用戶空間。從圖15-6中的信息可以得知,低2G勺用戶空間又被分為了三部分:0X00000000-0X0000FFFF由16個(gè)虛擬頁(yè)構(gòu)成的64KB#態(tài)空間,用于捕捉對(duì)空指針的非法訪問。0X00010000-0X7FFEFFFF由虛擬地址描述符管理的動(dòng)態(tài)空間,用于存儲(chǔ)應(yīng)用程序進(jìn)程的代碼和數(shù)據(jù)。圖15-6顯示應(yīng)用程序進(jìn)程的代碼和數(shù)據(jù)占用了此空間中的 5個(gè)虛擬頁(yè),并且是用從應(yīng)用程序的基址0x00400000起始的。0x7FFF0000-0x7FFFFFFF由16個(gè)虛擬頁(yè)構(gòu)成的64K廂態(tài)空間,用于捕捉對(duì)空指針的非法訪問。為了加深對(duì)進(jìn)程邏輯地址空間的理解,可以在控制臺(tái)1至控制臺(tái) 7中都執(zhí)行命令”A:\LoopApp.exe",從而讓應(yīng)用程序創(chuàng)建7個(gè)進(jìn)程,然后在控制臺(tái)8中執(zhí)行“pt“、“vm”等命令,查看系統(tǒng)進(jìn)程和應(yīng)用程序進(jìn)程的虛擬地址描述符。3.5在系統(tǒng)進(jìn)程中分配虛擬頁(yè)和釋放虛擬頁(yè)接下來(lái),在vm命令函數(shù)中添加分配虛擬頁(yè)和釋放虛擬頁(yè)的代碼,單步調(diào)試管理虛擬頁(yè)的方法。首先,按照下面的步驟修改 vm命令的源代碼:.使用OSLab打開本實(shí)驗(yàn)文件夾中的vm.c文件(將文件拖動(dòng)到OSLab窗口中釋放即可打開)。此文件中有一個(gè)修改后的ConsoleCmdVMi數(shù),主要是在原有代碼的后面增加了分配虛擬頁(yè)和釋放物理頁(yè)的代碼。.使用vm.c文件中ConsoleCmdVMi數(shù)的函數(shù)體替換ke/sysproc.c文件中ConsoleCmdVMi數(shù)的函數(shù)體。.按F7生成修改后的EOSKernel項(xiàng)目。.按F5啟動(dòng)調(diào)試。.待EOSB動(dòng)完畢,在EO醛制臺(tái)中輸入命令 vm1”后按回車。命令執(zhí)行的結(jié)果會(huì)同時(shí)轉(zhuǎn)儲(chǔ)在“輸出”窗口中,內(nèi)容如圖15-7所示。嘗試說明分配虛擬頁(yè)或者釋放虛擬頁(yè)后虛擬地址描述符以及物理存儲(chǔ)器的變化情況。<OSLabPC-licrospftVirtualPC2007IActionEAitCDFloppyHelpCONSOLE-1(PressCtr1+F1T8toswitchconsolewindow...)ZeroedPhysicalPageCount:0.FreePhysica1PageCount:?1Z6.FreeWsbaseaddress:OxA00Q3OOO.Size:0x10004litUadIncludeUpnFron655360to655360.(0XAOOG00OQ-OxAGOOOFFF)ZttUadIncludeUpnFroti655361to65536Z.(OxA00O10OQ-OxAOOOSFFF)3#UadIncludeUpnFron655365to655366.(OxA0O05O0O-OxAO0O6FFF)"UadIncludeUpnFron65536?to655368.(0XA0OG7OQQ-OxAGOQBFFF)SttUadIncludeUp力Frow655369to655370.(OxA0OO9OOQ-OxAOOOAFFF)64UadIncludeUpnFron655371to655372.(OxAOOOBOOO-GxAOOOCFFF)7ttUadIncludeUpnFron655373to655374,(OxAGOODOOQ-OxAOOQEFFF)a#UadIncludeUpnFrow655375to655376.(QxAQOOFOOQ-OxAOOlOFFF)UadIncludeUpnFron655377to655378.(OxAOOllOOO-OxAOOlZFFF)10ttUadInclude2UpnFron*655379to655380.C0XAOO13O0O-OxAOOHFFF)llilWadInclude2UpnFroh655381to655382.(OxAOOlSOOO-OxAOOlGFFDAllocatedUpnCount:21.FreeUpnCount:Z0Z74ZeroedPhysicalFa*jeCount:0.FreePhysicalPageCount:71Z6.I繼上tuuj0aI圖io命令執(zhí)行情況TotalVpnfrom655360to657407.(0xA0000000-0xA07FFFFF)1#VadInclude1VpnFrom655360to655360.(0xA0000000-0xA0000FFF)2#VadInclude2VpnFrom655361to655362.(0xA0001000-0xA0002FFF)3#VadInclude2VpnFrom655365to655366.(0xA0005000-0xA0006FFF)4#VadInclude 2 VpnFrom 655367to655368. (0xA0007000-0xA0008FFF)5#VadInclude 2 VpnFrom 655369to655370. (0xA0009000-0xA000AFFF)6#VadInclude 2 VpnFrom 655371to655372. (0xA000B000-0xA000CFFF)7#VadInclude 2 VpnFrom 655373to655374. (0xA000D000-0xA000EFFF)8#VadInclude2VpnFrom655375to655376.(0xA000F000-0xA0010FFF)9#VadInclude2VpnFrom655377to655378.(0xA0011000-0xA0012FFF)10#VadInclude2VpnFrom655379to655380.(0xA0013000-0xA0014FFF)11#VadInclude2VpnFrom655381to655382.(0xA0015000-0xA0016FFF)TotalVpnCount:2048.AllocatedVpnCount:21.FreeVpnCount:2027.ZeroedPhysicalPageCount:0.FreePhysicalPageCount:7126.NewVM'sbaseaddress:0xA0003000.Size:0x1000.1#VadInclude1VpnFrom655360to655360.(0xA0000000-0xA0000FFF)2#VadInclude2VpnFrom655361to655362.(0xA0001000-0xA0002FFF)3#VadInclude1VpnFrom655363to655363.(0xA0003000-0xA0003FFF)4#VadInclude2VpnFrom655365to655366.(0xA0005000-0xA0006FFF)5#VadInclude 2 VpnFrom 655367to655368. (0xA0007000-0xA0008FFF)6#VadInclude 2 VpnFrom 655369to655370. (0xA0009000-0xA000AFFF)7#VadInclude 2 VpnFrom 655371to655372. (0xA000B000-0xA000CFFF)8#VadInclude 2 VpnFrom 655373to655374. (0xA000D000-0xA000EFFF)9#VadInclude2VpnFrom655375to655376.(0xA000F000-0xA0010FFF)10#VadInclude2VpnFrom655377to655378.(0xA0011000-0xA0012FFF)11#VadInclude2VpnFrom655379to655380.(0xA0013000-0xA0014FFF)12#VadInclude2VpnFrom655381to655382.(0xA0015000-0xA0016FFF)AllocatedVpnCount:22.FreeVpnCount:2026.ZeroedPhysicalPageCount:0.FreePhysicalPageCount:7126.FreeVM'sbaseaddress:0xA0003000.Size:0x1000.1#VadInclude1VpnFrom655360to655360.(0xA0000000-0xA0000FFF)2#VadInclude2VpnFrom655361to655362.(0xA0001000-0xA0002FFF)3#VadInclude2VpnFrom655365to655366.(0xA0005000-0xA0006FFF)4#VadInclude 2 VpnFrom 655367to655368. (0xA0007000-0xA0008FFF)5#VadInclude 2 VpnFrom 655369to655370. (0xA0009000-0xA000AFFF)6#VadInclude 2 VpnFrom 655371to655372. (0xA000B000-0xA000CFFF)7#VadInclude 2 VpnFrom 655373to655374. (0xA000D000-0xA000EFFF)8#VadInclude2VpnFrom655375to655376.(0xA000F000-0xA0010FFF)9#VadInclude2VpnFrom655377to655378.(0xA0011000-0xA0012FFF)10#VadInclude2VpnFrom655379to655380.(0xA0013000-0xA0014FFF)11#VadInclude2VpnFrom655381to655382.(0xA0015000-0xA0016FFF)AllocatedVpnCount:21.FreeVpnCount:2027.ZeroedPhysicalPageCount:0.FreePhysicalPageCount:7126.圖15-7:分配虛擬頁(yè)或者釋放虛擬頁(yè)后虛擬地址描述符及物理存儲(chǔ)器的變化情況。.在ke/sysproc.c文件的ConsoleCmdVMl!數(shù)中,在調(diào)用MmAllocateVirtualMemory函數(shù)的代碼行(第 1082行)添加一個(gè)斷點(diǎn),在調(diào)用 MmFreeVirtualMemory函數(shù)的代碼行(第 1147行)添加一個(gè)斷點(diǎn)。.按F5啟動(dòng)調(diào)試。.待EOSB動(dòng)完畢,在EO醛制臺(tái)中輸入命令Vm1”后按回車。tOSLabFC-MicrpsoftVxrtualPC2007 tOSLabFC-MicrpsoftVxrtualPC2007 匚|fX^,tOSLabFC-MicrpsoftVxrtualPC2007 tOSLabFC-MicrpsoftVxrtualPC2007 匚|fX^,IActionEAitCDfloppyHelpCONSOLE-1(PressCtr1+F1"FBtoswitchconsolewindow.,.)UelcometoEOSshell>um1TotalUpnfrom655360to65740?.(QxAOOOOOttO-GxA0?FFFFF)litUadInclude1UpmFrom655360to655360.(OxAOOOOOOO-OxAOOOOFFF)ZttUadInclude2UpnFrom655361to655362.(OxAOQQlQGG-QxAGOOZFFF)3ftUadIncludeZUpnFron655365to655366.(OxAGO05000-QxAQQOftFFF)4ttUadIncludeZUpmFrom655367to655368.CQxAOOOVOOO-OxAOOOSFFF)5ttUadEncLude2UpnFrom655369to655370.(GxAO0099G0-0XA00OAFFF)6ttUadIncludeZUp力From655371to655372.(OxAOOOBOOO-QxAQQOCFFF)7ttUadInclude2UpnFrom655373to655374.CQxAOOODOOO-OxAOOOEFFF)IlttUadIncludeZUpnFrom655375to655376.(OxRQMF。。。-0XA001OFFF)SttUadIncludeZUpnFrom655377to655378.(OxAGO11000-0XA0Q12FFF)10#UadInclude2UpnFrom655373to655380.(0xAOO13OOO-OxA0O14FFF)111*UadInclude2UpnFrom655381to655382?(0xA0015GOG-OxA0O16FFF)TotalUpnCount:2048.AllocatedUpnCount:21.FreeUpnCount:20Z74ZeroedPhysicalPageCount;0.FreePhysicalPageCount:?1Z6.圖11輸入命令Vm1”4.vm命令開始執(zhí)行后,會(huì)在調(diào)用 MmAllocateVirtualMemory函數(shù)的代碼行處中斷。此時(shí)要注意參數(shù)BaseAddress和RegionSize初始化的值。按F11調(diào)試進(jìn)入MmAllocateVirtualMemory函圖11進(jìn)入MmAllocateVirtualMemory函數(shù)前進(jìn)入函數(shù)后:2.2.按F10單步調(diào)試MmFreeVirtualMemory函數(shù)的執(zhí)行過程,嘗試回答下面的問題:TOC\o"1-5"\h\z監(jiān)視 ▼甲X名稱 值OVOID*) 0*用???或口Regioi^izt (TSIZE.TD 0x^0006aleJ< :兒二——1] 出|留翎|*杳旌舷1國(guó)岷I|圖12進(jìn)入MmAllocateVirtualMemory函數(shù)后5.按F10單步調(diào)試MmAllocateVirtualMemory函數(shù)的執(zhí)行過程,嘗試回答下面的問題:(1)分配的虛擬頁(yè)的起始地址是多少?分配的虛擬頁(yè)的數(shù)量是多少?它們和參數(shù)BaseAddress和RegionSize初始化的值有什么樣的關(guān)系?(2)分配虛擬頁(yè)的同時(shí)有為虛擬頁(yè)映射實(shí)際的物理頁(yè)嗎?這是由哪個(gè)參數(shù)決定的?(3)分配的虛擬頁(yè)是在系統(tǒng)地址空間 (高2G還是在用戶地址空間 (低2G)?這是由哪個(gè)參數(shù)決定的?(4)參考MiReserveAddressRegion函數(shù)的定義和注釋,說明該函數(shù)的功能。繼續(xù)調(diào)試釋放虛擬頁(yè)的過程:答:(1)分配的虛擬頁(yè)的起始地址是 0xa0003000,分配的虛擬頁(yè)的數(shù)量是 1,BaseAddress和RegionSize初始化的值是期望保留或者提交的地址區(qū)域的起始地址和大?。?2)分配虛擬頁(yè)的同時(shí)有為虛擬頁(yè)映射實(shí)際的物理頁(yè),這是由第三個(gè)參數(shù) AllocationType決定的;(3)分配的虛擬頁(yè)是在系統(tǒng)地址空間(高 2G),這是由第四個(gè)參數(shù)SystemVirtual決定的;4)MiReserveAddressRegion函數(shù)的功能是保留一段虛擬地址區(qū)域。1.按F5繼續(xù)執(zhí)行,會(huì)在調(diào)用MmFreeVirtualMemory函數(shù)的代碼行處中斷。此時(shí)要注意參數(shù)BaseAddress和RegionSize初始化的值。按F11調(diào)試進(jìn)入MmFreeVirtualMemory函數(shù)。OSLabPC-JxcrospftVirtualPC2007ActionEditCDfloppyHelpCONSOLE-1(PressCtr1+F1T8toswitchconsolewindow...JFreePhysicalPageCount:71Z6.NeuUMJsbaseaddress:0xA0OO3GOO,Size:0x1000.IttUadIncludeUpnFrom655360to655360.(OxA0000000-GxAOOOOFFF)Z"UadIncludeUpnFron655361to65536Z.(0XAOOO100O-0XAO002FFF)3ItUadIncludeUpnFron655363to655363.(OxAQOO30O0-0XAO0O3FFF)UadIncludeUpnFrom655365to655366.(OxA0O05O0O-0xAOOG6FFF)5球UadIncludeUpnFron655367to655368.(0XA0OG7G0O-0XAO0OBFFF)6ttUadIncludeUpnFron655369to655370.(OxAQ00900Q-OxAOOQAFFF)7ttUadIncludeUpnFrom655371to655372.(OxAOOOBOOO-GxAOOOCFFF)UadIncludeUpnFrom655373to655374.(OxAGGODOGG-0XAO0QEFFF)9"UadIncludeUpnFron655375to655376.(OxAQOOFOOQ-OxAOOlQFFF)10#UadIncludeZUpriFron65537?1to655378.(OxAOOllOOO--0xA0012FFF>litIUadInclude;ZUpriFromi655373?tot655380.(0xA0013000-OxAOOHFFF)12t1UadIncludeZUpriFrom655381,toi65538Z.(OxA0015000--0xA0016FFDAllocatedUpnCount?FreeUp力Count:20Z6.ZeroedPhysicalFa*jeCount:0.FreePhysicalPageCount:71Z6. 2▼9u圖13進(jìn)入MmFreeVirtualMemory函數(shù)[事查膜果”事峻結(jié)檢閱皿就緒圖14進(jìn)入MmFreeVirtualMemory函數(shù)后本次釋放的虛擬地址是多少?釋放的虛擬頁(yè)是之前分配的虛擬頁(yè)嗎?參考MiFindReservedAddressRegion函數(shù)、MiFreeAddressRegion函數(shù)和MiDecommitPages函數(shù)的定義和注釋,說明這些函數(shù)的功能。答:(1)本次釋放的虛擬地址是 0xa0003000,是之前分配的虛擬頁(yè);(2)MiFindReservedAddressRegion函數(shù)用于查找已保留地址區(qū)域,如果目標(biāo)區(qū)域非已保留區(qū)域則返回失敗,MiFreeAddressRegion函數(shù)用于釋放已保留地址區(qū)域和MiDecommitPages函數(shù)用于釋放映射在連續(xù)虛擬頁(yè)框上的物理頁(yè)框。結(jié)束此次調(diào)試后,繼續(xù)按照下列要求修改ConsoleCmdVMi數(shù)的源代碼,加深對(duì)虛擬頁(yè)分配和釋放過程的理解:嘗試在調(diào)用MmAllocateVirtualMemory函數(shù)時(shí)將RegionSize參數(shù)的值設(shè)置為PAGE_SIZE+1或者PAGE_SIZE*2+1觀察輸出”窗口中轉(zhuǎn)儲(chǔ)的信息,并說明申請(qǐng)?zhí)摂M內(nèi)存的大小與實(shí)際分配的大小之間的關(guān)系,以及分配的虛擬內(nèi)存大小會(huì)對(duì)分配的虛擬地址產(chǎn)生什么樣的影響。將“輸出”窗口中轉(zhuǎn)儲(chǔ)的信息保存在文本文件中。(見3.5wenben1)嘗試在調(diào)用MmAllocateVirtualMemory函數(shù)時(shí)將BaseAddress參數(shù)的值設(shè)置為已經(jīng)被占用的虛擬內(nèi)存,例如0xA0000000,觀察“輸出”窗口中轉(zhuǎn)儲(chǔ)的信息。將“輸出”窗口中轉(zhuǎn)儲(chǔ)的信息保存在文本文件中。見3.5_2嘗試在調(diào)用MmAllocateVirtualMemory函數(shù)時(shí)將RegionSize參數(shù)的值設(shè)置為PAGE_SIZE*Z將BaseAddress參數(shù)的值設(shè)置為0xA0017004,觀察輸出“窗口中轉(zhuǎn)儲(chǔ)的信息,并說明申請(qǐng)?zhí)摂M內(nèi)存的大小與實(shí)際分配的大小之間的關(guān)系,以及申請(qǐng)的虛擬地址會(huì)對(duì)分配的虛擬內(nèi)存大小產(chǎn)生什么樣的影響。將“輸出”窗口中轉(zhuǎn)儲(chǔ)的信息保存在文本文件中。見3.5_33.6在應(yīng)用程序進(jìn)程中分配虛擬頁(yè)和釋放虛擬頁(yè)要求創(chuàng)建一個(gè)EOSZ用程序,并編寫代碼完成下列功能:.調(diào)用API函數(shù)VirtualA110c ,分配一個(gè)整型變量所需的空間, 并使用一個(gè)整型變量的指針指向這個(gè)空間。.修改整型變量的值為0XFFFFFFFE在修改前輸出整型變量的值,在修改后再輸出整型變量的值。.調(diào)用API函數(shù)Sleep,等待10秒鐘。.調(diào)用API函數(shù)VirtualFree,釋放之前分配的整型變量的空間。.進(jìn)入死循環(huán),這樣應(yīng)用程序就不會(huì)結(jié)束。3.6.2測(cè)試方法.代碼修改完畢后,按F7生成EOSZ用程序項(xiàng)目。.按F5啟動(dòng)調(diào)試,應(yīng)用程序自動(dòng)執(zhí)行后輸出的結(jié)果可以參照?qǐng)D 15所示。.在應(yīng)用程序分配虛擬頁(yè)后,利用10秒后才釋放虛擬頁(yè)的間隙, 可以在控制臺(tái) 2中執(zhí)行命令“vm31”,查看此時(shí)應(yīng)用程序進(jìn)程的虛擬地址描述符信息;在應(yīng)用程序釋放虛擬頁(yè)后,可以在控制臺(tái) 2中再次執(zhí)行命令 “vm31”,查看此時(shí)應(yīng)用程序進(jìn)程的虛擬地址描述符信息。輸出的結(jié)果可以參照?qǐng)D15-9所示。OSLabPC-BicrosuftVirtualPC200?IActionEAitCDfloppyHelpCONSOLE-1(PressCtr1+F1"FBtoswitchconsolewindow.,.)UelcometoEOSshell>AutorurA:\E0SApp.exeAllocate4bytesvirtualmemoryatGxlOOOG.Uirtualmemoryoriginalualue:0x0Uirtualmemoryneuualue:GxFFFFFFFFUaitfor10secondReleaseuirtualmemorysuccess!Endlessloop!圖15:在應(yīng)用程序進(jìn)程中分配虛擬頁(yè)和釋放虛擬頁(yè)■OSLabFC-MicrpsoftVxrtualPC2007 匚| 國(guó)?IActionEAitCDfloppyHelpC0MS0LE-2(PressCtr1+F1"FBtoswitchconsolewindow.,.)Ue1conetoEOSshell>um31TotalUpnfrom16to524Z71.(Ox10000-Ox?FFEFFFF)litUadInclude1ZUpnFrom10Z4to1035.C0x400000-0x40BFFF)TotalUpnCount:5Z4Z56.AllocatedUpnCount:1Z.FreeUpnCount:524244.圖16:分配虛擬頁(yè)后和釋放虛擬頁(yè)tOSLabFC-MicrosoftVirtualPC200T 匠| 區(qū)IActionEAitCDfloppyHelpCONSOLE-2(PressCtrl+F1*F8toswitchcon^o1euindourr.)UeleonetoEOSshell>un31TotalUpnfrom16to524271.(0x10000-OxVFFEFFFF)IttUadInclude1ZUpnFrom10Z4to1035.(0x400000-0x40BFFF)TotaIUpnCount:5Z4Z56.AllocatedUpnCount:1Z.FreeUpnCount:524244.圖17:分配虛擬頁(yè)后和釋放虛擬頁(yè)后,應(yīng)用程序進(jìn)程的虛擬地址描述符信息3.6.3提示API函數(shù)VirtualAlloc 定義在api/eosapi.c文件的第48行。此API函數(shù)主要調(diào)用了EO的核函數(shù)MmAllocateVirtualMemory。在EOSZ用程序中調(diào)用函數(shù)VirtualAlloc時(shí),除了使用MEM_RESERVEC外,還必須使用MEM_COMMSfe。API函數(shù)VirtualFree定義在api/eosapi.c文件的第70行。此API函數(shù)主要調(diào)用了EO的核函數(shù)MmFreeVirtualMemory。在EOSZ

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論