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

文檔簡(jiǎn)介

1、操作系統(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é)院20仃年10 月 30 日實(shí)驗(yàn) 7 物理存儲(chǔ)器與進(jìn)程邏輯地址空間的管理1. 實(shí)驗(yàn)?zāi)康呐c要求 通過(guò)查看物理存儲(chǔ)器的使用情況,并練習(xí)分配和回收物理內(nèi)存,從而掌握物理存儲(chǔ)器的 管理方法。通過(guò)查看進(jìn)程邏輯地址空間的使用情況,并練習(xí)分配和回收虛擬內(nèi)存,從而掌握進(jìn)程邏 輯地址空間的管理方法。2. 實(shí)驗(yàn)原理閱讀本書第 6 章。重點(diǎn)閱讀第 6.3節(jié)和第 6.6 節(jié),了解物理存儲(chǔ)器的管理方式和進(jìn)程邏輯 地址空間的管理方式。3. 實(shí)驗(yàn)內(nèi)容3.1 準(zhǔn)備實(shí)驗(yàn) 按照下面的步驟準(zhǔn)備實(shí)驗(yàn):1. 啟動(dòng) OS

2、Lab。2. 新建一個(gè) EOS Kernel 項(xiàng)目。3.2閱讀控制臺(tái)命令“ pm相關(guān)的源代碼,并查看其執(zhí)行的結(jié)果閱讀ke/sysproc.c 文件中第1059行的ConsoleCmdPhysicalMemory函數(shù),學(xué)習(xí)pm”命令是 如何統(tǒng)計(jì)并輸出物理存儲(chǔ)器信息的。在閱讀的過(guò)程中需要注意下面幾點(diǎn):在統(tǒng)計(jì)輸出物理存儲(chǔ)器信息之前要關(guān)閉中斷,之后要打開(kāi)中斷,這樣可以防止在命令執(zhí) 行的過(guò)程中有其它線程分配或者釋放物理頁(yè)。全局變量MiTotalPageFrameCount保存了物理頁(yè)的總數(shù)。每個(gè)物理頁(yè)的大小是4KB由宏P(guān)AGE_SIZ定義。全局變量 MiZeroedPageCount和MiFreePag

3、eCount分別保存了零頁(yè)和空閑頁(yè)的數(shù)量。 計(jì)算已用物理頁(yè)數(shù)量的方法是:物理頁(yè)總數(shù)減去零頁(yè)數(shù)量,再減去空閑頁(yè)數(shù)量。按照下面的步驟執(zhí)行控制臺(tái)命令“pm”,查看物理存儲(chǔ)器的信息:1. 按F7生成在本實(shí)驗(yàn)3.1中創(chuàng)建的EOS Kernel項(xiàng)目。2. 按F5啟動(dòng)調(diào)試。3. 待EOSB動(dòng)完畢,在EO腔制臺(tái)中輸入命令“ pm”后按回車。觀察命令執(zhí)行的結(jié)果,如圖 1 所示,可以了解當(dāng)前物理存儲(chǔ)器的使用情況。圖i: pm命令的執(zhí)行結(jié)果3.3分配物理頁(yè)和釋放物理頁(yè)接下來(lái),在pm命令函數(shù)中添加分配物理頁(yè)和釋放物理頁(yè)的代碼,單步調(diào)試管理物理頁(yè) 的方法。按照下面的步驟修改pm命令的源代碼:1. 使用OS Lab打開(kāi)本

4、實(shí)驗(yàn)文件夾中的 pm.c文件(將文件拖動(dòng)到 OS Lab窗口中釋放即可打 開(kāi))。此文件中有一個(gè)修改后的 ConsoleCmdPhysicalMemory函數(shù),主要是在原有代碼的后 面增加了分配物理頁(yè)和釋放物理頁(yè)的代碼。2. 使用pm.c文件中ConsoleCmdPhysicalMemory函數(shù)的函數(shù)體替換 ke/sysproc.c 文件中 ConsoleCmdPhysicalMemory 函數(shù)的函數(shù)體。3. 按F7生成修改后的EOS Kernel項(xiàng)目。4. 按F5啟動(dòng)調(diào)試。5. 待EOSB動(dòng)完畢,在E0腔制臺(tái)中輸入命令pm”后按回車。觀察命令執(zhí)行的結(jié)果,如圖2所示,嘗試說(shuō)明分配物理頁(yè)或者釋放物

