【此后无良辰】实验7 物理存储器与进程逻辑地址空间的管理

实验目的

了解操作系统管理内存的框架、物理地址空间和逻辑地址空间的管理方式;掌握分配和回收物理内存的方法。

实验内容与记录

3.2 通过该节步骤,回答下述两个问题:
(1)EOS所管理的虚拟机的物理地址大小是多少Mbyte,其用于管理物理块使用与否的数据结构是什么?如何表示的?
① 物理内存的大小为33488896 Byte,经过计算,可得EOS所管理的虚拟机的物理地址大小是约为31.9375Mbyte
② EOS使用页框号数据库(PEN Database)来管理所有物理页。
③ PFN Database 其实是一个数组,数组中的元素是由一个结构体来定义的,数组的长度和物理存储器所包含的物理页数量是一致的。数组中的第 N 项描述了页框号为 N 的物理页的状态,并且该项还指向了具有相同状态的另一个物理页的页框号,以构成链表。

(2)零页在EOS中的作用是么?
①从物理作用来看:零页是某一物理页的状态,表示此页空闲可用,已进行零初始化,每个字节的值都是 0。
②从安全作用来看:从安全性的角度来分析,分配零页更加安全。例如,一个物理页被操作系统存储过重要的密码信息后被释放,如果没有清零就被分配给用户程序,则用户程序就可能从这个物理页中获取重要的密码信息。

3.3 回答本节书中针对分配和回收物理块所提出的问题。
(1)单步调试MiAllocateAnyPages函数的执行过程,尝试回答下面的问题:
 本次分配的物理页的数量是多少?分配的物理页的页框号是多少?
① 本次分配的物理页数量是1
② 分配的物理页的页框号是0x409。
 物理页是从空闲页链表中分配的?还是从零页链表中分配的?
① 因为零页的数量一直为零,所以物理页是从空闲页链表中分配的。
 哪一行语句减少了空闲页的数量?哪一行语句将刚刚分配的物理页由空闲状态修改为忙状态?
①减少空闲页:
减少了空闲页的数量语句和结果如下图:箭头所指
在这里插入图片描述
在这里插入图片描述

②空闲变忙:
将刚刚分配的物理页由空闲状态修改为忙状态的语句和结果如下图:箭头所指
在这里插入图片描述
在这里插入图片描述

 绘制MiAllocateAnyPages函数的流程图。
在这里插入图片描述

(2)单步调试MiFreePages函数的执行过程,尝试回答下面的问题:
 本次释放的物理页的数量是多少?释放的物理页的页框号是多少?释放的物理页是之前分配的物理页吗?
①本次释放的物理页的数量是1
②释放的物理页的页框号是0x409
③释放的物理页是之前分配的物理页
代码和物理内存图如下:

在这里插入图片描述
在这里插入图片描述

 释放的物理页是被放入了空闲页链表中?还是零页链表中?
① MIFreePageCount的值加1,释放的物理页被放入了空闲页链表中
代码和物理内存图如下:

在这里插入图片描述
在这里插入图片描述

 绘制MiFreePages函数的流程图

在这里插入图片描述

3.4 通过实验调试,EOS的应用程序进程和系统进程的逻辑地址空间是否一样?如果不一样有什么差别?
①不一样
②EOS 中的每个进程都有一个独立的 4G 虚拟地址空间(即 4GB 的逻辑地址空间),其中低 2G 为进程私有的用户地址空间,高 2G 为所有进程共享的系统地址空间。)进程的用户地址空间用于存放用户进程的代码、数据等。系统地址空间被 EOS 内核使用,用于存放内核的代码、内核运行时的各种数据结构以及所有线程的内核模式等。
3.5 回答本节书中针对分配和回收虚拟页所提出的问题。
(1)单步调试MmAllocateVirtualMemory函数的执行过程,尝试回答下面的问题:
 分配的虚拟页的起始地址是多少?分配的虚拟页的数量是多少?它们和参数BaseAddress和RegionSize初始化的值有什么样的关系?
① 分配的虚拟页的起始地址是0xa0003000
② 分配的虚拟页的数量是1
③ BaseAddress作为输入时,初始化的值为期望保留或者提交的地址区域的起始地址
④ RegionSize作为输入时,初始化的值为期望保留或者提交的内存区域的大小
 分配虚拟页的同时有为虚拟页映射实际的物理页吗?这是由哪个参数决定的?
