07物理存储器与进程逻辑地址空间的管理_第1页
07物理存储器与进程逻辑地址空间的管理_第2页
07物理存储器与进程逻辑地址空间的管理_第3页
07物理存储器与进程逻辑地址空间的管理_第4页
07物理存储器与进程逻辑地址空间的管理_第5页
免费预览已结束,剩余17页可下载查看

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、布施工至大冬操作系统实验报告实验题目物理存储器与进程逻辑地址空间的管理学生姓名lee学号专业班级指导教师院系名称计算机与信息学院2017年10月30日实验7物理存储器与进程逻辑地址空间的管理1 .实验目的与要求通过查看物理存储器的使用情况,并练习分配和回收物理内存,从而掌握物理存储器的管理方法。通过查看进程逻辑地址空间的使用情况,并练习分配和回收虚拟内存,从而掌握进程逻辑地址空间的管理方法。2 .实验原理阅读本书第6章。重点阅读第6.3节和第6.6节,了解物理存储器的管理方式和进程逻辑地址空间的管理方式。3 .实验内容3.1 准备实验按照下面的步骤准备实验:1 .启动OSLab。2 .新建一个

2、EOSKernel项目。3.2 阅读控制台命令"pnf相关的源代码,并查看其执行的结果阅读ke/sysproc.c文件中第1059行的ConsoleCmdPhysicalMemory函数,学习pM'命令是如何统计并输出物理存储器信息的。在阅读的过程中需要注意下面几点:在统计输出物理存储器信息之前要关闭中断,之后要打开中断,这样可以防止在命令执行的过程中有其它线程分配或者释放物理页。全局变量MiTotalPageFrameCount保存了物理页的总数。每个物理页的大小是4KB由宏PAGE_SIZ定义。全局变量MiZeroedPageCount和MiFreePageCount分别

3、保存了零页和空闲页的数量。计算已用物理页数量的方法是:物理页总数减去零页数量,再减去空闲页数量。按照下面的步骤执行控制台命令"pm,查看物理存储器的信息:1 .按F7生成在本实验3.1中创建的EOSKernel项目。2 .按F5启动调试。3 .待eosb动完毕,在eoss制台中输入命令"pm后按回车。观察命令执行的结果,如图1所示,可以了解当前物理存储器的使用情况。OSLabPC-BicrosuftVirtualPC200?图i:pm命令的执行结果3.3 分配物理页和释放物理页接下来,在pm命令函数中添加分配物理页和释放物理页的代码,单步调试管理物理页的方法。按照下面的步骤

4、修改pm命令的源代码:1 .使用OSLab打开本实验文件夹中的pm.c文件(将文件拖动到OSLab窗口中释放即可打开)。此文件中有一个修改后的ConsoleCmdPhysicalMemory函数,主要是在原有代码的后面增加了分配物理页和释放物理页的代码。2 .使用pm.c文件中ConsoleCmdPhysicalMemory函数的函数体替换ke/sysproc.c文件中ConsoleCmdPhysicalMemory函数的函数体。3 .按F7生成修改后的EOSKernel项目。4 .按F5启动调试。5 .待eosb动完毕,在eo的制台中输入命令pm后按回车。观察命令执行的结果,如图2所示,尝试

5、说明分配物理页或者释放物理页后物理存储器的变化情况。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:分配物理页或者释放物理页后物理存储器的变化情况。按照下面的步骤调试分配物理页和释放物理页的过程:1 .结束之前的调试。2 .在ke/sysproc.c文件的ConsoleCmdPhysicalMemory函数中,在调用MiAllocateAnyPages函数的代码行(第1103行)添加一个断点,在调用MiFreePages函数的代码行(

7、第1115行)添加一个断点。3 .按F5启动调试。4 .待EOSB动完毕,在EO醛制台中输入命令pm后按回车。5 .pm令开始执行后,会在调用MiAllocateAnyPages函数的代码行处中断,按F11调试进入MiAllocateAnyPages函数。6 .按F10单步调试MiAllocateAnyPages函数的执行过程,尝试回答下面的问题:(1)本次分配的物理页的数量是多少?分配的物理页的页框号是多少?(2)物理页是从空闲页链表中分配的?还是从零页链表中分配的?(3)哪一行语句减少了空闲页的数量?哪一行语句将刚刚分配的物理页由空闲状态修改为忙状态?(4)绘制MiAllocateAnyP