5、理頁(yè)后物理存儲(chǔ)器的 變化情況。C OS Lab PC - Micropuft Virtual PC 2007匚I L fxI Action EAi t CD floppy HelpCONSOLE-1 (Press Ctrl+FlFB to switch console windou.,.) Ueleone to EOS shell>pnPage Count: 8176,Memory Count: 8176 * 4096 = 33488896 Byte *Zeroed Page Count: 0*Free Page Count: 71Z6.Used Page Count:1050.Afte

6、r Allocate One Page mmZeroed Page Count: GLFree Page Count: 7125.Used Page Court:1051.xxxnxx After Free One Page xxxx対xZeroed Page Count: 0.Free Page Count:7126.Used Page Count: 105G.圖2 :分配物理頁(yè)或者釋放物理頁(yè)后物理存儲(chǔ)器的變化情況。按照下面的步驟調(diào)試分配物理頁(yè)和釋放物理頁(yè)的過(guò)程:1. 結(jié)束之前的調(diào)試。2. 在ke/sysproc.c 文件的 ConsoleCmdPhysicalMemory 函數(shù)中,在調(diào)用

7、MiAllocateAnyPages 函數(shù)的代碼行(第1103行)添加一個(gè)斷點(diǎn),在調(diào)用 MiFreePages函數(shù)的代碼行(第1115行) 添加一個(gè)斷點(diǎn)。3. 按F5啟動(dòng)調(diào)試。4. 待EOSB動(dòng)完畢,在EO腔制臺(tái)中輸入命令 pm”后按回車。5. pm命令開(kāi)始執(zhí)行后,會(huì)在調(diào)用MiAllocateAnyPages函數(shù)的代碼行處中斷,按 F11調(diào)試進(jìn)入MiAllocateAnyPages 函數(shù)。6. 按F10單步調(diào)試MiAllocateAnyPages函數(shù)的執(zhí)行過(guò)程,嘗試回答下面的問(wèn)題:(1) 本次分配的物理頁(yè)的數(shù)量是多少?分配的物理頁(yè)的頁(yè)框號(hào)是多少?(2) 物理頁(yè)是從空閑頁(yè)鏈表中分配的?還是從零頁(yè)

