实验六-分页存储器管理

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

上海应用技术学院

程序设计语言实验报告

实验名称分页存储器管理实验序号实验六实验日期

姓名学号指导教师

专业计算机科学与技术班级成绩

一、实验目的及要求

学习i386处理器的二级页表硬件机制,理解分页存储器管理原理。

查看EOS应用程序进程和系统进程的二级页表映射信息,理解页目录和页表的管理方式。编程修改页目录和页表的映射关系,理解分页地址变换原理。

二、实验环境

Windows XP;Tevation OS Lab。

三、实验内容

1 准备实验

按照下面的步骤准备本次实验:

1.启动OS Lab。

2.新建一个EOS应用程序项目,如图1。

图1

2 查看EOS应用程序进程的页目录和页表

使用OS Lab打开本实验文件夹中的memory.c和getcr3.asm文件如图2(将文件拖动到

OS Lab窗口中释放即可打开)。按照下面的步骤查看EOS应用程序进程的页目录和页表:

图2

1.使用memory.c文件中的源代码替换之前创建的EOS应用程序项目中EOSApp.c文件中

的源代码,如图3。

图3

2.右键点击“项目管理器”窗口中的“源文件”文件夹节点,在弹出的快捷菜单中选择

“添加”中的“添加新文件”。

3.在弹出的“添加新文件”对话框中选择“asm 源文件”模板。

4.在“名称”中输入文件名称“func”。

5.点击“添加”按钮添加并自动打开文件func.asm,如图4。

图4

6.将getcr3.asm文件中的源代码复制到func.asm文件中,如图5。

图5

7.按F7生成修改后的EOS应用程序项目,如图6。

图6

8.按F5启动调试,如图7。

图7

9.应用程序执行的过程中,会将该进程的二级页表映射信息输出到虚拟机窗口和OS Lab

“输出”窗口中。

10.将“输出”窗口中的内容复制到一个文本文件中。

3 查看应用程序进程和系统进程并发时的页目录和页表

需要对EOS应用程序进行一些修改:

1.结束之前的调试。

2.取消EOSApp.c第121行语句(该语句会等待10秒)的注释。

3.按F7生成修改后的EOS应用程序项目。

4.按F5启动调试,如图8。

图8

5.在“Console-1”中会自动执行EOSApp.exe,创建该应用程序进程,利用其等待10秒

的时间,按Ctrl+F2切换到“Console-2”。

6.在“Console-2”中输入命令“mm”后按回车,会将系统进程的二级页表映射信息输

出到虚拟机窗口和OS Lab的“输出”窗口,输出内容如图2(b)。注意,在图2(b)中添加了一些空行,方便与图2(a)比较。应用程序在等待10秒后又会输出和图2(a)一致的内容。

7.将“输出”窗口中的内容复制到一个文本文件中。

控制台命令“mm”对应的源代码在EOS内核项目ke/sysproc.c文件的ConsoleCmdMemoryMap函数中(第246行),与memory.c文件中的源代码基本类似。

4 查看应用程序进程并发时的页目录和页表

需要对EOS应用程序进行一些修改:

1.结束之前的调试。

2.取消EOSApp.c第201行语句(该语句会等待10秒)的注释。

3.按F7生成修改后的EOS应用程序项目。

4.按F5启动调试,如图8。

图8

5.在“Console-1”中会自动执行EOSApp.exe,创建该应用程序进程,利用其等待10秒

的时间,按Ctrl+F2切换到“Console-2”。

6.在“Console-2”中输入“eosapp”后按回车,再执行一个EOSApp.exe。

7.由EOSApp.exe创建的两个并发进程会先后在各自的控制台和“输出”窗口中,输出各

自的二级页表映射信息。输出的内容如图3。

8.将“输出”窗口中的内容复制到一个文本文件中。

5 在二级页表中映射新申请的物理页

首先验证第一个结论:

1.新建一个 EOS Kernel项目。

2.打开ke/sysproc.c文件和本实验文件夹中的MapNewPage.c文件,如图9。

图9

3.在sysproc.c文件的ConsoleCmdMemoryMap函数中找到“关中断”的代码行(第278

行),将MapNewPage.c文件中的代码插入到“关中断”代码行的后面。

4.按F7生成该内核项目。

5.按F5启动调试。

6.在EOS控制台中输入命令“mm”后按回车。

7.OS Lab会弹出一个调试异常对话框,选择“是”调试异常。

8.黄色箭头指向访问虚拟地址0xE0000000的代码行。由于该虚拟地址没有映射物理内

存(图2和图3中都未映射该虚拟地址),所以对该虚拟地址的访问会触发异常。9.结束此次调试,然后删除或者注释会触发异常的该行代码,如图10。

图10

按照下面的步骤验证其它结论:

1.按F7生成该内核项目。

2.按F5启动调试。

3.在EOS控制台中输入命令“mm”后按回车。

4.在OS Lab的“输出”窗口中查看执行的结果,并将“输出”窗口中的内容复制到一个

文本文件中,如图11。

图11

相关文档
最新文档