分存储器管理_第1页
分存储器管理_第2页
分存储器管理_第3页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

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

文档简介

1、实验7分页存储器管理实验性质:验证设计建议学时: 2学时一、实验目的学习i386处理器的二级页表硬件机制,理解分页存储器管理原理。查看E0应用程序进程和系统进程的二级页表映射信息,理解页目录和 页表的管理方式。编程修改页目录和页表的映射关系,理解分页地址变换原理。二、预备知识阅读本书第6章。了解i386处理器的二级页表硬件机制,EOSt作系统的 分页存储器管理方式,以及进程地址空间的内存分布。三、实验内容3.1 准备实验按照下面的步骤准备本次实验:1. 启动 OS Lab。2. 新建一个E0应用程序工程。3.2查看EOSS用程序进程的页目录和页表使用OSLab翻开本实验文件夹中的memory.

2、c和getcr3.asm文件将文件 拖动到OSLab窗口中释放即可翻开。仔细阅读这两个文件中的源代码和注 释,main函数的流程图可以参见图16-1。按照下面的步骤查看EO应用程序进程的页目录和页表:1. 使用memory.c文件中的源代码替换之前创立的EO应用程序工程中 EOSApp .文件中的源代码。2. 右键点击“工程管理器窗口中的“源文件文件夹节点,在弹出的快捷菜单中选择“添加中的“添加新文件。3. 在弹出的“添加新文件对话框中选择“ asm 源文件模板。4. 在“名称中输入文件名称“ func 。5. 点击“添加按钮添加并自动翻开文件 func.asm 。6. 将getcr3.asm

3、文件中的源代码复制到func.asm文件中。7. 按F7生成修改后的E0应用程序工程。8. 按F5启动调试。9. 应用程序执行的过程中,会将该进程的二级页表映射信息输出到虚拟机窗口和OS Lab “输出窗口中,输出内容如图16-2 a。10. 将“输出窗口中的内容复制到一个文本文件中。图16-2 : aEOS应用程序进程的二级页表映射信息 b有应用程序进程时,系统进程的二级页表映射信息图16-2a中第一行是CR存放器的值,也就是页目录所在的页框号。 第一列是页目录中有效的PDE第二列是PD映射的页表中有效的PTE详细 的格式可以参考源代码中的注释。注意,在标号为 0x200的PDE寸应的页表

4、中,所有的1024个PT睹E是有效的,所以在图中省略了一局部。根据图16-2 a答复下面的问题: 应用程序进程的页目录和页表一共占用了几个物理页?页框号分别是 多少?映射用户地址空间低2G的页表的页框号是多少?该页表有几个有效 的PTE或者说有几个物理页用来装载应用程序的代码、数据和堆栈?页框 号分别是多少?3.3 查看应用程序进程和系统进程并发时的页目录和页表需要对EO应用程序进行一些修改:1. 结束之前的调试。2. 取消EOSApp第121行语句的注释该行语句会等待10秒3. 按F7生成修改后的EO应用程序工程。4. 按F5启动调试。5. 在“Console-1 中会自动执行EOSApp.

5、exe创立该应用程序进程。 利用其等待 10秒的时间,按 Ctrl+F2 切换到“ Console-2 。6. 在“Console-2 中输入命令“ mr后按回车,会将系统进程的二级 页表映射信息输出到虚拟机窗口和 OSLab的“输出窗口,输出内容如 图16-2 b。注意,在图16-2 b中添加了一些空行,方便与图16-2a比拟。“ Co nsole-1 中的应用程序在等待10秒后,又会输出和图16-2 a 致的内容。7. 将“输出窗口中的内容复制到一个文本文件中。控制台命令“ m对应的源代码在EOS内核工程ke/sysproc.c文件的 ConsoleCmdMemoryMa函数中第382行。

6、阅读这局部源代码后会发现,其 与EOSApp.文件中的源代码根本类似。结合图16-2 3和b答复下面的问题:EO启动后系统进程是一直运行的,所以当创立应用程序进程后,系统 中就同时存在了两个进程, 这两个进程是否有各自的页目录?在页目录映射 的页表中,哪些是独占的,哪些是共享的?分析其中的原因。统计当应用程序进程和系统进程并发时,总共有多少物理页被占用?应用程序结束后,在“ Console-1 中再次输入命令“ m,查看在没 有应用程序进程时,系统进程的页目录和页表。将“输出窗口中的内容复 制到一个文本文件中。将输出的内容与图16-2 b比拟,思考为什么系统 进程即内核地址空间占用的物理页会减

7、少?提示:创立应用程序进程 时,EO内核要为其创立PCB应用程序结束时,内核要释放PC占用的内存。3.4 查看应用程序进程并发时的页目录和页表需要对E0应用程序进行一些修改:1. 结束之前的调试。2. 取消EOSApp第201行语句的注释该行语句会等待10秒。3. 按F7生成修改后的EO应用程序工程。4. 按F5启动调试。5. 在“Console-1 中会自动执行EOSApp.exe创立该应用程序进程。利用其等待 10秒的时间,按 Ctrl+F2 切换到“ Console-2 。6. 在“Console-2 中输入“eosapp后按回车,再执行一个EOSApp.exe7. 由EOSApp.ex