8、鏈表中分配的?(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行MiFreePageCou nt-;減少了空閑頁(yè)的數(shù)量,第 229行將剛剛分配的物理頁(yè)由空閑狀態(tài)修改為 忙狀態(tài);(4)0審、_十產(chǎn):f從空闡震分鏈表是香事奇碇>-

9、叫 從零貞鏈衣甘配、下 S,ir=*-NO_H 屮斷和1嵋除 |feMsmis mxh、宙ti怙就MiAllocateA nyPages 函數(shù)的流程圖監(jiān)觀 4 X昭1調(diào)用堆棧 4 X名稱值名稱_|NuiTib erU tPages M iFre eFagpC i:hjil tUniUnlbdSMi AllocateArLyFagee (NumberOfl'agee=Ux1 F£tlAtray=Uxa0008a50)地址:0x3001 a488C ore ol eCm ilPhys i c:ilM em ory (S t dlLmdl 6=0<2) 地址:UxSULl 1

10、92 e4ICiShellThn-ead爐吐泗泌汛匸血1工1地址:LIkSOOISSEc<J2JF EpTtn-e 注dS t ar tup l:;l 七也址:0:<8001 e2S a ? (:i 地址:i:iki:ii:ii:ii:ii:ii:ii:ii:i i:?c調(diào)試信息;11同查找結(jié)果1 同查找結(jié)果2 廂監(jiān)觀a輸出口斷點(diǎn)廖調(diào)用堆棧就緒行 1T4字 1Ins圖3 MiAllocateA nyPages 函數(shù)監(jiān)視和堆棧繼續(xù)調(diào)試釋放物理頁(yè)的過(guò)程:1. 按F5繼續(xù)執(zhí)行,會(huì)在調(diào)用MiFreePages函數(shù)的代碼行處中斷, 按F11調(diào)試進(jìn)入MiFreePages 函數(shù)。2. 按F10

11、單步調(diào)試MiFreePages函數(shù)的執(zhí)行過(guò)程,嘗試回答下面的問(wèn)題:(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) 見(jiàn)下圖:用的?YES-1修改砌押肛的狀態(tài)為窒»«井播入空HM我頭部7hrvi+f»< ?的返回STATLS_SUCCESSMiFree

12、Pages函數(shù)的流程圖監(jiān)觀1 4 X調(diào)用堆鐵 4 X名稱值名稱丨NumberOfPagesQkIMiFrsePagee (NumberOage*=囂 1 卜 PfstArrtysQ囂aJOOQSeSO)地址;0x8001 aBaTMi Free? ageC ouiitOxlbdBConsoleCmdPhysi calfilemory (51dH:irLdls=0k2)地址:0x8001936cKiShellThread (F ar am e ter=0x0)地址:0x8001852cF spThr e adS t ar tup ()地址:0x8001 e28 a<1電查找結(jié)果1 電查撈結(jié)

13、果m 1購(gòu)脫視11總輸出1衛(wèi)斷點(diǎn)曲調(diào)用堆就J就緒行曲E字1Ins圖4 MiFreePages函數(shù)監(jiān)視和堆棧(問(wè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í)行的過(guò)程。3.4閱讀控制臺(tái)命令“ vm”相關(guān)的源代碼,并查看其執(zhí)行的結(jié)果閱讀ke/sysproc.c 文件中第959行的ConsoleCmdVME數(shù),學(xué)習(xí) Vm”命令是如何統(tǒng)計(jì)并輸 出進(jìn)程的虛擬地址描述符信息的。在閱讀的過(guò)程中需要注意下面

14、幾點(diǎn):與“ pm”命令輸出的是整個(gè)系統(tǒng)的物理存儲(chǔ)器的使用情況不同,Vm”命令輸出的是某個(gè)進(jìn)程的虛擬地址描述符信息,所以“m”命令使用了一個(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)閉中斷,之后要打開(kāi)中斷,這樣可以防止在命令執(zhí)行的過(guò)程中有其它線程分配或者釋放虛擬頁(yè)。E0臊作系統(tǒng)的進(jìn)程有4G的虛擬地址空間,但并不是所有的虛擬地址空間都使用虛擬地址描述符來(lái)管理,有一些地址空間是靜態(tài)的, 還有一些地址空間由其他的動(dòng)態(tài)方式來(lái)管理(例如系統(tǒng)內(nèi)存池)。進(jìn)程4G虛擬地址空間中由虛擬地址描述符所管理空間的低地址和高地址是固定的

15、,在這段地址空間中,如果有虛擬頁(yè)被占用,就會(huì)使用虛擬地址描述符來(lái)標(biāo)識(shí),并放入鏈表中管理。按照下面的步驟執(zhí)行控制臺(tái)命令”vm”,查看系統(tǒng)進(jìn)程的虛擬地址描述符信息:1. 按F5啟動(dòng)調(diào)試。2待EOSB動(dòng)完畢,在E0腔制臺(tái)中輸入命令” pt ”后按回車?!?pt ”命令可以輸出當(dāng)前系 統(tǒng)中的進(jìn)程列表,其中系統(tǒng)進(jìn)程的ID為1。卜OSLab PC -IicrospftVirtual PC 2007K1 Action Edi t CDFloppy HelpCONSOLE-1 (Press Ctrl+F1F8 to switchconso le u indowAUeleone to EOSshe 11>

16、pt茵xxwxHitx Process List (1Process)ID :Systen? Priorityi ThreadCoumti FrinaryThreadID1YZ410ZMSAmn TJiread L ist (10Thread)賊xxxmxxxID !System? !Priority! State !ParentFrocesxID StartAddress2¥0Ready10x800181?CZ9¥Z4Uaiting10X8OO15E9AZ1V24Running1Ox8O018Z6D22Y24Uaiting1Ox8001826DZ3YZ4Uaiting10

17、X8OO1BZ6DV24Uaitlng10X80018Z6D25Y24Uait ing10x8001826DZ6YZ4Uaiting10X8OO1B26D27¥24Waiting10X80018Z6D28>Y24Uaiting10x8001826DV<!1-j U 一丄-圖5輸入命令” pt ”3.在E0腔制臺(tái)中輸入命令 Vm 1”后按回車。觀察命令執(zhí)行的結(jié)果,如圖15-3所示,可以了解系統(tǒng)進(jìn)程的虛擬地址描述符信息??谪蠀^(qū)OS L&b PC - Ixcrospft Virtual PC 2007CONSOLE-1 (Press Ctr 1+F1T8 to swit

18、ch console uindow,.)Action Edit CD Floppy HelpZ4¥Z4Uaiting10X80018Z&D25V24Uniting10x80018260Zb¥24Uaitin1Ox8001B26DZ7¥Z4Uaiting10X80018Z6D28¥24Uait10x800182601Total Upn from65536Q to 6574Q?.(OxAOQOOQOO - 0XA07FFFFF)litUadIncludeUpnFron655360to 655366.(0XA0O000GO -0XAGO00FFF)2

19、ItUadIncludeUpnFron655361to 655362.(OxAQOOlOOO -OxAOOOSFFF)3ttMadIncludeUpnFrom655365to 655366.(0xA0OO5O00 -OxAO0O6FFF)4 ItUadIncludeUpnFrom655367to 655368,(0XA0OO7OO0 -0XAGO0BFFF)5ttMadIncludeUpnFron655369to 655370.(0XAQOO90OQ -OxAOOOAFFF)6UMadIncludeUpnFrom655371to 655372.(0XA0G0BO00 -OxAOOOCFFF)7

20、n血IncludeUpviFrom655373to 655374.(OxA0OODOO0 -OxAOOGEFFF)8 ItyadIncludeUpnFrom655375to 655376.(OXA0OOF0OO -OxAOOlOFFF)9#UadIncludeUpnFrom655377to 655378.(0XA0O11O00 -OxAO012FFF)10# Uad Include 2 Upn From 655379 to 655380(OxAOQlSOOO - OxAOOHFFF) llflInclude 2 Upn From 655381 to 655382. (0xA00150Q0 -

21、OxAOOlbFFF)Tota L Upn Coumt: 204B» Al located Upn Count: 21.Free Upn Count: 202?.IIU圖6 :使用Vm”命令查看系統(tǒng)進(jìn)程虛擬地址描述符的結(jié)果系統(tǒng)進(jìn)程中由虛擬地址描述符所管理的虛擬頁(yè)只會(huì)分配給進(jìn)程的句柄表(句柄表占用一個(gè)虛擬頁(yè))和線程的堆棧(堆棧占用兩個(gè)虛擬頁(yè))。結(jié)合之前pt ”命令輸出的進(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)線程的堆棧??梢园?/p>

22、照下面的步驟執(zhí)行控制臺(tái)命令Vm”,查看當(dāng)創(chuàng)建了一個(gè)應(yīng)用程序進(jìn)程后,系統(tǒng)進(jìn)程和應(yīng)用程序進(jìn)程中虛擬地址描述符的信息:1. 在項(xiàng)目管理器"窗口中雙擊Floppy.img文件,使用FloppylmageEditor工具打開(kāi)此軟盤鏡 像。2. 將本實(shí)驗(yàn)文件夾中的LoopApp.exe文件添加到軟盤鏡像的根目錄中(將 LoopApp.exe文件拖動(dòng)到FloppyImageEditor 窗口中釋放即可)。EOS應(yīng)用程序LoopApp.exe的源代碼可以參考本實(shí)驗(yàn)文件夾中的 LoopApp.c文件。3. 點(diǎn)擊FloppyImageEditor工具欄上的保存按鈕,關(guān)閉該工具。4. 按F5啟動(dòng)調(diào)試。5.

23、 待EOS啟動(dòng)完畢,在EOS控制臺(tái)中輸入命令 A: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ī)。6. 此時(shí)按Ctrl+F2切換到Con sole-2 ”,然后輸入命令pt ”后按回車。輸出的信息如圖15-4所示。其中ID為31的進(jìn)程就是應(yīng)用程序進(jìn)程,ID為33的線程就是應(yīng)用程序進(jìn)程的主線程。7. 輸入命令“m 1 ”后按回車,可以查看系統(tǒng)進(jìn)程中虛擬地址描述符的信息。輸出的信息如 圖6所示。與圖15-3比較可知,3號(hào)描述符所包含的一個(gè)虛擬頁(yè)即為應(yīng)用程序進(jìn)程的句

24、柄表, 13號(hào)描述符所包含的兩個(gè)虛擬頁(yè)即為應(yīng)用程序進(jìn)程主線程的堆棧。8. 輸入命令“m 31”后按回車,可以查看應(yīng)用程序進(jìn)程中虛擬地址描述符的信息。輸出的信 息如圖7所示。»osLab PC -MicrosoftVirtual PC 20071 Action Edi tCDFloppy HelpCOMSOLE-Z(Fress Ctrl+F1F8 to switchconsole uindovi .)Ueleone toEOSshell>ptwmmmmmmm Process List (2Process ) mx xID 1System? 1Priorityi ThreadCou

25、nt1 PrimaryThread IDS nageMane1YZ410ZMXA31N8133A:LoopApp,exe"m" Thread L ist (11Thread) mmxwmxmmID !System? !Priorityi State IParent ProcessID 1StartAddressZVOReady10x9001817CzoYZ4Ua itinq1Qx8O015E9A21VZ4UaitiYif10x8001826D22V24Rinrniiig10x80018Z6D23Y24Uniting1Ox8O01826D24Y24Uaiting10x8001

26、826DZ5YZ4Uniting10X8G01826DZ6YZ4Ua iting1Qx8G018Z6D27VZ4Uniting1Ox8G018Z6D28V24Uniting10x8OO18Z6D33 >_N8Beady310x80QlE29CJ WL.1=圖7 :使用pt命令查看有應(yīng)用程序運(yùn)行時(shí)進(jìn)程和線程的信息。r離 OS Lab FC - WicrQPdft Virtual PC 200?B?1 Action EAi t CDFloppy HelpCOMSOLE-Z (Press Ctr1+F1FB to switch console windou,.)Z72833 >un 1T

27、otal Upn fromZ4Z48655360 toUniting Ualting Ready65740?.131QX8001826D 0x80018Z6D 0X8G01E29C(OxAOOOOOOO - OxA07FFFFF)lit 1 Ztt iJtt4 It 1I fitt 7tt 19tt lOtt11#12#13#Udd Uad Uad Uad Uad Uad Uad Uad UadUadUadUadUadInclude Include ; Inc Lude Include : Include ; Inc Lude Include : Include ; Include :Incl

28、ude lncluide IncludeInclude1 Upn2 Upvt1 Upn Z Upn Z UpvtZ Upn Z Upn2 Up¥i2 UpnUpnUpnUpnUpnZ22ZFron 655360Fron 655361Fron 655363Fron 655365Fron 655367Fron 655368From 655371From 655373Fron 655375i Froni Fromi Fromi Fron65537?655373655381655383655360. 65536Z. 655363 655366 655368.655370 655372 655

29、374.655376i 655378. i 655388.655382. i 655384.OxAOOOOFFF)OxA0002FFF)0XAG0O3FFF)QxA0006Frr)OxAOOOBFFF)0XA00OAFFF) oxAooocFrr) OxAOOOEFFF) 0XA001OFFF)OxAOOlZFFF)COxAOGOOOOO - i COxAOOOlOOO - i (OxAOO036G0 - i COxAOGOSOOO - i COxAOGO7OO0 - i (OxAGOOSQGO - i COxAOOOBOOO - i COxAOOODOOO - i (OxAOOOFQGO -

30、 i (OxAOO11000 - (OxAOO13©00 - OxA0014FFF) (0xA0015OOO - OxA0O16FFF) (OxAOO17000 - QXA0O18FFF)TotaI Upn Count: 2048.Al located Upn Count: 24. Free Upn Count: 2024.II圖&創(chuàng)建了一個(gè)應(yīng)用程序進(jìn)程后,系統(tǒng)進(jìn)程中虛擬地址描述符的信息。JlLU bU 1MJUIIb I1.U «Al located Upn Count: 24.Free Upn Count: 20Z4.>uin 31Total Upn fr

31、om 16 to 524271. COx10000 - &x?FFEFFFF)ltt Uad Include 5 Upn From 10Z4 to 10Z8. (0x400000 - 0x404FFF)TotaI Upn Count: 5Z4Z56.Al located Upn Count J 5*Free Upn Count: 524251.圖9:使用Vm”命令查看應(yīng)用程序進(jìn)程虛擬地址描述符的結(jié)果。在進(jìn)程的4G邏輯地址空間中,應(yīng)用程序進(jìn)程可以自行管理低2G的用戶空間。從圖15-6中的信息可以得知,低 2G的用戶空間又被分為了三部分:OxOOOOOOOO-OxOOOOFFFF由16個(gè)虛

32、擬頁(yè)構(gòu)成的64KB靜態(tài)空間,用于捕捉對(duì)空指針的非法 訪問(wèn)。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)成的64KB靜態(tài)空間,用于捕捉對(duì)空指針的非法 訪問(wèn)。為了加深對(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

33、i'等 命令,查看系統(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命令的源代碼:1. 使用OSLab打開(kāi)本實(shí)驗(yàn)文件夾中的 vm.c文件(將文件拖動(dòng)到 OSLab窗口中釋放即可打開(kāi))。 此文件中有一個(gè)修改后的 ConsoleCmdVI函數(shù),主要是在原有代碼的后面增加了分配虛擬頁(yè)和 釋放物理頁(yè)的代碼。2. 使用vm.c文件中ConsoleCmdVM函數(shù)的函數(shù)體替換ke/sysproc.c 文件中ConsoleCmdVM函數(shù) 的函數(shù)體。3. 按F

34、7生成修改后的EOS Kernel項(xiàng)目。4. 按F5啟動(dòng)調(diào)試。5. 待EOSB動(dòng)完畢,在E0腔制臺(tái)中輸入命令 “m 1 ”后按回車。命令執(zhí)行的結(jié)果會(huì)同時(shí)轉(zhuǎn)儲(chǔ)在 “輸出”窗口中, 內(nèi)容如圖 15-7所示。 嘗試說(shuō)明分配虛擬頁(yè) 或者釋放虛擬頁(yè)后虛擬地址描述符以及物理存儲(chǔ)器的變化情況。OS L&b PC - Ixcrospft Virtual PC 2007Action Edit CD Floppy HelpCONSOLE-1 (Press Ctr 1+F1T8 to switch console uindow,.,) Zeroed Physical Page Count: 0*Free P

35、hys ica1 Page Count: 7126.address: OxA00Q3OOO.Size: 0x1000*lit2 It3tt樹(shù)5 It6tt748 It9#Uad Uad Uad UadUad UadUad Uad UadInclude Include Include Include Include Include Include Include IncludeUpn Upn Upn Upn Upn Upn Upn Upn UpnFron Fron From Fron Fron From From Fron From65536065536165536565536765536965

36、5371655373655375655377to to to to to to to to to655360. 65536Z 655366. 655368. 655370 655372. 655374. 6553?& 655378.(0XAOOOGG0O (OXAQ0O1OO0 (OxA0O05O0O (0XA0OG7OOQ (OxAO0O9OOQ (OxAOOOBOOO (0XA00OD0GQ (OxAOOOFOOQ (OxAOOllOOO0XAOOO0FFF) OxAOOOSFFF) OxAO0O6FFF) OxAGOQBFFF) OxAOOOAFFF) OxAOOOCFFF) 0

37、XA0O0EFFF) OxAOOlQFFF) OxAO012FFF)10# Uad Include 2 Upn From 655379 to 砧5380» (0XAO013O0O - OxAOOHFFF) llil 悶直 Include 2 Upn From 655381 to 655382. (OxAOOlSOOO - OxAOOlbFFDAllocated Upn Count« 21. Free Upn Count: Z0Z7*Zeroed Physical Faqe Count: 0. Free Physical Page Count: ?1Z6,IIU圖10命令執(zhí)行

38、情況Total Vpn from 655360 to 657407. (OxAOOOOOOO - 0xA07FFFFF)1# Vad Include 1 Vpn From 655360 to 655360. (0xA0000000 - 0xA0000FFF) 2# Vad In elude 2 Vpn From 655361 to 655362. (0xA0001000 - 0xA0002FFF) 3# Vad Include 2 Vpn From 655365 to 655366. (0xA0005000 - 0xA0006FFF) 4# Vad Include2Vpn From655367

39、 to 655368.(0xA0007000 - 0xA0008FFF)5# Vad Include2Vpn From655369 to 655370.(0xA0009000 - 0xA000AFFF)6# Vad Include2Vpn From655371 to 655372.(0xA000B000 - 0xA000CFFF)7# Vad Include2Vpn From655373 to 655374.(0xA000D000 - 0xA000EFFF)8# Vad In clude 2 Vpn From 655375 to 655376. (0xA000F000 - 0xA0010FFF

40、) 9# Vad In clude 2 Vpn From 655377 to 655378. (0xA0011000 - 0xA0012FFF) 10# Vad In clude 2 Vpn From 655379 to 655380. (0xA0013000 - 0xA0014FFF) 11# Vad In clude 2 Vpn From 655381 to 655382. (0xA0015000 - 0xA0016FFF) Total Vpn Cou nt: 2048.Allocated Vpn Count: 21.Free Vpn Cou nt: 2027.Zeroed Physica

41、l Page Count: 0.Free Physical Page Count: 7126.New VM's base address: 0xA0003000. Size: 0x1000.1# Vad Include 1 Vpn From 655360 to 655360. (0xA0000000 - 0xA0000FFF)2# Vad Include 2 Vpn From 655361 to 655362. (0xA0001000 - 0xA0002FFF) 3# Vad Include 1 Vpn From 655363 to 655363. (0xA0003000 - 0xA0

42、003FFF) 4# Vad Include 2 Vpn From 655365 to 655366. (0xA0005000 - 0xA0006FFF) 5# Vad Include 2 Vpn From 655367 to 655368. (0xA0007000 - 0xA0008FFF) 6# Vad Include 2 Vpn From 655369 to 655370. (0xA0009000 - 0xA000AFFF) 7# Vad Include 2 Vpn From 655371 to 655372. (0xA000B000 - 0xA000CFFF) 8# Vad Inclu

43、de 2 Vpn From 655373 to 655374. (0xA000D000 - 0xA000EFFF) 9# Vad Include 2 Vpn From 655375 to 655376. (0xA000F000 - 0xA0010FFF) 10# Vad Include 2 Vpn From 655377 to 655378. (0xA0011000 - 0xA0012FFF) 11# Vad Include 2 Vpn From 655379 to 655380. (0xA0013000 - 0xA0014FFF) 12# Vad Include 2 Vpn From 655

44、381 to 655382. (0xA0015000 - 0xA0016FFF) Allocated Vpn Count: 22.Free Vpn Count: 2026.Zeroed Physical Page Count: 0.Free Physical Page Count: 7126.Free VM's base address: 0xA0003000. Size: 0x1000.1# Vad Include 1 Vpn From 655360 to 655360. (0xA0000000 - 0xA0000FFF) 2# Vad Include 2 Vpn From 6553

45、61 to 655362. (0xA0001000 - 0xA0002FFF) 3# Vad Include 2 Vpn From 655365 to 655366. (0xA0005000 - 0xA0006FFF) 4# Vad Include 2 Vpn From 655367 to 655368. (0xA0007000 - 0xA0008FFF) 5# Vad Include 2 Vpn From 655369 to 655370. (0xA0009000 - 0xA000AFFF) 6# Vad Include 2 Vpn From 655371 to 655372. (0xA00

46、0B000 - 0xA000CFFF) 7# Vad Include 2 Vpn From 655373 to 655374. (0xA000D000 - 0xA000EFFF) 8# Vad Include 2 Vpn From 655375 to 655376. (0xA000F000 - 0xA0010FFF) 9# Vad Include 2 Vpn From 655377 to 655378. (0xA0011000 - 0xA0012FFF) 10# Vad Include 2 Vpn From 655379 to 655380. (0xA0013000 - 0xA0014FFF)

