操作系统实验第四讲物理存储器与进程逻辑地址空间的管理

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

操作系统实验报告课程名称操作系统实验实验项目名称物理存储器与进程逻辑地址空间的管理学号班级20120616姓名专业计算机科学与技术学生所在学院计算机科学与技术学院指导教师初妍实验室名称地点21#428哈尔滨工程大学计算机科学与技术学院1一、实验概述1.实验名称物理存储器与进程逻辑地址空间的管理2.实验目的通过查看物理存储器的使用情况,并练习分配和回收物理内存,从而掌握物理存储器的管理方法。通过查看进程逻辑地址空间的使用情况,并练习分配和回收虚拟内存,从而掌握进程逻辑地址空间的管理方法。3.实验类型验证+设计4.实验内容3.1准备实验3.2阅读控制台命令“pm”相关的源代码,并查看其执行的结果3.3分配物理页和释放物理页3.4阅读控制台命令“vm”相关的源代码,并查看其执行的结果3.5在系统进程中分配虚拟页和释放虚拟页3.6在应用程序进程中分配虚拟页和释放虚拟页3.6.1要求3.6.2测试方法3.6.3提示二、实验环境操作系统windosxp编译器OSLab语言c语言三、实验过程21.设计思路和流程图MiAllocateAnyPages函数的流程图MiFreePages函数的流程图2.需要解决的问题及解答(1)在实验指导的P160-4.和5.按F10单步调试MmAllocateVirtualMemory函数的执行过程,要求给出监视窗口BaseAddress和RegionSize个变量前后变化截图界面。3截图见3.5。在实验指导的P160-1.和2.按F10单步调试MmFreeVirtualMemory函数的执行过程,要求给出监视窗口BaseAddress和RegionSize个变量前后变化截图界面。截图见3.5。(2)按照《实验指导》的P160-3.6在应用程序进程中分配虚拟页和释放虚拟页,编写代码。要求至少给出源代码及其解释。程序见3.6.2。(3)按F10单步调试MiAllocateAnyPages函数的执行过程,尝试回答下面的问题:①本次分配的物理页的数量是多少?分配的物理页的页框号是多少?②物理页是从空闲页链表中分配的?还是从零页链表中分配的?③哪一行语句减少了空闲页的数量?哪一行语句将刚刚分配的物理页由空闲状态修改为忙状态?答:①本次分配的物理页的数量是1,分配的物理页的页框号是0x409;②物理页是从空闲页链表中分配的③第226行MiFreePageListHead=MiGetPfnDatabaseEntry(Pfn)-Next;和第227行MiFreePageCount--;减少了空闲页的数量,第229行将刚刚分配的物理页由空闲状态修改为忙状态;(4)按F10单步调试MiFreePages函数的执行过程,尝试回答下面的问题:①本次释放的物理页的数量是多少?释放的物理页的页框号是多少?释放的物理页是之前分配的物理页吗?②释放的物理页是被放入了空闲页链表中?还是零页链表中?③绘制MiFreePages函数的流程图。答:①本次释放的物理页的数量是1,释放的物理页的页框号0x409,释放的物理页是之前分配的物理页;②释放的物理页被放入了空闲页链表中;③见实验过程开头流程图部分。(5)按F10单步调试MmAllocateVirtualMemory函数的执行过程,尝试回答下面的问题:①分配的虚拟页的起始地址是多少?分配的虚拟页的数量是多少?它们和参数BaseAddress和RegionSize初始化的值有什么样的关系?4②分配虚拟页的同时有为虚拟页映射实际的物理页吗?这是由哪个参数决定的?③分配的虚拟页是在系统地址空间(高2G)还是在用户地址空间(低2G)?这是由哪个参数决定的?④参考MiReserveAddressRegion函数的定义和注释,说明该函数的功能。答:①分配的虚拟页的起始地址是0xa0003000,分配的虚拟页的数量是1,BaseAddress和RegionSize初始化的值是期望保留或者提交的地址区域的起始地址和大小;②分配虚拟页的同时有为虚拟页映射实际的物理页,这是由第三个参数AllocationType决定的;③分配的虚拟页是在系统地址空间(高2G),这是由第四个参数SystemVirtual决定的;④MiReserveAddressRegion函数的功能是保留一段虚拟地址区域。(6)按F10单步调试MmFreeVirtualMemory函数的执行过程,尝试回答下面的问题:①本次释放的虚拟地址是多少?释放的虚拟页是之前分配的虚拟页吗?②参考MiFindReservedAddressRegion函数、MiFreeAddressRegion函数和MiDecommitPages函数的定义和注释,说明这些函数的功能。答:①本次释放的虚拟地址是0xa0003000,是之前分配的虚拟页;②MiFindReservedAddressRegion函数用于查找已保留地址区域,如果目标区域非已保留区域则返回失败,MiFreeAddressRegion函数用于释放已保留地址区域和MiDecommitPages函数用于释放映射在连续虚拟页框上的物理页框。(7)在本实验3.3中,如果分配了物理页后,没有回收,会对EOS操作系统造成什么样的影响?目前EOS操作系统内核函数MiAllocateAnyPages能处理所有物理页被分配完毕的情况吗?例如在没有可分配的物理页的情况下调用该内核函数,是否会返回失败?如果内核函数MiAllocateAnyPages还不能处理这种极端情况,尝试修改代码解决这个问题。答:如果分配了物理页后,没有回收,将会使可分配自由页和零页越来越少,最终导致内存溢出,系统无法运行。目前EOS操作系统内核函数MiAllocateAnyPages不能处理所有物理页被分配完毕的情况,在没有可分配的物5理页的情况下,不会分配物理页,但仍然会返回成功,添加以下代码即可:Else{returnSTATUS_MEMORY_NOT_ALLOCATED;}(8)在本实验3.3中,在分配物理页时是调用的内核函数MiAllocateAnyPages,该函数会优先分配空闲页,尝试修改代码,调用内核函数MiAllocateZeroedPages优先分配零页,并调试分配零页的情况。尝试从性能的角7度分析内核函数MiAllocateAnyPages和MiAllocateZeroedPages。尝试从安全性的角度分析分配零页的必要性。答:将MiAllocateAnyPages(1,PfnArray);修改为MiAllocateZeroedPages(1,PfnArray);即可。系统启动时,所有空闲物理页都是未初始化的,此时零页链表为空,MiAllocateAnyPages函数可以直接从自由页链表分配,而MiAllocateZeroedPages函数会对从自由页链表中分配的每一页进行零初始化,确保所有分配页都是被零初始化的,再进行分配,因此MiAllocateZeroedPages函数效率较低。但因为MiAllocateZeroedPages函数对自由页进行了初始化,减小了出错的可能性,从而安全性较高。3.主要数据结构、实现代码及其说明typedefstruct_MMPFN{ULONGUnused:9;//未用ULONGPageState:3;//物理页的状态ULONGNext:20;//下一个物理页的页框号}MMPFN,*PMMPFN;typedefenum_PAGE_STATE{ZEROED_PAGE,//零页FREE_PAGE,//自由页BUSY_PAGE,//占用页}PAGE_STATE;//虚拟地址描述符typedefstruct_MMVAD{ULONG_PTRStartingVpn;//被使用区域的开始虚页框号6ULONG_PTREndVpn;//被使用区域的结束虚页框号LIST_ENTRYVadListEntry;//链表项,用于将描述同一地址空间的所有VAD串//成链表}MMVAD,*PMMVAD;//虚拟地址表typedefstruct_MMVAD_LIST{ULONG_PTRStartingVpn;//记录的进程地址空间的开始虚页号ULONG_PTREndVpn;//记录的进程地址空间的结束虚页号LIST_ENTRYVadListHead;//VAD链表头}MMVAD_LIST,*PMMVAD_LIST;4.程序运行时的初值和运行结果3.1准备实验1.启动OSLab。2.新建一个EOSKernel项目。3.2阅读控制台命令“pm”相关的源代码,并查看其执行的结果执行控制台命令“pm”,查看物理存储器的信息:3.3分配物理页和释放物理页使用pm.c文件中ConsoleCmdPhysicalMemory函数的函数体替换ke/sysproc.c文件中ConsoleCmdPhysicalMemory函数的函数体。调试并执行控制台命令“pm”,查看物理存储器的信息:7分配和释放多个物理页调用MiAllocateAnyPages函数时分配多个物理页,然后在调用MiFreePages函数时将分配的多个物理页释放。83.4阅读控制台命令“vm”相关的源代码,并查看其执行的结果执行控制台命令“vm”,查看系统进程的虚拟地址描述符信息:按F5启动调试。待EOS启动完毕,在EOS控制台中输入命令“pt”后按回车。“pt”命令可以输出当前系统中的进程列表,其中系统进程的ID为1。在EOS控制台中输入命令“vm1”后按回车得到虚拟地址描述符信息。9执行控制台命令“vm”,查看当创建了一个应用程序进程后,系统进程和应用程序进程中虚拟地址描述符的信息:切换到“Console-2”,然后输入命令“pt”后按回车。输出的信息:10输入命令“vm1”后按回车,可以查看系统进程中虚拟地址描述符的信息输入命令“vm31”后按回车,可以查看应用程序进程中虚拟地址描述符的信息113.5在系统进程中分配虚拟页和释放虚拟页使用vm.c文件中ConsoleCmdVM函数的函数体替换ke/sysproc.c文件中ConsoleCmdVM函数的函数体。在EOS控制台中输入命令“vm1”后按回车12调试分配虚拟页和释放虚拟页的过程:vm命令开始执行后,会在调用MmAllocateVirtualMemory函数的代码行处中断。此时要注意参数BaseAddress和RegionSize初始化的值。分配虚拟页的调试过程中BaseAddress和RegionSize的值的变化:进入函数之前BaseAddress和RegionSize的值退出函数以后BaseAddress和RegionSize的值释放虚拟页的调试过程中BaseAddress和RegionSize的值的变化:进入函数前BaseAddress和RegionSize的值13刚退出函数时BaseAddress和RegionSize的值在调用MmAllocateVirtualMemory函数时将RegionSize参数的值设置为PAGE_SIZE+1时“输出”窗口中转储的信息:TotalVpnfrom655360to657407.(0xA0000000-0xA07FFFFF)1#VadInclude1VpnFrom655360to655360.(0xA0000000-0xA0000FFF)2#VadInclude2VpnFrom655361to655362.(0xA0001000-0xA0002FFF)3#VadInclude2VpnFrom655365to655366.(0xA0005000-0xA0006FFF)4#VadInclude2VpnFrom655367to655368.(0xA0007000-0xA0008FFF)5#VadInclude2VpnFrom655369to655370.(0xA0009000-0xA000AFFF)6#VadInclude2VpnFrom655371to655372.(0xA000B000-0xA000CFFF)7#VadInclude2VpnFrom655373to6

1 / 21
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功