① 分配虚拟页的同时有为虚拟页映射实际的物理页,由参数AllocationType决定的

 分配的虚拟页是在系统地址空间(高2G)还是在用户地址空间(低2G)?这是由哪个参数决定的?
① 分配的虚拟页在系统地址空间,由第四个参数SystemVirtual决定的。

 参考MiReserveAddressRegion函数的定义和注释,说明该函数的功能。
①MiReserveAddressRegion函数的功能是保留一段虚拟地址区域。

 待MmAllocateVirtualMemory函数执行完毕后,在“虚拟地址描述符”窗口中查看系统进程的虚拟地址描述符,并与图15-5进行比较,指出刚刚分配的是哪个虚拟页。
① 刚刚分配的是序号是655364,虚拟页框号是655363,虚拟地址是0xa0003000的虚拟页
在这里插入图片描述

(2)单步调试MmFreeVirtualMemory函数的执行过程,尝试回答下面的问题:
 本次释放的虚拟地址是多少?释放的虚拟页是之前分配的虚拟页吗?
① 本次释放的虚拟地址是0xa0003000,是之前分配的虚拟页。
在这里插入图片描述
进程图如下:
在这里插入图片描述
在这里插入图片描述

 参考MiFindReservedAddressRegion函数、MiFreeAddressRegion函数和MiDecommitPages函数的定义和注释,说明这些函数的功能。
①MiFindReservedAddressRegion函数:查找已保留地址区域,如果目标区域非已保留区域则返回失败。
② MiFreeAddressRegion函数:释放已保留地址区域。
③ MiDecommitPages函数:释放映射在连续虚拟页框上的物理页框。

 待MmFreeVirtualMemory函数执行完毕后,在“虚拟地址描述符”窗口中查看系统进程的虚拟地址描述符,并与刚刚分配一个虚拟页后的图示进行比较,指出刚刚释放的是哪个虚拟页。
①刚刚释放的是0xa0003000。
在这里插入图片描述

进程图如下:

在这里插入图片描述
在这里插入图片描述

3.6 完成该应用程序,截图运行结果,并说明虚拟页分配前后虚拟地址描述符的变化。
运行结果截图
在这里插入图片描述

虚拟页分配前(左为系统进程,右为用户进程):
在这里插入图片描述
在这里插入图片描述

虚拟页分配后(左为系统进程,右为用户进程):

在这里插入图片描述
在这里插入图片描述

实验思考题

尝试在启动一个应用程序进程前执行“pm”命令,并记录下此时已经被占用的物理页数量;执行“vm”命令查看系统进程的虚拟地址描述符信息,并记录下系统进程已经分配的虚拟页数量。启动一个应用程序进程后,再执行“pm”命令,并记录下此时被占用的物理页数量;使用“vm”命令分别查看系统进程和应用程序进程的虚拟地址描述符信息,分别记录下系统进程和应用程序进程已经分配的虚拟页数量。结合记录的五个数据,尝试说明由于应用程序进程执行而增加的物理页数量与增加的虚拟页数量是否一致。如果不一致,尝试说明原因。
① 启动应用程序进程前执行“pm”命令,并记录下此时已经被占用的物理页数量为1059

在这里插入图片描述
在这里插入图片描述

②执行“vm”命令查看系统进程的虚拟地址描述符信息,并记录下系统进程已经分配的虚拟页数量为16
在这里插入图片描述
在这里插入图片描述

③启动一个应用程序进程后,再执行“pm”命令,并记录下此时被占用的物理页数量是1061
在这里插入图片描述在这里插入图片描述

④使用“vm”命令分别查看系统进程和应用程序进程的虚拟地址描述符信息,分别记录下系统进程和应用程序进程已经分配的虚拟页数量
系统进程已经分配的虚拟页数量:16
应用程序进程已经分配的虚拟页数量:13
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

综合上述图标和数据可知,由于应用程序进程执行而增加的物理页数量与增加的虚拟页数量并不一致
理由如下:
物理内存是有限的,而且在32位地址线的情况下最大只能使用4GB物理内存,系统不可能为每个进程的4G虚拟地址空间全都映射物理页,它们之间不是一一对应的关系。一般来说,进程虚拟地址空间对物理页的映射是稀疏的。

望能对诸君有所帮助,切忌直接抄袭(觉得有用记得点赞呀~)

  • 19
    点赞
  • 46
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值