47、 11# Vad Include 2 Vpn From 655381 to 655382. (0xA0015000 - 0xA0016FFF) Allocated Vpn Count: 21.Free Vpn Count: 2027.Zeroed Physical Page Count: 0.Free Physical Page Count: 7126.圖15-7 :分配虛擬頁(yè)或者釋放虛擬頁(yè)后虛擬地址描述符及物理存儲(chǔ)器的變化情況。函數(shù)的代1147 行)1. 在ke/sysproc.c 文件的 ConsoleCmdV函數(shù)中,在調(diào)用 MmAllocateVirtualMemory 碼行(第 108

48、2行)添加一個(gè)斷點(diǎn),在調(diào)用 MmFreeVirtualMemory 函數(shù)的代碼行(第 添加一個(gè)斷點(diǎn)。2. 按F5啟動(dòng)調(diào)試。3. 待EOSB動(dòng)完畢,在EO腔制臺(tái)中輸入命令 “m 1”后按回車。 OS Lab PC - WicrQPdft Virtual PC 200?冃岡1 Action EAi t CDFloppy HelpCONSOLE-1 (Press Ctr1+F1FB to switch console window.,.) Ueleone to EOS shell>um 1Total Upn from 655360 to 65740?. (QxAOOUOGOO - GxAOVF

49、FFFF)lttVadIncludeUpvtFron655360to655360.COxAOOOOOOO -OxAOOOOFFF)ZttUadIncludeUpnFron655361to655362.(exAEmieoo -QxAGOOZFFF)3 ItUadIncludeUpnFron655365to655366.(OxAOOOSOOO -QxAQQOftFFF)4ttVadIncludeUpnFron655367to655368.COxAOOO7OO0 -OxAO0O8FFF)5ttUadIncludeUpnFron655369to655370(0x0009900 -0XA00OAFFF)

