




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
《操作系統(tǒng)》實驗報告實驗題目物理存儲器與進程邏輯地址空間的管理 學生姓名 lee 學號 專業(yè)班級 指導教師 院系名稱 計算機與信息學院2017年10月30日7物理存儲器與進程邏輯地址空間的管理實驗目的與要求通過查看物理存儲器的使用情況,并練習分配和回收物理內存,從而掌握物理存儲器的管理方法。通過查看進程邏輯地址空間的使用情況,并練習分配和回收虛擬內存,從而掌握進程邏輯地址空間的管理方法。實驗原理閱讀本書第 6章。重點閱讀第6.3節(jié)和第6.6節(jié),了解物理存儲器的管理方式和進程邏輯地址空間的管理方式。實驗內容準備實驗按照下面的步驟準備實驗:啟動OSLab。新建一個EOSKernel項目。閱讀控制臺命令"pm’相關的源代碼,并查看其執(zhí)行的結果閱讀ke/sysproc.c文件中第1059行的ConsoleCmdPhysicalMemory函數,學習pmf命令是如何統(tǒng)計并輸出物理存儲器信息的。在閱讀的過程中需要注意下面幾點:在統(tǒng)計輸出物理存儲器信息之前要關閉中斷,之后要打開中斷,這樣可以防止在命令執(zhí)行的過程中有其它線程分配或者釋放物理頁。全局變量MiTotalPageFrameCount保存了物理頁的總數。每個物理頁的大小是 4KB由宏PAGE_SIZ定義。全局變量MiZeroedPageCount和MiFreePageCount分別保存了零頁和空閑頁的數量。計算已用物理頁數量的方法是:物理頁總數減去零頁數量,再減去空閑頁數量。按照下面的步驟執(zhí)行控制臺命令" pm’,查看物理存儲器的信息:.按F7生成在本實驗3.1中創(chuàng)建的EOSKernel項目。.按F5啟動調試。.待EOSB動完畢,在EOSS制臺中輸入命令"pm’后按回車。觀察命令執(zhí)行的結果,如圖1所示,可以了解當前物理存儲器的使用情況。
OSLabPC-BicrosuftVirtualPC200?圖i:pm’命令的執(zhí)行結果3.3分配物理頁和釋放物理頁接下來,在pm命令函數中添加分配物理頁和釋放物理頁的代碼,單步調試管理物理頁的方法。按照下面的步驟修改 pm命令的源代碼:.使用OSLab打開本實驗文件夾中的pm.c文件(將文件拖動到OSLab窗口中釋放即可打開)。此文件中有一個修改后的ConsoleCmdPhysicalMemory函數,主要是在原有代碼的后面增加了分配物理頁和釋放物理頁的代碼。.使用pm.c文件中ConsoleCmdPhysicalMemory函數的函數體替換ke/sysproc.c文件中ConsoleCmdPhysicalMemory函數的函數體。.按F7生成修改后的EOSKernel項目。.按F5啟動調試。.待EOSB動完畢,在EO的制臺中輸入命令pm'后按回車。觀察命令執(zhí)行的結果,如圖2所示,嘗試說明分配物理頁或者釋放物理頁后物理存儲器的變化情況。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:分配物理頁或者釋放物理頁后物理存儲器的變化情況。按照下面的步驟調試分配物理頁和釋放物理頁的過程:1.結束之前的調試。.在ke/sysproc.c文件的ConsoleCmdPhysicalMemory函數中,在調用MiAllocateAnyPages函數的代碼行(第1103行)添加一個斷點,在調用MiFreePages函數的代碼行(第1115行)添加一個斷點。.按F5啟動調試。.待EOSB動完畢,在EO醛制臺中輸入命令 pm’后按回車。.pm^令開始執(zhí)行后,會在調用 MiAllocateAnyPages函數的代碼行處中斷,按F11調試進入MiAllocateAnyPages函數。.按F10單步調試MiAllocateAnyPages函數的執(zhí)行過程,嘗試回答下面的問題:(1)本次分配的物理頁的數量是多少?分配的物理頁的頁框號是多少?(2)物理頁是從空閑頁鏈表中分配的?還是從零頁鏈表中分配的?(3)哪一行語句減少了空閑頁的數量?哪一行語句將剛剛分配的物理頁由空閑狀態(tài)修改為忙狀態(tài)?(4)繪制MiAllocateAnyPages函數的流程圖。答:(1)本次分配的物理頁的數量是 1,分配的物理頁的頁框號是0x409;(2)物理頁是從空閑頁鏈表中分配的 ,;
(3)第226行MiFreePageListHead=MiGetPfnDatabaseEntry(Pfn)->Next;和第227行MiFreePageCount--;減少了空閑頁的數量,第 229行將剛剛分配的物理頁由空閑狀態(tài)修改為忙狀態(tài);中斷禁止】事由,白由仙Pitt,*監(jiān)視名稱 一L值NuiTiber0tPages 0x1MiFreeFageC口utlt Ox1bd5表是否夠分血>-啊從零'鏈我分配|監(jiān)視名稱 一L值NuiTiber0tPages 0x1MiFreeFageC口utlt Ox1bd5表是否夠分血>-啊從零'鏈我分配|舊蛻站束MiAllocateAnyPages函數的流程圖▼qX調用堆棧名稱MiAllocatwAiiyPagee(NijjiiberOfl'agee=Ux1,,FEhlAtray=Uxa0008a50)地址:0x3001a488CoreoleCmdPhysicalMemoryCStdHandls=0k2)地址:0x800192e4ICiShellThn-ead(Farainwtwrnh口)地址:1:1]-:8001852.2PspThreadStartup0地址:0x8001e2Sa??O地址:口筑口口口口口口口口優(yōu)調試信息)<:] >|朝查找結果1]厘查找結果2]后監(jiān)視圜輸出[0斷點[能調用堆棧就緒行1T4圖3MiAllocateAnyPages 函數監(jiān)視和堆棧繼續(xù)調試釋放物理頁的過程:.按F5繼續(xù)執(zhí)行,會在調用MiFreePages函數的代碼行處中斷, 按F11調試進入MiFreePages函數。.按F10單步調試MiFreePages函數的執(zhí)行過程,嘗試回答下面的問題:(1)本次釋放的物理頁的數量是多少?釋放的物理頁的頁框號是多少?釋放的物理頁是之前分配的物理頁嗎?(2)釋放的物理頁是被放入了空閑頁鏈表中?還是零頁鏈表中?(3)繪制MiFreePages函數的流程圖。答:(1)本次釋放的物理頁的數量是1,釋放的物理頁的頁框號0x409,釋放的物理頁是之前分配的物理頁;(2)釋放的物理頁被放入了空閑頁鏈表中;(3)見下圖:修諛物理頁的狀態(tài)為空闈井播入空閑嵯表如a:%17闈;ri:他占MiFreePages修諛物理頁的狀態(tài)為空闈井播入空閑嵯表如a:%17闈;ri:他占MiFreePages函數的流程圖圖4MiFreePages圖4MiFreePages函數監(jiān)視和堆棧(問題:兩次一加一減????)結束此次調試。繼續(xù)修改pm^令的源代碼,嘗試在調用MiAllocateAnyPages函數時分配多個物理頁,然后在調用 MiFreePages函數時將分配的多個物理頁釋放,并練習調試這兩個函數在分配多個物理頁和釋放多個物理頁時執(zhí)行的過程。3.4閱讀控制臺命令"vm’相關的源代碼,并查看其執(zhí)行的結果閱讀ke/sysproc.c文件中第959行的ConsoleCmdVME數,學習Vmf命令是如何統(tǒng)計并輸出進程的虛擬地址描述符信息的。在閱讀的過程中需要注意下面幾點:與“pm”命令輸出的是整個系統(tǒng)的物理存儲器的使用情況不同, Vm”命令輸出的是某個進程的虛擬地址描述符信息,所以Vm”命令使用了一個參數一一進程ID,用來指定一個進程。這個進程既可以是系統(tǒng)進程,也可以是用戶進程。在統(tǒng)計輸出指定進程的虛擬地址描述符信息之前要關閉中斷,之后要打開中斷,這樣可以防止在命令執(zhí)行的過程中有其它線程分配或者釋放虛擬頁。EO舞作系統(tǒng)白進程有4G勺虛擬地址空間,但并不是所有的虛擬地址空間都使用虛擬地址描述符來管理,有一些地址空間是靜態(tài)的,還有一些地址空間由其他的動態(tài)方式來管理 (例如系統(tǒng)內存池)。進程4GI擬地址空間中由虛擬地址描述符所管理空間的低地址和高地址是固定的, 在這段地址空間中,如果有虛擬頁被占用,就會使用虛擬地址描述符來標識, 并放入鏈表中管理。按照下面的步驟執(zhí)行控制臺命令“ vm”,查看系統(tǒng)進程的虛擬地址描述符信息:.按F5啟動調試。.待EOSB動完畢,在EOS!制臺中輸入命令"pt”后按回車?!皃t”命令可以輸出當前系統(tǒng)中的進程列表,其中系統(tǒng)進程的 ID為1。圖5輸入命令“pt”.在EO醛制臺中輸入命令vm1”后按回車。觀察命令執(zhí)行的結果,如圖15-3所示,可以了解系統(tǒng)進程的虛擬地址描述符信息。■OSLabPC-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)進程虛擬地址描述符的結果系統(tǒng)進程中由虛擬地址描述符所管理的虛擬頁只會分配給進程的句柄表 (句柄表占用一個虛擬頁)和線程的堆棧(堆棧占用兩個虛擬頁)。結合之前 優(yōu)”命令輸出的進程和線程信息可知,當前系統(tǒng)中只有1個系統(tǒng)進程以及10個系統(tǒng)線程,所以在圖15-3中,1號描述符所包含的一個虛擬頁即為系統(tǒng)進程的句柄表,而 2到11號這10個描述符所分別包含的兩個虛擬頁即為10個系統(tǒng)線程的堆棧??梢园凑障旅娴牟襟E執(zhí)行控制臺命令 Vm”,查看當創(chuàng)建了一個應用程序進程后, 系統(tǒng)進程和應用程序進程中虛擬地址描述符的信息:.在項目管理器”窗口中雙擊Floppy.img文件,使用FloppylmageEditor工具打開此軟盤鏡像。.將本實驗文件夾中的LoopApp.exe文件添加到軟盤鏡像的根目錄中(將LoopApp.exe文件拖動到FloppyImageEditor窗口中釋放即可)。 EOS^Z用程序LoopApp.exe的源代碼可以參考本實驗文件夾中的LoopApp.c文件。.點擊FloppyImageEditor工具欄上的保存按鈕,關閉該工具。.按F5啟動調試。.待EOSB動完畢,在EO醛制臺中輸入命令A:\LoopApp.exe”后按回車。此時就使用EOS應用程序文件LoopApp.exe創(chuàng)建了一個應用程序進程,由于此進程執(zhí)行了一個死循環(huán),所以此進程不會結束執(zhí)行,除非關閉虛擬機。.此時按Ctrl+F2切換到Console-2”,然后輸入命令pt”后按回車。輸出的信息如圖 15-4
所示。其中ID為31的進程就是應用程序進程,ID為33的線程就是應用程序進程的主線程。.輸入命令Vm1”后按回車,可以查看系統(tǒng)進程中虛擬地址描述符的信息。輸出的信息如圖6所示。與圖15-3比較可知,3號描述符所包含的一個虛擬頁即為應用程序進程的句柄表,13號描述符所包含的兩個虛擬頁即為應用程序進程主線程的堆棧。.輸入命令Vm31”后按回車,可以查看應用程序進程中虛擬地址描述符的信息。輸出的信息如圖7所示。圖7:使用pt命令查看有應用程序運行時進程和線程的信息。
$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)建了一個應用程序進程后,系統(tǒng)進程中虛擬地址描述符的信息。JlLUbU1 MJUIIbI1.U?AllocatedUpnCount:24.FreeUpnCount:Z0Z4.Dun31TotalUpnfrom16to524271.COx10000-&x?FFEFFFF)IttUadInclude5UpnFrom10Z4to10Z8.(0x400000-0x404FFF)TotaIUpnCount:524256.AllocatedUpnCountJ5.FreeUpnCount:524251.圖9:使用Vm”命令查看應用程序進程虛擬地址描述符的結果。在進程的4G邏輯地址空間中,應用程序進程可以自行管理低 2G的用戶空間。從圖15-6中的信息可以得知,低2G勺用戶空間又被分為了三部分:0X00000000-0X0000FFFF由16個虛擬頁構成的64KB#態(tài)空間,用于捕捉對空指針的非法訪問。0X00010000-0X7FFEFFFF由虛擬地址描述符管理的動態(tài)空間,用于存儲應用程序進程的代碼和數據。圖15-6顯示應用程序進程的代碼和數據占用了此空間中的 5個虛擬頁,并且是用從應用程序的基址0x00400000起始的。0x7FFF0000-0x7FFFFFFF由16個虛擬頁構成的64K廂態(tài)空間,用于捕捉對空指針的非法訪問。為了加深對進程邏輯地址空間的理解,可以在控制臺1至控制臺 7中都執(zhí)行命令”A:\LoopApp.exe",從而讓應用程序創(chuàng)建7個進程,然后在控制臺8中執(zhí)行“pt“、“vm”等命令,查看系統(tǒng)進程和應用程序進程的虛擬地址描述符。3.5在系統(tǒng)進程中分配虛擬頁和釋放虛擬頁接下來,在vm命令函數中添加分配虛擬頁和釋放虛擬頁的代碼,單步調試管理虛擬頁的方法。首先,按照下面的步驟修改 vm命令的源代碼:.使用OSLab打開本實驗文件夾中的vm.c文件(將文件拖動到OSLab窗口中釋放即可打開)。此文件中有一個修改后的ConsoleCmdVMi數,主要是在原有代碼的后面增加了分配虛擬頁和釋放物理頁的代碼。.使用vm.c文件中ConsoleCmdVMi數的函數體替換ke/sysproc.c文件中ConsoleCmdVMi數的函數體。.按F7生成修改后的EOSKernel項目。.按F5啟動調試。.待EOSB動完畢,在EO醛制臺中輸入命令 vm1”后按回車。命令執(zhí)行的結果會同時轉儲在“輸出”窗口中,內容如圖15-7所示。嘗試說明分配虛擬頁或者釋放虛擬頁后虛擬地址描述符以及物理存儲器的變化情況。<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:分配虛擬頁或者釋放虛擬頁后虛擬地址描述符及物理存儲器的變化情況。.在ke/sysproc.c文件的ConsoleCmdVMl!數中,在調用MmAllocateVirtualMemory函數的代碼行(第 1082行)添加一個斷點,在調用 MmFreeVirtualMemory函數的代碼行(第 1147行)添加一個斷點。.按F5啟動調試。.待EOSB動完畢,在EO醛制臺中輸入命令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í)行后,會在調用 MmAllocateVirtualMemory函數的代碼行處中斷。此時要注意參數BaseAddress和RegionSize初始化的值。按F11調試進入MmAllocateVirtualMemory函圖11進入MmAllocateVirtualMemory函數前進入函數后:2.2.按F10單步調試MmFreeVirtualMemory函數的執(zhí)行過程,嘗試回答下面的問題:TOC\o"1-5"\h\z監(jiān)視 ▼甲X名稱 值OVOID*) 0*用???或口Regioi^izt (TSIZE.TD 0x^0006aleJ< :兒二——1] 出|留翎|*杳旌舷1國岷I|圖12進入MmAllocateVirtualMemory函數后5.按F10單步調試MmAllocateVirtualMemory函數的執(zhí)行過程,嘗試回答下面的問題:(1)分配的虛擬頁的起始地址是多少?分配的虛擬頁的數量是多少?它們和參數BaseAddress和RegionSize初始化的值有什么樣的關系?(2)分配虛擬頁的同時有為虛擬頁映射實際的物理頁嗎?這是由哪個參數決定的?(3)分配的虛擬頁是在系統(tǒng)地址空間 (高2G還是在用戶地址空間 (低2G)?這是由哪個參數決定的?(4)參考MiReserveAddressRegion函數的定義和注釋,說明該函數的功能。繼續(xù)調試釋放虛擬頁的過程:答:(1)分配的虛擬頁的起始地址是 0xa0003000,分配的虛擬頁的數量是 1,BaseAddress和RegionSize初始化的值是期望保留或者提交的地址區(qū)域的起始地址和大??;(2)分配虛擬頁的同時有為虛擬頁映射實際的物理頁,這是由第三個參數 AllocationType決定的;(3)分配的虛擬頁是在系統(tǒng)地址空間(高 2G),這是由第四個參數SystemVirtual決定的;4)MiReserveAddressRegion函數的功能是保留一段虛擬地址區(qū)域。1.按F5繼續(xù)執(zhí)行,會在調用MmFreeVirtualMemory函數的代碼行處中斷。此時要注意參數BaseAddress和RegionSize初始化的值。按F11調試進入MmFreeVirtualMemory函數。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進入MmFreeVirtualMemory函數[事查膜果”事峻結檢閱皿就緒圖14進入MmFreeVirtualMemory函數后本次釋放的虛擬地址是多少?釋放的虛擬頁是之前分配的虛擬頁嗎?參考MiFindReservedAddressRegion函數、MiFreeAddressRegion函數和MiDecommitPages函數的定義和注釋,說明這些函數的功能。答:(1)本次釋放的虛擬地址是 0xa0003000,是之前分配的虛擬頁;(2)MiFindReservedAddressRegion函數用于查找已保留地址區(qū)域,如果目標區(qū)域非已保留區(qū)域則返回失敗,MiFreeAddressRegion函數用于釋放已保留地址區(qū)域和MiDecommitPages函數用于釋放映射在連續(xù)虛擬頁框上的物理頁框。結束此次調試后,繼續(xù)按照下列要求修改ConsoleCmdVMi數的源代碼,加深對虛擬頁分配和釋放過程的理解:嘗試在調用MmAllocateVirtualMemory函數時將RegionSize參數的值設置為PAGE_SIZE+1或者PAGE_SIZE*2+1觀察輸出”窗口中轉儲的信息,并說明申請?zhí)摂M內存的大小與實際分配的大小之間的關系,以及分配的虛擬內存大小會對分配的虛擬地址產生什么樣的影響。將“輸出”窗口中轉儲的信息保存在文本文件中。(見3.5wenben1)嘗試在調用MmAllocateVirtualMemory函數時將BaseAddress參數的值設置為已經被占用的虛擬內存,例如0xA0000000,觀察“輸出”窗口中轉儲的信息。將“輸出”窗口中轉儲的信息保存在文本文件中。見3.5_2嘗試在調用MmAllocateVirtualMemory函數時將RegionSize參數的值設置為PAGE_SIZE*Z將BaseAddress參數的值設置為0xA0017004,觀察輸出“窗口中轉儲的信息,并說明申請?zhí)摂M內存的大小與實際分配的大小之間的關系,以及申請的虛擬地址會對分配的虛擬內存大小產生什么樣的影響。將“輸出”窗口中轉儲的信息保存在文本文件中。見3.5_33.6在應用程序進程中分配虛擬頁和釋放虛擬頁要求創(chuàng)建一個EOSZ用程序,并編寫代碼完成下列功能:.調用API函數VirtualA110c ,分配一個整型變量所需的空間, 并使用一個整型變量的指針指向這個空間。.修改整型變量的值為0XFFFFFFFE在修改前輸出整型變量的值,在修改后再輸出整型變量的值。.調用API函數Sleep,等待10秒鐘。.調用API函數VirtualFree,釋放之前分配的整型變量的空間。.進入死循環(huán),這樣應用程序就不會結束。3.6.2測試方法.代碼修改完畢后,按F7生成EOSZ用程序項目。.按F5啟動調試,應用程序自動執(zhí)行后輸出的結果可以參照圖 15所示。.在應用程序分配虛擬頁后,利用10秒后才釋放虛擬頁的間隙, 可以在控制臺 2中執(zhí)行命令“vm31”,查看此時應用程序進程的虛擬地址描述符信息;在應用程序釋放虛擬頁后,可以在控制臺 2中再次執(zhí)行命令 “vm31”,查看此時應用程序進程的虛擬地址描述符信息。輸出的結果可以參照圖15-9所示。OSLabPC-BicrosuftVirtualPC200?IActionEAitCDfloppyHelpCONSOLE-1(PressCtr1+F1"FBtoswitchconsolewindow.,.)UelcometoEOSshell>AutorurA:\E0SApp.exeAllocate4bytesvirtualmemoryatGxlOOOG.Uirtualmemoryoriginalualue:0x0Uirtualmemoryneuualue:GxFFFFFFFFUaitfor10secondReleaseuirtualmemorysuccess!Endlessloop!圖15:在應用程序進程中分配虛擬頁和釋放虛擬頁■OSLabFC-MicrpsoftVxrtualPC2007 匚| 國?IActionEAitCDfloppyHelpC0MS0LE-2(PressCtr1+F1"FBtoswitchconsolewindow.,.)Ue1conetoEOSshell>um31TotalUpnfrom16to524Z71.(Ox10000-Ox?FFEFFFF)litUadInclude1ZUpnFrom10Z4to1035.C0x400000-0x40BFFF)TotalUpnCount:5Z4Z56.AllocatedUpnCount:1Z.FreeUpnCount:524244.圖16:分配虛擬頁后和釋放虛擬頁tOSLabFC-MicrosoftVirtualPC200T 匠| 區(qū)IActionEAitCDfloppyHelpCONSOLE-2(PressCtrl+F1*F8toswitchcon^o1euindourr.)UeleonetoEOSshell>un31TotalUpnfrom16to524271.(0x10000-OxVFFEFFFF)IttUadInclude1ZUpnFrom10Z4to1035.(0x400000-0x40BFFF)TotaIUpnCount:5Z4Z56.AllocatedUpnCount:1Z.FreeUpnCount:524244.圖17:分配虛擬頁后和釋放虛擬頁后,應用程序進程的虛擬地址描述符信息3.6.3提示API函數VirtualAlloc 定義在api/eosapi.c文件的第48行。此API函數主要調用了EO的核函數MmAllocateVirtualMemory。在EOSZ用程序中調用函數VirtualAlloc時,除了使用MEM_RESERVEC外,還必須使用MEM_COMMSfe。API函數VirtualFree定義在api/eosapi.c文件的第70行。此API函數主要調用了EO的核函數MmFreeVirtualMemory。在EOSZ
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 專家評審費勞務合同范本
- 2025年度寵物店寵物攝影與宣傳推廣權轉讓合同
- 科技前沿報告辦公領域的新科研成果
- 2025年中國商業(yè)及零售業(yè)物聯網行業(yè)市場調研分析及投資戰(zhàn)略咨詢報告
- 關于編制陶瓷基片項目可行性研究報告編制說明
- 農業(yè)種植貸款購銷合同范本
- 2025年中國印染行業(yè)市場評估分析及發(fā)展前景調研戰(zhàn)略研究報告
- 科技傳播中的意識形宣傳策略研究
- 智慧社區(qū)居家養(yǎng)老服務云平臺項目可行性研究報告申請立項
- 瓷磚產品供貨合同范本
- 第12課 實現人生價值-【中職專用】2024年中職思想政治《哲學與人生》金牌課件(高教版2023·基礎模塊)
- HG∕T 3792-2014 交聯型氟樹脂涂料
- 中國大豆加工發(fā)展現狀簡析
- 2024年海南省高考物理試卷(含答案)
- GJB5765-2006 軍用機場場道工程質量評定標準
- JJG 705-2014液相色譜儀行業(yè)標準
- 公司合作計劃書
- 2016-2023年南京信息職業(yè)技術學院高職單招(英語/數學/語文)筆試歷年參考題庫含答案解析
- 跨領域聯合診療(MDT)管理法規(guī)
- 光伏電站運維安全風險管控清單
- 保安員考核評分標準與細則
評論
0/150
提交評論