操作系统实验第四讲物理存储器与进程逻辑地址空间地管理系统
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实用标准文档
操作系统
实验报告
哈尔滨工程大学
计算机科学与技术学院
一、实验概述
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 提示
二、实验环境
操作系统windos xp
编译器OS Lab
语言c语言
三、实验过程
1. 设计思路和流程图
MiAllocateAnyPages函数的流程图
MiFreePages函数的流程图
2.需要解决的问题及解答
(1)在实验指导的P160-4.和5.按F10单步调试MmAllocateVirtualMemory函数的执行过程,要求给出监视窗口BaseAddress和RegionSize个变量前后变化截图界面。
截图见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初始化的值有什么样的关系?
②分配虚拟页的同时有为虚拟页映射实际的物理页吗?这是由哪个参数决定的?
③分配的虚拟页是在系统地址空间(高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不能处理所有物理页被分配完毕的情况,在没有可分配的物