50、6ttUadIncludeUpnFrom655371to655372.(OxAOOOBOOO -QxAQQOCFFF)7ttVadIncludeUpnFron655373to655374.COxAOOODOOO -OxAOOOEFFF)BitUadIncludeUpnFron655375to655376cexAeooFoeo -0XA001OFFF)3UUadIncludeUpnFroh655377to655378.(OxAGO11000 -0XA0Q12FFF)10# Uad Include 2 Upn From 655373 to 655380. (0xAOO13OOO - OxA0O14

51、FFF) 111* Uad Include 2 Upn From 655381 to 655382« (0xA0015GOG - OxA0O16FFF)Total Upn Count: 2048.Hl located Upn Count: 21.Free Upn Count: 20Z7 4Zeroed Physical Page Count: 0* Free Physical Page Count: ?1Z6.圖11輸入命令 vm 1 ”4. vm命令開(kāi)始執(zhí)行后,會(huì)在調(diào)用MmAllocateVirtualMemory 函數(shù)的代碼行處中斷。此時(shí)要注意參數(shù) BaseAddress 和 R

52、egionSize 初始化的值。按 F11 調(diào)試進(jìn)入 MmAllocateVirtualMemory 函 數(shù)。圖 11 進(jìn)入 MmAllocateVirtualMemory 函數(shù)前進(jìn)入函數(shù)后:圖 12 進(jìn)入 MmAllocateVirtualMemory 函數(shù)后5.按F10單步調(diào)試MmAllocateVirtualMemory 函數(shù)的執(zhí)行過(guò)程,嘗試回答下面的問(wèn)題:(1)分配的虛擬頁(yè)的起始地址是多少?分配的虛擬頁(yè)的數(shù)量是多少?它們和參數(shù)BaseAddress和RegionSize初始化的值有什么樣的關(guān)系?(2)分配虛擬頁(yè)的同時(shí)有為虛擬頁(yè)映射實(shí)際的物理頁(yè)嗎?這是由哪個(gè)參數(shù)決定的? 分配的虛擬頁(yè)是在

53、系統(tǒng)地址空間(高2G還是在用戶地址空間(低2G)?這是由哪個(gè)參數(shù)決定的?(4)參考MiReserveAddressRegion函數(shù)的定義和注釋,說(shuō)明該函數(shù)的功能。繼續(xù)調(diào)試釋放虛擬頁(yè)的過(guò)程:答:(1)分配的虛擬頁(yè)的起始地址是0xa0003000,分配的虛擬頁(yè)的數(shù)量是1,BaseAddress和RegionSize初始化的值是期望保留或者提交的地址區(qū)域的起始地址和大?。唬?) 分配虛擬頁(yè)的同時(shí)有為虛擬頁(yè)映射實(shí)際的物理頁(yè),這是由第三個(gè)參數(shù)Allocati on Type 決定的;(3) 分配的虛擬頁(yè)是在系統(tǒng)地址空間(高2G),這是由第四個(gè)參數(shù) SystemVirtual決定的;(4)MiReserveAddressRegion函數(shù)的功能是保留一段虛擬地址區(qū)域。1. 按F5繼續(xù)執(zhí)行,會(huì)在調(diào)用 MmFreeVirtualMemory函數(shù)的代碼行處中斷。此時(shí)要注意參數(shù)BaseAddr

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 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)論