8、创立的两个并发进程会先后在各自的控制台和 OS Lab “输出窗口中,输出各自的二级页表映射信息。 输出的内容如图 16-3。8. 将“输出窗口中的内容复制到一个文本文件中。图16-3 :a应用程序进程1的二级页表映射信息 b应用程序进程2的二级页表映射信息结合图16-3 3和b答复下面的问题:观察这两个进程的用户地址空间,可以得出结论:同一个应用程序创立 的两个并发的进程,它们的用户虚拟地址空间完全相同,而映射的物理页完 全不同,从而保证相同的行为执行过程可以在独立的空间内完成。 假 设进程1的0x41E和0x41F物理页保存了应用程序的可执行代码,由于可执行 代码是不变的、只读的,现在假设

9、优化过的EOSfc许进程2共享进程1的保存了可执行代码的物理页,尝试结合图 1 6-3写出此时进程 2用户地址空间的映 射信息。并说明共享可执行代码的物理页能带来哪些好处。统计当两个应用程序进程并发时,总共有多少物理页被占用?有更多的 进程同时运行呢?根据之前的操作方式, 尝试在更多的控制台中启动应用程 序来验证自己的想法。如果进程的数量足够多,物理内存是否会用尽,如何 解决该问题?3.5 在二级页表中映射新申请的物理页下面通过编程的方式,从EO操作系统内核中申请两个未用的物理页, 将第一个物理页当作页表,映射基址为 OxEOOOOOOQ的4M虚拟地址空间,然后 将第二个物理页分别映射到基址为

10、 OxEOOOOOOC和OXEOOO1OO0勺4K虚拟地址 空间。从而验证下面的结论:虽然进程可以访问4G虚拟地址空间,但是只有当一个虚拟地址通过二级 页表映射关系能够映射到实际的物理地址时,该虚拟地址才能够被访问,否 那么会触发异常。所有未用的物理页都是由E0操作系统内核统一管理的,使用时必须向 内核申请。为虚拟地址映射物理页时,必须首先为页目录安装页表,然后再为页表 安装物理页。并且只有在刷新快表后,对页目录和页表的更改才能生效。不同的虚拟地址可以映射相同的物理页,从而实现共享。 首先验证第一个结论:1. 新建一个 EOS Kernel 工程。2. 从“工程管理器翻开 ke/sysproc

11、.c 文件。3. 翻开本实验文件夹中的MapNewPage文件将文件拖动到OS Lab窗 口中释放即可。4. 在sysproc.c文件的ConsoleCmdMemoryMap数中找到“关中断的代码行第413行,将MapNewPage.文件中的代码插入到“关中断 代码行的后面。5. 按F7生成该内核工程。6. 按F5启动调试。7. 在EO控制台中输入命令“ mr后按回车8. OS Lab 会弹出一个调试异常对话框,选择“是调试异常9. 黄色箭头指向访问虚拟地址OxEOOOO000的代码行。由于该虚拟地址没有映射物理内存图 16-2和图 16-3中都未映射该虚拟地址,所以对 该虚拟地址的访问会触发

12、异常。10. 结束此次调试,然后删除或者注释会触发异常的该行代码。 按照下面的步骤验证其它结论:1. 按F7生成该内核工程。2. 按F5启动调试。3. 在EO控制台中输入命令“ mr后按回车。4. 在OS Lab的“输出窗口中查看执行的结果,并将“输出窗口中的内容复制到一个文本文件中。结合插入的源代码和执行的结果理解上面的结论。注意,在代码中修改 了虚拟地址0xE0000000处的内存的值,然后从虚拟地址0xE0001000处读取 到了相同的值,原因是这两处虚拟地址映射到了相同的物理页。四、思考与练习1. 观察之前输出的页目录和页表的映射关系,可以看到页目录的第0x300个PD映射的页框号就是

13、页目录本身,说明页目录被复用为了页 表。而恰恰就是这种映射关系决定了 4K的页目录映射在虚拟地址空间的 0xC0300000-0xC0300FFF,4的页表映射在 0xC0000000-0xC03FFFFF 现 在,假设修改了页目录,使其第0x100个PD映射的页框号是页目录本身, 此时页目录和页表会映射在4G虚拟地址空间的什么位置呢?说明计算 方法。2. 修改EOSApp.中的源代码,通过编程的方式统计并输出用户地址空 间占用的内存数目。3. 修改EOSApp.中的源代码,通过编程的方式统计并输出页目录和页 表的数目。注意页目录被复用为页表。4. 在E0启动时,软盘引导扇区被加载到从0X7C0C开始的512个字节的 物理内存中,计算一下其所在的物理页框号,然后根据物理内存与虚拟 内存的映射关系得到其所在的虚拟地址。修改 EOSApp.中的源代码,尝 试将软盘引导扇区所在虚拟地址的 512个字节值打印出来,与 boot.lst 文件中的指令字节码进行比拟,验证计算的虚拟地址是否正确。5. 既然所有1024个页表共4M映射在虚拟地址空间的 0xC0000000

温馨提示

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

评论

0/150

提交评论