版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
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é)院2017年10月30日實(shí)驗(yàn)7物理存儲(chǔ)器與進(jìn)程邏輯地址空間的管理1 .實(shí)驗(yàn)?zāi)康呐c要求通過查看物理存儲(chǔ)器的使用情況,并練習(xí)分配和回收物理內(nèi)存,從而掌握物理存儲(chǔ)器的管理方法。通過查看進(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)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ǔ)器信息的。在閱讀的過程中需要注意下面幾點(diǎn):在統(tǒng)計(jì)輸出物理存儲(chǔ)器信息之前要關(guān)閉中斷,之后要打開中斷,這樣可以防止在命令執(zhí)行的過程中有其它線程分配或者釋放物理頁。全局變量MiTotalPageFrameCount保存了物理頁的總數(shù)。每個(gè)物理頁的大小是4KB由宏P(guān)AGE_SIZ定義。全局變量MiZeroedPageCount和MiFreePageCount分別
3、保存了零頁和空閑頁的數(shù)量。計(jì)算已用物理頁數(shù)量的方法是:物理頁總數(shù)減去零頁數(shù)量,再減去空閑頁數(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后按回車。觀察命令執(zhí)行的結(jié)果,如圖1所示,可以了解當(dāng)前物理存儲(chǔ)器的使用情況。OSLabPC-BicrosuftVirtualPC200?圖i:pm命令的執(zhí)行結(jié)果3.3 分配物理頁和釋放物理頁接下來,在pm命令函數(shù)中添加分配物理頁和釋放物理頁的代碼,單步調(diào)試管理物理頁的方法。按照下面的步驟
4、修改pm命令的源代碼:1 .使用OSLab打開本實(shí)驗(yàn)文件夾中的pm.c文件(將文件拖動(dòng)到OSLab窗口中釋放即可打開)。此文件中有一個(gè)修改后的ConsoleCmdPhysicalMemory函數(shù),主要是在原有代碼的后面增加了分配物理頁和釋放物理頁的代碼。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后按回車。觀察命令執(zhí)行的結(jié)果,如圖2所示,嘗試
5、說明分配物理頁或者釋放物理頁后物理存儲(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:分配物理頁或者釋放物理頁后物理存儲(chǔ)器的變化情況。按照下面的步驟調(diào)試分配物理頁和釋放物理頁的過程: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后按回車。5 .pm令開始執(zhí)行后,會(huì)在調(diào)用MiAllocateAnyPages函數(shù)的代碼行處中斷,按F11調(diào)試進(jìn)入MiAllocateAnyPages函數(shù)。6 .按F10單步調(diào)試MiAllocateAnyPages函數(shù)的執(zhí)行過程,嘗試回答下面的問題:(1)本次分配的物理頁的數(shù)量是多少?分配的物理頁的頁框號(hào)是多少?(2)物理頁是從空閑頁鏈表中分配的?還是從零頁鏈表中分配的?(3)哪一行語句減少了空閑頁的數(shù)量?哪一行語句將剛剛分配的物理頁由空閑狀態(tài)修改為忙狀態(tài)?(4)繪制MiAllocateAnyP
8、ages函數(shù)的流程圖。答:(1)本次分配的物理頁的數(shù)量是1,分配的物理頁的頁框號(hào)是0x409;(2)物理頁是從空閑頁鏈表中分配的,;(3)第226行MiFreePageListHead=MiGetPfnDatabaseEntry(Pfn)->Next;和第227行MiFreePageCount-;減少了空閑頁的數(shù)量,第229行將剛剛分配的物理頁由空閑狀態(tài)修改為忙狀態(tài);(4)中斷禁止】事由,白由仙Pitt,*監(jiān)視名稱一L值NuiTiber0tPages0x1MiFreeFageC口utltOx1bd5表是否夠分血>-啊從零'鏈我分配|舊蛻站束MiAllocateAnyPage
9、s函數(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圖3MiAllocateA
10、nyPages函數(shù)監(jiān)視和堆棧繼續(xù)調(diào)試釋放物理頁的過程:1 .按F5繼續(xù)執(zhí)行,會(huì)在調(diào)用MiFreePages函數(shù)的代碼行處中斷,按F11調(diào)試進(jìn)入MiFreePages函數(shù)。2 .按F10單步調(diào)試MiFreePages函數(shù)的執(zhí)行過程,嘗試回答下面的問題:(1)本次釋放的物理頁的數(shù)量是多少?釋放的物理頁的頁框號(hào)是多少?釋放的物理頁是之前分配的物理頁嗎?(2)釋放的物理頁是被放入了空閑頁鏈表中?還是零頁鏈表中?(3)繪制MiFreePages函數(shù)的流程圖。答:(1)本次釋放的物理頁的數(shù)量是1,釋放的物理頁的頁框號(hào)0x409,釋放的物理頁是之前分配的物理頁;(2)釋放的物理頁被放入了空閑頁鏈表中;(3)
11、見下圖:修諛物理頁的狀態(tài)為空闈井播入空閑嵯表如a:%17闈;ri:他占MiFreePages函數(shù)的流程圖圖4MiFreePages函數(shù)監(jiān)視和堆棧(問題:兩次一加一減?)結(jié)束此次調(diào)試。繼續(xù)修改p喻令的源代碼,嘗試在調(diào)用MiAllocateAnyPages函數(shù)時(shí)分配多個(gè)物理頁,然后在調(diào)用MiFreePages函數(shù)時(shí)將分配的多個(gè)物理頁釋放,并練習(xí)調(diào)試這兩個(gè)函數(shù)在分配多個(gè)物理頁和釋放多個(gè)物理頁時(shí)執(zhí)行的過程。3.4閱讀控制臺(tái)命令“vH相關(guān)的源代碼,并查看其執(zhí)行的結(jié)果閱讀ke/sysproc.c文件中第959行的ConsoleCmdVM!數(shù),學(xué)習(xí)VM'命令是如何統(tǒng)計(jì)并輸出進(jìn)程的虛擬地址描述符信息的
12、。在閱讀的過程中需要注意下面幾點(diǎn):與“pm”命令輸出的是整個(gè)系統(tǒng)的物理存儲(chǔ)器的使用情況不同,Vm”命令輸出的是某個(gè)進(jìn)程的虛擬地址描述符信息,所以Vm”命令使用了一個(gè)參數(shù)一一進(jìn)程ID,用來指定一個(gè)進(jìn)程。這個(gè)進(jìn)程既可以是系統(tǒng)進(jìn)程,也可以是用戶進(jìn)程。在統(tǒng)計(jì)輸出指定進(jìn)程的虛擬地址描述符信息之前要關(guān)閉中斷,之后要打開中斷,這樣可以防止在命令執(zhí)行的過程中有其它線程分配或者釋放虛擬頁。EO舞作系統(tǒng)白進(jìn)程有4G勺虛擬地址空間,但并不是所有的虛擬地址空間都使用虛擬地址描述符來管理,有一些地址空間是靜態(tài)的,還有一些地址空間由其他的動(dòng)態(tài)方式來管理(例如系統(tǒng)內(nèi)存池)。進(jìn)程4GI擬地址空間中由虛擬地址描述符所管理空間的
13、低地址和高地址是固定的,在這段地址空間中,如果有虛擬頁被占用,就會(huì)使用虛擬地址描述符來標(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”后按回車?!皃t”命令可以輸出當(dāng)前系統(tǒng)中的進(jìn)程列表,其中系統(tǒng)進(jìn)程的ID為1。圖5輸入命令“pt”3 .在EO醛制臺(tái)中輸入命令Vm1”后按回車。觀察命令執(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)程中由虛擬地址描述符所管理的虛擬頁只會(huì)分配給進(jìn)程的句柄表(句柄表占用一個(gè)虛擬頁)和線程的堆棧(堆棧占用兩個(gè)虛擬頁)。結(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è)虛擬頁即為系統(tǒng)進(jìn)程的句柄表,而2到11號(hào)這10個(gè)描述符所分別包含的兩個(gè)虛擬頁即為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)程中虛擬地址描述符的信息:1,在項(xiàng)目管理器”窗口
18、中雙擊Floppy.img文件,使用FloppylmageEditor工具打開此軟盤鏡像。2,將本實(shí)驗(yàn)文件夾中的LoopApp.exe文件添加到軟盤鏡像的根目錄中(將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”后按回車。此時(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”后按回車。輸出的信息如圖15-4所示。其中ID為31的進(jìn)程就是應(yīng)用程序進(jìn)程,ID為33的線程就是應(yīng)用程序進(jìn)程的主線程。7 .輸入命令vm1”后按回車,可以查看系統(tǒng)進(jìn)程中虛擬地址描述符的信息。輸出的信息如圖6所示。與圖15-3比較可知,3號(hào)描述符所包含的一個(gè)虛擬頁即為應(yīng)用程序進(jìn)程的句柄表,13號(hào)描述符所包含的兩個(gè)虛擬頁即為應(yīng)用程序進(jìn)程主線程的堆棧。8 .輸入命令Vm31”后按回車,可以查看應(yīng)用程序進(jìn)程中虛擬地址描述符的信息。輸出的信息如圖7所示。圖7:使用pt命令查
20、看有應(yīng)用程序運(yùn)行時(shí)進(jì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的用戶空間。從圖15-6中的信息可以得知,低2G勺用戶空間又被分為了三部分:0X00000000-0X0000FFFF由16個(gè)虛擬頁構(gòu)成的64KB#態(tài)空間,用于捕捉對(duì)空指針的非法訪問。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īng)用程序的基址0x00400000起始的。0x7FFF0000-0x7FFFFFFF由16個(gè)虛擬頁構(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)程中分配虛擬頁和釋放虛擬頁接下來,在vm
26、命令函數(shù)中添加分配虛擬頁和釋放虛擬頁的代碼,單步調(diào)試管理虛擬頁的方法。首先,按照下面的步驟修改vm命令的源代碼:1 .使用OSLab打開本實(shí)驗(yàn)文件夾中的vm.c文件(將文件拖動(dòng)到OSLab窗口中釋放即可打開)。此文件中有一個(gè)修改后的ConsoleCmdVMi數(shù),主要是在原有代碼的后面增加了分配虛擬頁和釋放物理頁的代碼。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”后按回車。命令執(zhí)行的結(jié)果
27、會(huì)同時(shí)轉(zhuǎn)儲(chǔ)在輸出”窗口中,內(nèi)容如圖15-7所示。嘗試說明分配虛擬頁或者釋放虛擬頁后虛擬地址描述符以及物理存儲(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:分配虛擬頁或者釋放虛擬頁后虛擬地址描述符及物理存儲(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”后按回車。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命令開始執(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名稱值OVOID*)0*用???或口Regioiizt(TSIZE.TD0x0006ale
43、J<:兒二1出|留翎|*杳旌舷1國岷I|圖12進(jìn)入MmAllocateVirtualMemory函數(shù)后5.按F10單步調(diào)試MmAllocateVirtualMemory函數(shù)的執(zhí)行過程,嘗試回答下面的問題:(1)分配的虛擬頁的起始地址是多少?分配的虛擬頁的數(shù)量是多少?它們和參數(shù)BaseAddress和RegionSize初始化的值有什么樣的關(guān)系?(2)分配虛擬頁的同時(shí)有為虛擬頁映射實(shí)際的物理頁嗎?這是由哪個(gè)參數(shù)決定的?(3)分配的虛擬頁是在系統(tǒng)地址空間(高2G還是在用戶地址空間(低2G)?這是由哪個(gè)參數(shù)決定的?(4)參考MiReserveAddressRegion函數(shù)的定義和注釋,說明該函
44、數(shù)的功能。繼續(xù)調(diào)試釋放虛擬頁的過程:答:(1)分配的虛擬頁的起始地址是0xa0003000,分配的虛擬頁的數(shù)量是1,BaseAddress和RegionSize初始化的值是期望保留或者提交的地址區(qū)域的起始地址和大小;(2)分配虛擬頁的同時(shí)有為虛擬頁映射實(shí)際的物理頁,這是由第三個(gè)參數(shù)AllocationType決定的;(3)分配的虛擬頁是在系統(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í)行過程,嘗試回答下面的問題:(1)本次釋放的虛擬地址是多少?釋放的虛擬頁是之前分配的虛擬頁嗎?(2)參考MiFindReser
49、vedAddressRegion函數(shù)、MiFreeAddressRegion函數(shù)和MiDecommitPages函數(shù)的定義和注釋,說明這些函數(shù)的功能。答:(1)本次釋放的虛擬地址是0xa0003000,是之前分配的虛擬頁;(2)MiFindReservedAddressRegion函數(shù)用于查找已保留地址區(qū)域,如果目標(biāo)區(qū)域非已保留區(qū)域則返回失敗,MiFreeAddressRegion函數(shù)用于釋放已保留地址區(qū)域和MiDecommitPages函數(shù)用于釋放映射在連續(xù)虛擬頁框上的物理頁框。結(jié)束此次調(diào)試后,繼續(xù)按照下列要求修改ConsoleCmdVMi數(shù)的源代碼,加深對(duì)虛擬頁分配和釋放過程的理解:1 .
50、嘗試在調(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)2 .嘗試在調(diào)用MmAllocateVirtualMemory函數(shù)時(shí)將BaseAddress參數(shù)的值設(shè)置為已經(jīng)被占用的虛擬內(nèi)存,例如0XA0000000,觀察輸出”窗口中轉(zhuǎn)儲(chǔ)的信息。將輸出"窗口中轉(zhuǎn)儲(chǔ)的信息保存在文本文件中。見3.5_
51、23 .嘗試在調(diào)用MmAllocateVirtualMemory函數(shù)時(shí)將RegionSize參數(shù)的值設(shè)置為PAGE_SIZE*2將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)程中分配虛擬頁和釋放虛擬頁3.6.1 要求創(chuàng)建一個(gè)EOSZ用程序,并編寫代碼完成下列功能: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)用程序分配虛擬頁后,利用10秒后才釋放虛擬頁的間隙,可以在控制臺(tái)2中執(zhí)行命令Vm31”,查看此時(shí)應(yīng)用程序進(jìn)程的虛擬地址描述符信息;在應(yīng)用程序釋放虛擬頁后,可以在控制臺(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)程中分配虛擬頁和釋放虛擬頁OSLabFC-MicrpsoftVxrtualPC2007匚|國IActionEAitCDfloppyHelpC0MS0LE-2(PressCtr1+F1"FBtoswitchconsolewindow.,.)Ue1conetoEOSshell>um31TotalUpnfrom16to524Z71.(Ox10000-Ox?FFEFFFF)litUadInclude1ZUpnFrom10Z4to1035.C0x400000-0x40BFFF
55、)TotalUpnCount:5Z4Z56.AllocatedUpnCount:1Z.FreeUpnCount:524244.圖16:分配虛擬頁后和釋放虛擬頁tOSLabFC-MicrosoftVirtualPC200T匠|區(qū)IActionEAitCDfloppyHelpCONSOLE-2(PressCtrl+F1*F8toswitchcono1euindourr.)UeleonetoEOSshell>un31TotalUpnfrom16to524271.(0x10000-OxVFFEFFFF)IttUadInclude1ZUpnFrom10Z4to1035.(0x400000-0x40BFFF)TotaIUpnCount:5Z4Z56.AllocatedUpnCount:1Z.FreeUpnCount:524244.圖17:分配虛擬頁后和釋放虛擬頁后,應(yīng)用程序進(jìn)程的虛擬地址描述符信息3.6.3提示1 .API函數(shù)VirtualA110c定義在api/eosapi.c文件的第48行。此API函數(shù)主要調(diào)用了EOS核函數(shù)MmAllocateV
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 單位管理制度范例匯編【職工管理】十篇
- 《市場(chǎng)進(jìn)入和效率》課件
- DBJ51-T 040-2021 四川省工程建設(shè)項(xiàng)目招標(biāo)代理操作規(guī)程
- 超高層商住樓轉(zhuǎn)換層施工方案#模板工程#鋼筋工程#混凝土工程
- 《小數(shù)點(diǎn)移動(dòng)》課件2
- 《寶馬銷售流程》課件
- 《電動(dòng)力學(xué)chapter》課件
- 印刷包裝行業(yè)市場(chǎng)營銷經(jīng)驗(yàn)分享
- 電腦設(shè)備銷售員工作總結(jié)
- 玩具模型銷售工作總結(jié)
- 運(yùn)動(dòng)神經(jīng)元病小講課
- 工會(huì)的財(cái)務(wù)管理制度〔13篇〕
- 新版醫(yī)務(wù)人員法律法規(guī)知識(shí)培訓(xùn)課件
- 2024年土地市場(chǎng)研究分析服務(wù)協(xié)議
- 物業(yè)管理公文寫作培訓(xùn)
- 2023醫(yī)療質(zhì)量安全核心制度要點(diǎn)釋義(第二版)對(duì)比版
- 家庭教育大講堂實(shí)施方案
- 部編版《道德與法治》四年級(jí)下冊(cè)教材解讀與分析文檔
- 2024-2030年中國機(jī)場(chǎng)跑道異物碎片(FOD)檢測(cè)系統(tǒng)行業(yè)市場(chǎng)發(fā)展趨勢(shì)與前景展望戰(zhàn)略研究報(bào)告
- 學(xué)校體育學(xué)智慧樹知到答案2024年湖南科技大學(xué)
- 英語完形填空練習(xí)題20篇
評(píng)論
0/150
提交評(píng)論