8、ages函数的流程图。答:(1)本次分配的物理页的数量是1,分配的物理页的页框号是0x409;(2)物理页是从空闲页链表中分配的,;(3)第226行MiFreePageListHead=MiGetPfnDatabaseEntry(Pfn)->Next;和第227行MiFreePageCount-;减少了空闲页的数量,第229行将刚刚分配的物理页由空闲状态修改为忙状态;(4)中断禁止】事由,白由仙Pitt,*监视名称一L值NuiTiber0tPages0x1MiFreeFageC口utltOx1bd5表是否够分血>-啊从零'链我分配|旧蜕站束MiAllocateAnyPage

9、s函数的流程图qX调用堆栈名称MiAllocatwAiiyPagee(NijjiiberOfl'agee=Ux1,FEhlAtray=Uxa0008a50)地址:0x3001a488CoreoleCmdPhysicalMemoryCStdHandls=0k2)地址:0x800192e4ICiShellThn-ead(Farainwtwrnh口)地址:1:1-:8001852.2PspThreadStartup0地址:0x8001e2Sa?O地址:。州口口口口口口口口优调试信息)<:>|朝查找结果1厘查找结果2后监视圜输出0断点能调用堆栈就绪行1T4图3MiAllocateA

10、nyPages函数监视和堆栈继续调试释放物理页的过程:1 .按F5继续执行,会在调用MiFreePages函数的代码行处中断,按F11调试进入MiFreePages函数。2 .按F10单步调试MiFreePages函数的执行过程,尝试回答下面的问题:(1)本次释放的物理页的数量是多少?释放的物理页的页框号是多少?释放的物理页是之前分配的物理页吗?(2)释放的物理页是被放入了空闲页链表中?还是零页链表中?(3)绘制MiFreePages函数的流程图。答:(1)本次释放的物理页的数量是1,释放的物理页的页框号0x409,释放的物理页是之前分配的物理页;(2)释放的物理页被放入了空闲页链表中;(3)

11、见下图:修谀物理页的状态为空闱井播入空闲嵯表如a:%17闱;ri:他占MiFreePages函数的流程图图4MiFreePages函数监视和堆栈(问题:两次一加一减?)结束此次调试。继续修改p喻令的源代码,尝试在调用MiAllocateAnyPages函数时分配多个物理页,然后在调用MiFreePages函数时将分配的多个物理页释放,并练习调试这两个函数在分配多个物理页和释放多个物理页时执行的过程。3.4阅读控制台命令“vH相关的源代码,并查看其执行的结果阅读ke/sysproc.c文件中第959行的ConsoleCmdVM!数,学习VM'命令是如何统计并输出进程的虚拟地址描述符信息的

12、。在阅读的过程中需要注意下面几点:与“pm”命令输出的是整个系统的物理存储器的使用情况不同,Vm”命令输出的是某个进程的虚拟地址描述符信息,所以Vm”命令使用了一个参数一一进程ID,用来指定一个进程。这个进程既可以是系统进程,也可以是用户进程。在统计输出指定进程的虚拟地址描述符信息之前要关闭中断,之后要打开中断,这样可以防止在命令执行的过程中有其它线程分配或者释放虚拟页。EO舞作系统白进程有4G勺虚拟地址空间,但并不是所有的虚拟地址空间都使用虚拟地址描述符来管理,有一些地址空间是静态的,还有一些地址空间由其他的动态方式来管理(例如系统内存池)。进程4GI拟地址空间中由虚拟地址描述符所管理空间的

13、低地址和高地址是固定的,在这段地址空间中,如果有虚拟页被占用,就会使用虚拟地址描述符来标识,并放入链表中管理。按照下面的步骤执行控制台命令“vm”,查看系统进程的虚拟地址描述符信息:1,按F5启动调试。2 .待EOSB动完毕,在EO醛制台中输入命令"pt”后按回车。“pt”命令可以输出当前系统中的进程列表,其中系统进程的ID为1。图5输入命令“pt”3 .在EO醛制台中输入命令Vm1”后按回车。观察命令执行的结果,如图15-3所示,可以了解系统进程的虚拟地址描述符信息。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”命令查看系统进程虚拟地址描述符的结果系统进程中由虚拟地址描述符所管理的虚拟页只会分配给进程的句柄表(句柄表占用一个虚拟页)和线程的堆栈(堆栈占用两个虚拟页)。结合之前优”命令输出的进程和线程信息可知,当前系统中只有1个系统进程以及10个系统线程,所以在图15-3中,1号描述符所包含的一个虚拟页即为系统进程的句柄表,而2到11号这10个描述符所分别包含的两个虚拟页即为10个系统线程的堆栈。可以按照下面的步骤执行控制台命令Vm”,查看当创建了一个应用程序进程后,系统进程和应用程序进程中虚拟地址描述符的信息:1,在项目管理器”窗口

18、中双击Floppy.img文件,使用FloppylmageEditor工具打开此软盘镜像。2,将本实验文件夹中的LoopApp.exe文件添加到软盘镜像的根目录中(将LoopApp.exe文件拖动到FloppylmageEditor窗口中释放即可)。EOSZ用程序LoopApp.exe的源代码可以参考本实验文件夹中的LoopApp.c文件。3.点击FloppylmageEditor工具栏上的保存按钮,关闭该工具。4,按F5启动调试。5,待EOSB动完毕,在EO醛制台中输入命令A:LoopApp.exe”后按回车。此时就使用EOS应用程序文件LoopApp.exe创建了一个应用程序进程,由于此进

19、程执行了一个死循环,所以此进程不会结束执行,除非关闭虚拟机。6 .此时按Ctrl+F2切换到Console-2”,然后输入命令pt”后按回车。输出的信息如图15-4所示。其中ID为31的进程就是应用程序进程,ID为33的线程就是应用程序进程的主线程。7 .输入命令vm1”后按回车,可以查看系统进程中虚拟地址描述符的信息。输出的信息如图6所示。与图15-3比较可知,3号描述符所包含的一个虚拟页即为应用程序进程的句柄表,13号描述符所包含的两个虚拟页即为应用程序进程主线程的堆栈。8 .输入命令Vm31”后按回车,可以查看应用程序进程中虚拟地址描述符的信息。输出的信息如图7所示。图7:使用pt命令查

20、看有应用程序运行时进程和线程的信息。$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:创建了一个应用程序进程后,系统进程中虚拟地址描述符的信息。JlLUbU1MJUIIbI1.U«AllocatedUpnCount:24.FreeUpnCount:Z0Z4.Dun31TotalUpnfrom16to5

24、24271.COx10000-&x?FFEFFFF)IttUadInclude5UpnFrom10Z4to10Z8.(0x400000-0x404FFF)TotaIUpnCount:524256.AllocatedUpnCountJ5.FreeUpnCount:524251.图9:使用Vm”命令查看应用程序进程虚拟地址描述符的结果。在进程的4G逻辑地址空间中,应用程序进程可以自行管理低2G的用户空间。从图15-6中的信息可以得知,低2G勺用户空间又被分为了三部分:0X00000000-0X0000FFFF由16个虚拟页构成的64KB#态空间,用于捕捉对空指针的非法访问。0X000100

