




下載本文檔
版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(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)專(zhuān)業(yè)班級(jí)指導(dǎo)教師院系名稱(chēng)計(jì)算機(jī)與信息學(xué)院2017年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)原理閱讀本書(shū)第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)OSLab。2 .新建一個(gè)
2、EOSKernel項(xiàng)目。3.2 閱讀控制臺(tái)命令"pnf相關(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ò)程中有其它線(xiàn)程分配或者釋放物理頁(yè)。全局變量MiTotalPageFrameCount保存了物理頁(yè)的總數(shù)。每個(gè)物理頁(yè)的大小是4KB由宏P(guān)AGE_SIZ定義。全局變量MiZeroedPageCount和MiFreePageCount分別
3、保存了零頁(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)建的EOSKernel項(xiàng)目。2 .按F5啟動(dòng)調(diào)試。3 .待eosb動(dòng)完畢,在eoss制臺(tái)中輸入命令"pm后按回車(chē)。觀察命令執(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è)的方法。按照下面的步驟
4、修改pm命令的源代碼:1 .使用OSLab打開(kāi)本實(shí)驗(yàn)文件夾中的pm.c文件(將文件拖動(dòng)到OSLab窗口中釋放即可打開(kāi))。此文件中有一個(gè)修改后的ConsoleCmdPhysicalMemory函數(shù),主要是在原有代碼的后面增加了分配物理頁(yè)和釋放物理頁(yè)的代碼。2 .使用pm.c文件中ConsoleCmdPhysicalMemory函數(shù)的函數(shù)體替換ke/sysproc.c文件中ConsoleCmdPhysicalMemory函數(shù)的函數(shù)體。3 .按F7生成修改后的EOSKernel項(xiàng)目。4 .按F5啟動(dòng)調(diào)試。5 .待eosb動(dòng)完畢,在eo的制臺(tái)中輸入命令pm后按回車(chē)。觀察命令執(zhí)行的結(jié)果,如圖2所示,嘗試
5、說(shuō)明分配物理頁(yè)或者釋放物理頁(yè)后物理存儲(chǔ)器的變化情況。COSLabFC-MicropuftVirtualPC2007匚ILfxIActionEAitCDfloppyHelpCONSOLE-1(PressCtrl+FlFBtoswitchconsolewind。*.)UelcometoEOSshell>pnPageCount:8176,MemoryCount:8176*4096=33488896Byte*ZeroedPageCount:0.FreePageCount:71Z6.UsedPageCount;1050.xK/HKitAfterAllocateOnePageZeroedPageCo
6、unt:0.FreePageCount:7125.UsedPageCourt:1051.xxMXMMAfterFreeOnePagehxxhxhZeroedPageCount:0.FreePageCount:7126.UsedPageCount:105G.圖2:分配物理頁(yè)或者釋放物理頁(yè)后物理存儲(chǔ)器的變化情況。按照下面的步驟調(diào)試分配物理頁(yè)和釋放物理頁(yè)的過(guò)程:1 .結(jié)束之前的調(diào)試。2 .在ke/sysproc.c文件的ConsoleCmdPhysicalMemory函數(shù)中,在調(diào)用MiAllocateAnyPages函數(shù)的代碼行(第1103行)添加一個(gè)斷點(diǎn),在調(diào)用MiFreePages函數(shù)的代碼行(
7、第1115行)添加一個(gè)斷點(diǎn)。3 .按F5啟動(dòng)調(diào)試。4 .待EOSB動(dòng)完畢,在EO醛制臺(tái)中輸入命令pm后按回車(chē)。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è)鏈表中分配的?(3)哪一行語(yǔ)句減少了空閑頁(yè)的數(shù)量?哪一行語(yǔ)句將剛剛分配的物理頁(yè)由空閑狀態(tài)修改為忙狀態(tài)?(4)繪制MiAllocateAnyP
8、ages函數(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);(4)中斷禁止】事由,白由仙Pitt,*監(jiān)視名稱(chēng)一L值NuiTiber0tPages0x1MiFreeFageC口utltOx1bd5表是否夠分血>-啊從零'鏈我分配|舊蛻站束MiAllocateAnyPage
9、s函數(shù)的流程圖qX調(diào)用堆棧名稱(chēng)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圖3MiAllocateA
10、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單步調(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)
11、見(jiàn)下圖:修諛物理頁(yè)的狀態(tài)為空闈井播入空閑嵯表如a:%17闈;ri:他占MiFreePages函數(shù)的流程圖圖4MiFreePages函數(shù)監(jiān)視和堆棧(問(wèn)題:兩次一加一減?)結(jié)束此次調(diào)試。繼續(xù)修改p喻令的源代碼,嘗試在調(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)命令“vH相關(guān)的源代碼,并查看其執(zhí)行的結(jié)果閱讀ke/sysproc.c文件中第959行的ConsoleCmdVM!數(shù),學(xué)習(xí)VM'命令是如何統(tǒng)計(jì)并輸出進(jìn)程的虛擬地址描述符信息的
12、。在閱讀的過(guò)程中需要注意下面幾點(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)程,也可以是用戶(hù)進(jìn)程。在統(tǒng)計(jì)輸出指定進(jìn)程的虛擬地址描述符信息之前要關(guān)閉中斷,之后要打開(kāi)中斷,這樣可以防止在命令執(zhí)行的過(guò)程中有其它線(xiàn)程分配或者釋放虛擬頁(yè)。EO舞作系統(tǒng)白進(jìn)程有4G勺虛擬地址空間,但并不是所有的虛擬地址空間都使用虛擬地址描述符來(lái)管理,有一些地址空間是靜態(tài)的,還有一些地址空間由其他的動(dòng)態(tài)方式來(lái)管理(例如系統(tǒng)內(nèi)存池)。進(jìn)程4GI擬地址空間中由虛擬地址描述符所管理空間的
13、低地址和高地址是固定的,在這段地址空間中,如果有虛擬頁(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)完畢,在EO醛制臺(tái)中輸入命令"pt”后按回車(chē)。“pt”命令可以輸出當(dāng)前系統(tǒng)中的進(jìn)程列表,其中系統(tǒng)進(jìn)程的ID為1。圖5輸入命令“pt”3 .在EO醛制臺(tái)中輸入命令Vm1”后按回車(chē)。觀察命令執(zhí)行的結(jié)果,如圖15-3所示,可以了解系統(tǒng)進(jìn)程的虛擬地址描述符信息。OSLabPC-licrospftVirtualPC2007ActionEditCDFloppyHelpCONSOL
14、E-1(PressCtr1+F1T8toswitchconsolewindow.)人Z4¥Z4Uaiting10X80018Z5D25V24Waiting10x80018Z6D26¥24Uaiting10X8OO1826DZ7YZ4Uaiting10X80018Z6D28¥24Waiting10X8OO18Z6D1TotalUpnfron655360to657407.(OxAOQOOOQO-0xA07FFFFD1«UadIncludeUpnFrom655360to65536。.(0XA0O000O0-OxAOOOOFFF)ZUUadIncludeUp力F
15、roti655361to65536Z.(OxAQOOlOOQ-OXAO0O2FFF)3ttUadIncludeUpnFron655365to655366.(OxA0O05OOO-0xAOOO6FFF)UadIncludeUpnFron655367to655368.(0xA0OO70oe-OxAOOQBFFF)UadIncludeUpnFrow655369to6553704(QxAQ00900Q-OxAOOOAFFF)UadIncludeUpnFron655371to655372.(OxAOOOBOOO-OxAOOOCFFF)7ttUadIncludeUpnFron655373to655374,
16、(0XAOO0D000-OxAOOGEFFF)a#UadIncludeUp力From655375to655376.(OxAQOOFOOQ-OxA001OFFF)SttUadIncludeUpnFron655377to655378.(OxAOOllOOO-OxAGOlZFFF)10#UadInclude2UpnFrom655379to655380.(0xA0O13O0O-0xAOO14FFF)llflWadInclude2UpnFrom655381to655382.(0XAOO15OQO-OxAOOlGFFF)TotaLUpnCount:2046»AllocatedUpnCount:Z
17、L14>_FreeUi)nCount:202?.圖6:使用Vm”命令查看系統(tǒng)進(jìn)程虛擬地址描述符的結(jié)果系統(tǒng)進(jìn)程中由虛擬地址描述符所管理的虛擬頁(yè)只會(huì)分配給進(jìn)程的句柄表(句柄表占用一個(gè)虛擬頁(yè))和線(xiàn)程的堆棧(堆棧占用兩個(gè)虛擬頁(yè))。結(jié)合之前優(yōu)”命令輸出的進(jìn)程和線(xiàn)程信息可知,當(dāng)前系統(tǒng)中只有1個(gè)系統(tǒng)進(jìn)程以及10個(gè)系統(tǒng)線(xiàn)程,所以在圖15-3中,1號(hào)描述符所包含的一個(gè)虛擬頁(yè)即為系統(tǒng)進(jìn)程的句柄表,而2到11號(hào)這10個(gè)描述符所分別包含的兩個(gè)虛擬頁(yè)即為10個(gè)系統(tǒng)線(xiàn)程的堆棧。可以按照下面的步驟執(zhí)行控制臺(tái)命令Vm”,查看當(dāng)創(chuàng)建了一個(gè)應(yīng)用程序進(jìn)程后,系統(tǒng)進(jìn)程和應(yīng)用程序進(jìn)程中虛擬地址描述符的信息:1,在項(xiàng)目管理器”窗口
18、中雙擊Floppy.img文件,使用FloppylmageEditor工具打開(kāi)此軟盤(pán)鏡像。2,將本實(shí)驗(yàn)文件夾中的LoopApp.exe文件添加到軟盤(pán)鏡像的根目錄中(將LoopApp.exe文件拖動(dòng)到FloppylmageEditor窗口中釋放即可)。EOSZ用程序LoopApp.exe的源代碼可以參考本實(shí)驗(yàn)文件夾中的LoopApp.c文件。3.點(diǎn)擊FloppylmageEditor工具欄上的保存按鈕,關(guān)閉該工具。4,按F5啟動(dòng)調(diào)試。5,待EOSB動(dòng)完畢,在EO醛制臺(tái)中輸入命令A(yù):LoopApp.exe”后按回車(chē)。此時(shí)就使用EOS應(yīng)用程序文件LoopApp.exe創(chuàng)建了一個(gè)應(yīng)用程序進(jìn)程,由于此進(jìn)
19、程執(zhí)行了一個(gè)死循環(huán),所以此進(jìn)程不會(huì)結(jié)束執(zhí)行,除非關(guān)閉虛擬機(jī)。6 .此時(shí)按Ctrl+F2切換到Console-2”,然后輸入命令pt”后按回車(chē)。輸出的信息如圖15-4所示。其中ID為31的進(jìn)程就是應(yīng)用程序進(jìn)程,ID為33的線(xiàn)程就是應(yīng)用程序進(jìn)程的主線(xiàn)程。7 .輸入命令vm1”后按回車(chē),可以查看系統(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)程主線(xiàn)程的堆棧。8 .輸入命令Vm31”后按回車(chē),可以查看應(yīng)用程序進(jìn)程中虛擬地址描述符的信息。輸出的信息如圖7所示。圖7:使用pt命令查
20、看有應(yīng)用程序運(yùn)行時(shí)進(jìn)程和線(xiàn)程的信息。$OSLabPC-licropuftVirtualPC200?IActionEAitCDfloppyHelpCOMSOLE-Z(PressCtrl+FlFBtoswitchconsolewindou.,.)Z7YZ4Uniting1Qx8G018Z6D28V24Uaitlng10x8001BZ6D33N8Ready31Qx8O01E29C>un1TotalUpnfrom655360to65740?.(OxAOOOOOOO-OxAOVFFFFF)IttUadInclude1VpnFrom655360to655360.COxAOOOGOOO-OxAQQOO
21、FFF)ZttUadInclude2UpnFrom655361to655362.COxAOOOlOOO-OxAOOOZFFF)3ttUadInclude1UpnFron655363to655363.(OxAOG03G0O-0xA00O3FFF)4ItUadIncludeZUp力From655365to655366.COxAOOOSOOO-OxAO0e6FFF)5ttUadIncludeZUpnFrom655367to655368.COxAOOOVOOO-OxAOOOBFFF)6ttUadInclude2UpnFron655369to655370.COxAOO0900O-0xA00OAFFF)7
22、#UadIncludeZUp力From655371to655372.COxAOOOBOOO-OxACGOCFFD8ttUadInclude2UpnFrom655373to655374.COxAOGODOOO-OxAOOeEFFF)9ttUadInclude2UpnFron655375to655376.COxAOOOFOOO-OxAOOlOFFF)IQttUadIncludeZUpnFron65537?to655378.(OxAO011O0O-QxAOOlZrFF)liftUadIncludeZUpnFram655375to655380.(GbcAOO13O0O-GxA0ei4FFF)12#Ua
23、dInclude2UpnFrom655381to655382«(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)程中虛擬地址描述符的信息。JlLUbU1MJUIIbI1.U«AllocatedUpnCount:24.FreeUpnCount:Z0Z4.Dun31TotalUpnfrom16to5
24、24271.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的用戶(hù)空間。從圖15-6中的信息可以得知,低2G勺用戶(hù)空間又被分為了三部分:0X00000000-0X0000FFFF由16個(gè)虛擬頁(yè)構(gòu)成的64KB#態(tài)空間,用于捕捉對(duì)空指針的非法訪(fǎng)問(wèn)。0X000100
25、00-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ì)空指針的非法訪(fǎng)問(wèn)。為了加深對(duì)進(jìn)程邏輯地址空間的理解,可以在控制臺(tái)1至控制臺(tái)7中都執(zhí)行命令”A:LoopApp.exe",從而讓?xiě)?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
26、命令函數(shù)中添加分配虛擬頁(yè)和釋放虛擬頁(yè)的代碼,單步調(diào)試管理虛擬頁(yè)的方法。首先,按照下面的步驟修改vm命令的源代碼:1 .使用OSLab打開(kāi)本實(shí)驗(yàn)文件夾中的vm.c文件(將文件拖動(dòng)到OSLab窗口中釋放即可打開(kāi))。此文件中有一個(gè)修改后的ConsoleCmdVMi數(shù),主要是在原有代碼的后面增加了分配虛擬頁(yè)和釋放物理頁(yè)的代碼。2 .使用vm.c文件中ConsoleCmdVMi數(shù)的函數(shù)體替換ke/sysproc.c文件中ConsoleCmdVMi數(shù)的函數(shù)體。3 .按F7生成修改后的EOSKernel項(xiàng)目。4 .按F5啟動(dòng)調(diào)試。5 .待EOSB動(dòng)完畢,在EO醛制臺(tái)中輸入命令vm1”后按回車(chē)。命令執(zhí)行的結(jié)果
27、會(huì)同時(shí)轉(zhuǎn)儲(chǔ)在輸出”窗口中,內(nèi)容如圖15-7所示。嘗試說(shuō)明分配虛擬頁(yè)或者釋放虛擬頁(yè)后虛擬地址描述符以及物理存儲(chǔ)器的變化情況。<OSLabPC-licrospftVirtualPC2007IActionEAitCDFloppyHelpCONSOLE-1(PressCtr1+F1T8toswitchconsolewindow.)ZeroedPhysicalPageCount:0.FreePhysica1PageCount:?1Z6.FreeWsbaseaddress:OxA00Q3OOO.Size:0x10004litUadIncludeUpnFron655360to655360.(0XAOO
28、G00OQ-OxAGOOOFFF)ZttUadIncludeUpnFroti655361to65536Z.(OxA00O10OQ-OxAOOOSFFF)3#UadIncludeUpnFron655365to655366.(OxA0O05O0O-OxAO0O6FFF)"UadIncludeUpnFron65536?to655368.(0XA0OG7OQQ-OxAGOQBFFF)SttUadIncludeUp力Frow655369to655370.(OxA0OO9OOQ-OxAOOOAFFF)64UadIncludeUpnFron655371to655372.(OxAOOOBOOO-Gx
29、AOOOCFFF)7ttUadIncludeUpnFron655373to655374,(OxAGOODOOQ-OxAOOQEFFF)a#UadIncludeUpnFrow655375to655376.(QxAQOOFOOQ-OxAOOlOFFF)UadIncludeUpnFron655377to655378.(OxAOOllOOO-OxAOOlZFFF)10ttUadInclude2UpnFron*655379to655380.C0XAOO13O0O-OxAOOHFFF)llilWadInclude2UpnFroh655381to655382.(OxAOOlSOOO-OxAOOlGFFDAl
30、locatedUpnCount:21.FreeUpnCount:Z0Z74ZeroedPhysicalFa*jeCount:0.FreePhysicalPageCount:71Z6.I繼上tuuj0aI圖10命令執(zhí)行情況TotalVpnfrom655360to657407.(0xA0000000-0xA07FFFFF)1#VadInclude1VpnFrom655360to655360.(0xA0000000-0xA0000FFF)2#VadInclude2VpnFrom655361to655362.(0xA0001000-0xA0002FFF)3#VadInclude2VpnFrom6553
31、65to655366.(0xA0005000-0xA0006FFF)4#VadInclude2VpnFrom655367to655368.(0xA0007000-0xA0008FFF)5#VadInclude2VpnFrom655369to655370.(0xA0009000-0xA000AFFF)6#VadInclude2VpnFrom655371to655372.(0xA000B000-0xA000CFFF)7#VadInclude2VpnFrom655373to655374.(0xA000D000-0xA000EFFF)8#VadInclude2VpnFrom655375to655376
32、.(0xA000F000-0xA0010FFF)9#VadInclude2VpnFrom655377to655378.(0xA0011000-0xA0012FFF)10#VadInclude2VpnFrom655379to655380.(0xA0013000-0xA0014FFF)11#VadInclude2VpnFrom655381to655382.(0xA0015000-0xA0016FFF)TotalVpnCount:2048.AllocatedVpnCount:21.FreeVpnCount:2027.ZeroedPhysicalPageCount:0.FreePhysicalPage
33、Count:7126.NewVM'sbaseaddress:0xA0003000.Size:0x1000.1#VadInclude1VpnFrom655360to655360.(0xA0000000-0xA0000FFF)2#VadInclude2VpnFrom655361to655362.(0xA0001000-0xA0002FFF)3#VadInclude1VpnFrom655363to655363.(0xA0003000-0xA0003FFF)4#VadInclude2VpnFrom655365to655366.(0xA0005000-0xA0006FFF)5#VadInclud
34、e2VpnFrom655367to655368.(0xA0007000-0xA0008FFF)6#VadInclude2VpnFrom655369to655370.(0xA0009000-0xA000AFFF)7#VadInclude2VpnFrom655371to655372.(0xA000B000-0xA000CFFF)8#VadInclude2VpnFrom655373to655374.(0xA000D000-0xA000EFFF)9#VadInclude2VpnFrom655375to655376.(0xA000F000-0xA0010FFF)10#VadInclude2VpnFrom
35、655377to655378.(0xA0011000-0xA0012FFF)11#VadInclude2VpnFrom655379to655380.(0xA0013000-0xA0014FFF)12#VadInclude2VpnFrom655381to655382.(0xA0015000-0xA0016FFF)AllocatedVpnCount:22.FreeVpnCount:2026.ZeroedPhysicalPageCount:0.FreePhysicalPageCount:7126.FreeVM'sbaseaddress:0xA0003000.Size:0x1000.1#Vad
36、Include1VpnFrom655360to655360.(0xA0000000-0xA0000FFF)2#VadInclude2VpnFrom655361to655362.(0xA0001000-0xA0002FFF)3#VadInclude2VpnFrom655365to655366.(0xA0005000-0xA0006FFF)4#VadInclude2VpnFrom655367to655368.(0xA0007000-0xA0008FFF)5#VadInclude2VpnFrom655369to655370.(0xA0009000-0xA000AFFF)6#VadInclude2Vp
37、nFrom655371to655372.(0xA000B000-0xA000CFFF)7#VadInclude2VpnFrom655373to655374.(0xA000D000-0xA000EFFF)8#VadInclude2VpnFrom655375to655376.(0xA000F000-0xA0010FFF)9#VadInclude2VpnFrom655377to655378.(0xA0011000-0xA0012FFF)10#VadInclude2VpnFrom655379to655380.(0xA0013000-0xA0014FFF)11#VadInclude2VpnFrom655
38、381to655382.(0xA0015000-0xA0016FFF)AllocatedVpnCount:21.FreeVpnCount:2027.ZeroedPhysicalPageCount:0.FreePhysicalPageCount:7126.圖15-7:分配虛擬頁(yè)或者釋放虛擬頁(yè)后虛擬地址描述符及物理存儲(chǔ)器的變化情況。1 .在ke/sysproc.c文件的ConsoleCmdVME數(shù)中,在調(diào)用MmAllocateVirtualMemory函數(shù)的代碼行(第1082行)添加一個(gè)斷點(diǎn),在調(diào)用MmFreeVirtualMemory函數(shù)的代碼行(第1147行)添加一個(gè)斷點(diǎn)。2 .按F5啟動(dòng)調(diào)試
39、。3 .待EOSB動(dòng)完畢,在EO醛制臺(tái)中輸入命令vm1”后按回車(chē)。tOSLabFC-MicrpsoftVxrtualPC2007匚|fX,IActionEAitCDfloppyHelpCONSOLE-1(PressCtr1+F1"FBtoswitchconsolewindow.,.)UelcometoEOSshell>um1TotalUpnfrom655360to65740?.(QxAOOOOOttO-GxA0?FFFFF)litUadInclude1UpmFrom655360to655360.(OxAOOOOOOO-OxAOOOOFFF)ZttUadInclude2UpnFr
40、om655361to655362.(OxAOQQlQGG-QxAGOOZFFF)3ftUadIncludeZUpnFron655365to655366.(OxAGO05000-QxAQQOftFFF)4ttUadIncludeZUpmFrom655367to655368.CQxAOOOVOOO-OxAOOOSFFF)5ttUadEncLude2UpnFrom655369to655370.(GxAO0099G0-0XA00OAFFF)6ttUadIncludeZUp力From655371to655372.(OxAOOOBOOO-QxAQQOCFFF)7ttUadInclude2UpnFrom65
41、5373to655374.CQxAOOODOOO-OxAOOOEFFF)IlttUadIncludeZUpnFrom655375to655376.(OxRQMF。-0XA001OFFF)SttUadIncludeZUpnFrom655377to655378.(OxAGO11000-0XA0Q12FFF)10#UadInclude2UpnFrom655373to655380.(0xAOO13OOO-OxA0O14FFF)111*UadInclude2UpnFrom655381to655382«(0xA0015GOG-OxA0O16FFF)TotalUpnCount:2048.Alloc
42、atedUpnCount:21.FreeUpnCount:20Z74ZeroedPhysicalPageCount;0.FreePhysicalPageCount:?1Z6.圖11輸入命令vm1”4.vm命令開(kāi)始執(zhí)行后,會(huì)在調(diào)用MmAllocateVirtualMemory函數(shù)的代碼行處中斷。此時(shí)要注意參數(shù)BaseAddress和RegionSize初始化的值。按F11調(diào)試進(jìn)入MmAllocateVirtualMemory函圖11進(jìn)入MmAllocateVirtualMemory函數(shù)前進(jìn)入函數(shù)后:監(jiān)視甲X名稱(chēng)值OVOID*)0*用。口8或口Regioiizt(TSIZE.TD0x0006ale
43、J<:兒二1出|留翎|*杳旌舷1國(guó)岷I|圖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ù)決定的?(3)分配的虛擬頁(yè)是在系統(tǒng)地址空間(高2G還是在用戶(hù)地址空間(低2G)?這是由哪個(gè)參數(shù)決定的?(4)參考MiReserveAddressRegion函數(shù)的定義和注釋?zhuān)f(shuō)明該函
44、數(shù)的功能。繼續(xù)調(diào)試釋放虛擬頁(yè)的過(guò)程:答:(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 4)MiReserveAddressRegion函數(shù)的功能是保留一段虛擬地址區(qū)域。1 .按F5繼續(xù)執(zhí)行,會(huì)在調(diào)用MmFreeVirtualMemory函數(shù)的代碼行處中斷。此時(shí)要注意參
45、數(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"UadInclu
46、deUpnFron655361to65536Z.(0XAOOO100O-0XAO002FFF)3ItUadIncludeUpnFron655363to655363.(OxAQOO30O0-0XAO0O3FFF)UadIncludeUpnFrom655365to655366.(OxA0O05O0O-0xAOOG6FFF)5球UadIncludeUpnFron655367to655368.(0XA0OG7G0O-0XAO0OBFFF)6ttUadIncludeUpnFron655369to655370.(OxAQ00900Q-OxAOOQAFFF)7ttUadIncludeUpnFrom65537
47、1to655372.(OxAOOOBOOO-GxAOOOCFFF)UadIncludeUpnFrom655373to655374.(OxAGGODOGG-0XAO0QEFFF)9"UadIncludeUpnFron655375to655376.(OxAQOOFOOQ-OxAOOlQFFF)10#UadIncludeZUpriFron65537?1to655378.(OxAOOllOOO-0xA0012FFF>litIUadInclude;ZUpriFromi655373tot655380.(0xA0013000-OxAOOHFFF)12t1UadIncludeZUpriFrom
48、655381,toi65538Z.(OxA0015000-0xA0016FFDAllocatedUpnCount«FreeUp力Count:20Z6.ZeroedPhysicalFa*jeCount:0.FreePhysicalPageCount:71Z6.29u圖13進(jìn)入MmFreeVirtualMemory函數(shù)事查膜果”事峻結(jié)檢閱皿就緒圖14進(jìn)入MmFreeVirtualMemory函數(shù)后2 .按F10單步調(diào)試MmFreeVirtualMemory函數(shù)的執(zhí)行過(guò)程,嘗試回答下面的問(wèn)題:(1)本次釋放的虛擬地址是多少?釋放的虛擬頁(yè)是之前分配的虛擬頁(yè)嗎?(2)參考MiFindReser
49、vedAddressRegion函數(shù)、MiFreeAddressRegion函數(shù)和MiDecommitPages函數(shù)的定義和注釋?zhuān)f(shuō)明這些函數(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è)分配和釋放過(guò)程的理解:1 .
50、嘗試在調(diào)用MmAllocateVirtualMemory函數(shù)時(shí)將RegionSize參數(shù)的值設(shè)置為PAGE_SIZE+1或者PAGE_SIZE*2+1觀察輸出”窗口中轉(zhuǎn)儲(chǔ)的信息,并說(shuō)明申請(qǐng)?zhí)摂M內(nèi)存的大小與實(shí)際分配的大小之間的關(guān)系,以及分配的虛擬內(nèi)存大小會(huì)對(duì)分配的虛擬地址產(chǎn)生什么樣的影響。將輸出”窗口中轉(zhuǎn)儲(chǔ)的信息保存在文本文件中。(見(jiàn)3.5wenben1)2 .嘗試在調(diào)用MmAllocateVirtualMemory函數(shù)時(shí)將BaseAddress參數(shù)的值設(shè)置為已經(jīng)被占用的虛擬內(nèi)存,例如0XA0000000,觀察輸出”窗口中轉(zhuǎn)儲(chǔ)的信息。將輸出"窗口中轉(zhuǎn)儲(chǔ)的信息保存在文本文件中。見(jiàn)3.5_
51、23 .嘗試在調(diào)用MmAllocateVirtualMemory函數(shù)時(shí)將RegionSize參數(shù)的值設(shè)置為PAGE_SIZE*2將BaseAddress參數(shù)的值設(shè)置為0xA0017004,觀察輸出”窗口中轉(zhuǎn)儲(chǔ)的信息,并說(shuō)明申請(qǐng)?zhí)摂M內(nèi)存的大小與實(shí)際分配的大小之間的關(guān)系,以及申請(qǐng)的虛擬地址會(huì)對(duì)分配的虛擬內(nèi)存大小產(chǎn)生什么樣的影響。將輸出"窗口中轉(zhuǎn)儲(chǔ)的信息保存在文本文件中。見(jiàn)3.5_33.6在應(yīng)用程序進(jìn)程中分配虛擬頁(yè)和釋放虛擬頁(yè)3.6.1 要求創(chuàng)建一個(gè)EOSZ用程序,并編寫(xiě)代碼完成下列功能:1 .調(diào)用API函數(shù)VirtualA110c,分配一個(gè)整型變量所需的空間,并使用一個(gè)整型變量的指針指向
52、這個(gè)空間。2 .修改整型變量的值為0XFFFFFFFE在修改前輸出整型變量的值,在修改后再輸出整型變量的值。3 .調(diào)用API函數(shù)Sleep,等待10秒鐘。4 .調(diào)用API函數(shù)VirtualFree,釋放之前分配的整型變量的空間。5 .進(jìn)入死循環(huán),這樣應(yīng)用程序就不會(huì)結(jié)束。3.6.2測(cè)試方法1 .代碼修改完畢后,按F7生成EOSZ用程序項(xiàng)目。2 .按F5啟動(dòng)調(diào)試,應(yīng)用程序自動(dòng)執(zhí)行后輸出的結(jié)果可以參照?qǐng)D15所示。3 .在應(yīng)用程序分配虛擬頁(yè)后,利用10秒后才釋放虛擬頁(yè)的間隙,可以在控制臺(tái)2中執(zhí)行命令Vm31”,查看此時(shí)應(yīng)用程序進(jìn)程的虛擬地址描述符信息;在應(yīng)用程序釋放虛擬頁(yè)后,可以在控制臺(tái)2中再次執(zhí)行命
53、令Vm31”,查看此時(shí)應(yīng)用程序進(jìn)程的虛擬地址描述符信息。輸出的結(jié)果可以參照?qǐng)D15-9所示。OSLabPC-BicrosuftVirtualPC200?IActionEAitCDfloppyHelpCONSOLE-1(PressCtr1+F1"FBtoswitchconsolewindow.,.)UelcometoEOSshell>AutorurA:E0SApp.exeAllocate4bytesvirtualmemoryatGxlOOOG.Uirtualmemoryoriginalualue:0x0Uirtualmemoryneuualue:GxFFFFFFFFUaitfor1
54、0secondReleaseuirtualmemorysuccess!Endlessloop!圖15:在應(yīng)用程序進(jìn)程中分配虛擬頁(yè)和釋放虛擬頁(yè)OSLabFC-MicrpsoftVxrtualPC2007匚|國(guó)IActionEAitCDfloppyHelpC0MS0LE-2(PressCtr1+F1"FBtoswitchconsolewindow.,.)Ue1conetoEOSshell>um31TotalUpnfrom16to524Z71.(Ox10000-Ox?FFEFFFF)litUadInclude1ZUpnFrom10Z4to1035.C0x400000-0x40BFFF
55、)TotalUpnCount:5Z4Z56.AllocatedUpnCount:1Z.FreeUpnCount:524244.圖16:分配虛擬頁(yè)后和釋放虛擬頁(yè)tOSLabFC-MicrosoftVirtualPC200T匠|區(qū)IActionEAitCDfloppyHelpCONSOLE-2(PressCtrl+F1*F8toswitchcono1euindourr.)UeleonetoEOSshell>un31TotalUpnfrom16to524271.(0x10000-OxVFFEFFFF)IttUadInclude1ZUpnFrom10Z4to1035.(0x400000-0x40BFFF)TotaIUpnCount:5Z4Z56.AllocatedUpnCount:1Z.FreeUpnCount:524244.圖17:分配虛擬頁(yè)后和釋放虛擬頁(yè)后,應(yīng)用程序進(jìn)程的虛擬地址描述符信息3.6.3提示1 .API函數(shù)VirtualA110c定義在api/eosapi.c文件的第48行。此API函數(shù)主要調(diào)用了EOS核函數(shù)MmAllocateV
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 吉林省四平市鐵西區(qū)2024-2025學(xué)年七年級(jí)下學(xué)期期末練習(xí)生物試卷(含答案)
- 財(cái)務(wù)會(huì)計(jì)專(zhuān)員崗位職責(zé)要求
- 幼兒園常見(jiàn)傳染病預(yù)防控制課件
- 財(cái)務(wù)會(huì)計(jì)年終工作總結(jié)范文(10篇)
- 土地復(fù)墾措施及其規(guī)劃設(shè)計(jì)教學(xué)課件
- 道德與法治(海南卷)(考試版A3)
- 2025年android音視頻開(kāi)發(fā)面試!這么香的技術(shù)還不快點(diǎn)學(xué)起來(lái)Android篇-andoid視頻秒開(kāi)面試
- 2025年Android事件分發(fā)機(jī)制:面試官你坐啊
- 2024-2025學(xué)年下學(xué)期高一生物滬科版期末必刷常考題之生物進(jìn)化論在不斷發(fā)展
- 部編版五年級(jí)上冊(cè)第一單元《白鷺》教案
- 醫(yī)院護(hù)士辭職申請(qǐng)書(shū)集合六篇(護(hù)士崗位辭職申請(qǐng)書(shū))
- 靜脈注射 Microsoft PowerPoint 演示文稿課件
- 同濟(jì)大學(xué)論文答辯通用PPT模板
- AFC檢測(cè)技術(shù)規(guī)程
- 部編人教版二年級(jí)下學(xué)期數(shù)學(xué)期末學(xué)業(yè)質(zhì)量監(jiān)測(cè)復(fù)習(xí)課堂知識(shí)練習(xí)題
- 餐飲行業(yè)抖音代運(yùn)營(yíng)方案
- 《聰明人和傻子和奴才》 課件
- Fleischner指南解讀
- 建筑工地安全生產(chǎn)百日攻堅(jiān)行動(dòng)實(shí)施方案
- 電廠(chǎng)度電機(jī)維修技術(shù)規(guī)范書(shū)正式
- 年產(chǎn)40萬(wàn)噸甲醇合成工藝設(shè)計(jì)
評(píng)論
0/150
提交評(píng)論