25、00-0X7FFEFFFF由虚拟地址描述符管理的动态空间,用于存储应用程序进程的代码和数据。图15-6显示应用程序进程的代码和数据占用了此空间中的5个虚拟页,并且是用从应用程序的基址0x00400000起始的。0x7FFF0000-0x7FFFFFFF由16个虚拟页构成的64K厢态空间,用于捕捉对空指针的非法访问。为了加深对进程逻辑地址空间的理解,可以在控制台1至控制台7中都执行命令”A:LoopApp.exe",从而让应用程序创建7个进程,然后在控制台8中执行“pt“、“vm”等命令,查看系统进程和应用程序进程的虚拟地址描述符。3.5在系统进程中分配虚拟页和释放虚拟页接下来,在vm

26、命令函数中添加分配虚拟页和释放虚拟页的代码,单步调试管理虚拟页的方法。首先,按照下面的步骤修改vm命令的源代码:1 .使用OSLab打开本实验文件夹中的vm.c文件(将文件拖动到OSLab窗口中释放即可打开)。此文件中有一个修改后的ConsoleCmdVMi数,主要是在原有代码的后面增加了分配虚拟页和释放物理页的代码。2 .使用vm.c文件中ConsoleCmdVMi数的函数体替换ke/sysproc.c文件中ConsoleCmdVMi数的函数体。3 .按F7生成修改后的EOSKernel项目。4 .按F5启动调试。5 .待EOSB动完毕,在EO醛制台中输入命令vm1”后按回车。命令执行的结果

27、会同时转储在输出”窗口中,内容如图15-7所示。尝试说明分配虚拟页或者释放虚拟页后虚拟地址描述符以及物理存储器的变化情况。<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命令执行情况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:分配虚拟页或者释放虚拟页后虚拟地址描述符及物理存储器的变化情况。1 .在ke/sysproc.c文件的ConsoleCmdVME数中,在调用MmAllocateVirtualMemory函数的代码行(第1082行)添加一个断点,在调用MmFreeVirtualMemory函数的代码行(第1147行)添加一个断点。2 .按F5启动调试

39、。3 .待EOSB动完毕,在EO醛制台中输入命令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命令开始执行后,会在调用MmAllocateVirtualMemory函数的代码行处中断。此时要注意参数BaseAddress和RegionSize初始化的值。按F11调试进入MmAllocateVirtualMemory函图11进入MmAllocateVirtualMemory函数前进入函数后:监视甲X名称值OVOID*)0*用。口8或口Regioiizt(TSIZE.TD0x0006ale

43、J<:儿二1出|留翎|*杳旌舷1国岷I|图12进入MmAllocateVirtualMemory函数后5.按F10单步调试MmAllocateVirtualMemory函数的执行过程,尝试回答下面的问题:(1)分配的虚拟页的起始地址是多少?分配的虚拟页的数量是多少?它们和参数BaseAddress和RegionSize初始化的值有什么样的关系?(2)分配虚拟页的同时有为虚拟页映射实际的物理页吗?这是由哪个参数决定的?(3)分配的虚拟页是在系统地址空间(高2G还是在用户地址空间(低2G)?这是由哪个参数决定的?(4)参考MiReserveAddressRegion函数的定义和注释,说明该函

44、数的功能。继续调试释放虚拟页的过程:答:(1)分配的虚拟页的起始地址是0xa0003000,分配的虚拟页的数量是1,BaseAddress和RegionSize初始化的值是期望保留或者提交的地址区域的起始地址和大小;(2)分配虚拟页的同时有为虚拟页映射实际的物理页,这是由第三个参数AllocationType决定的;(3)分配的虚拟页是在系统地址空间(高2G),这是由第四个参数SystemVirtual决定的;4 4)MiReserveAddressRegion函数的功能是保留一段虚拟地址区域。1 .按F5继续执行,会在调用MmFreeVirtualMemory函数的代码行处中断。此时要注意参

45、数BaseAddress和RegionSize初始化的值。按F11调试进入MmFreeVirtualMemory函数。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进入MmFreeVirtualMemory函数事查膜果”事峻结检阅皿就绪图14进入MmFreeVirtualMemory函数后2 .按F10单步调试MmFreeVirtualMemory函数的执行过程,尝试回答下面的问题:(1)本次释放的虚拟地址是多少?释放的虚拟页是之前分配的虚拟页吗?(2)参考MiFindReser

49、vedAddressRegion函数、MiFreeAddressRegion函数和MiDecommitPages函数的定义和注释,说明这些函数的功能。答:(1)本次释放的虚拟地址是0xa0003000,是之前分配的虚拟页;(2)MiFindReservedAddressRegion函数用于查找已保留地址区域,如果目标区域非已保留区域则返回失败,MiFreeAddressRegion函数用于释放已保留地址区域和MiDecommitPages函数用于释放映射在连续虚拟页框上的物理页框。结束此次调试后,继续按照下列要求修改ConsoleCmdVMi数的源代码,加深对虚拟页分配和释放过程的理解:1 .

50、尝试在调用MmAllocateVirtualMemory函数时将RegionSize参数的值设置为PAGE_SIZE+1或者PAGE_SIZE*2+1观察输出”窗口中转储的信息,并说明申请虚拟内存的大小与实际分配的大小之间的关系,以及分配的虚拟内存大小会对分配的虚拟地址产生什么样的影响。将输出”窗口中转储的信息保存在文本文件中。(见3.5wenben1)2 .尝试在调用MmAllocateVirtualMemory函数时将BaseAddress参数的值设置为已经被占用的虚拟内存,例如0XA0000000,观察输出”窗口中转储的信息。将输出"窗口中转储的信息保存在文本文件中。见3.5_

51、23 .尝试在调用MmAllocateVirtualMemory函数时将RegionSize参数的值设置为PAGE_SIZE*2将BaseAddress参数的值设置为0xA0017004,观察输出”窗口中转储的信息,并说明申请虚拟内存的大小与实际分配的大小之间的关系,以及申请的虚拟地址会对分配的虚拟内存大小产生什么样的影响。将输出"窗口中转储的信息保存在文本文件中。见3.5_33.6在应用程序进程中分配虚拟页和释放虚拟页3.6.1 要求创建一个EOSZ用程序,并编写代码完成下列功能:1 .调用API函数VirtualA110c,分配一个整型变量所需的空间,并使用一个整型变量的指针指向

52、这个空间。2 .修改整型变量的值为0XFFFFFFFE在修改前输出整型变量的值,在修改后再输出整型变量的值。3 .调用API函数Sleep,等待10秒钟。4 .调用API函数VirtualFree,释放之前分配的整型变量的空间。5 .进入死循环,这样应用程序就不会结束。3.6.2测试方法1 .代码修改完毕后,按F7生成EOSZ用程序项目。2 .按F5启动调试,应用程序自动执行后输出的结果可以参照图15所示。3 .在应用程序分配虚拟页后,利用10秒后才释放虚拟页的间隙,可以在控制台2中执行命令Vm31”,查看此时应用程序进程的虚拟地址描述符信息;在应用程序释放虚拟页后,可以在控制台2中再次执行命

53、令Vm31”,查看此时应用程序进程的虚拟地址描述符信息。输出的结果可以参照图15-9所示。OSLabPC-BicrosuftVirtualPC200?IActionEAitCDfloppyHelpCONSOLE-1(PressCtr1+F1"FBtoswitchconsolewindow.,.)UelcometoEOSshell>AutorurA:E0SApp.exeAllocate4bytesvirtualmemoryatGxlOOOG.Uirtualmemoryoriginalualue:0x0Uirtualmemoryneuualue:GxFFFFFFFFUaitfor1

54、0secondReleaseuirtualmemorysuccess!Endlessloop!图15:在应用程序进程中分配虚拟页和释放虚拟页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匠|区IActionEAitCDfloppyHelpCONSOLE-2(PressCtrl+F1*F8toswitchcono1euindourr.)UeleonetoEOSshell>un31TotalUpnfrom16to524271.(0x10000-OxVFFEFFFF)IttUadInclude1ZUpnFrom10Z4to1035.(0x400000-0x40BFFF)TotaIUpnCount:5Z4Z56.AllocatedUpnCount:1Z.FreeUpnCount:524244.图17:分配虚拟页后和释放虚拟页后,应用程序进程的虚拟地址描述符信息3.6.3提示1 .API函数VirtualA110c定义在api/eosapi.c文件的第48行。此API函数主要调用了EOS核函数MmAllocateV

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论