操作系统实验报告(3)
的密码信息后被释放,如果没有清零就被分配给用户程序,则用户程序就可能从这个物理页中获得重要的密码信息。
3. 观察本实验3.4中使用“vm”命令输出的系统进程的虚拟地址描述符(图15-3),可以看到在2号描述符和3号描述符之间有两个虚拟页的空隙,尝试结合虚拟页的分配和释放说明产生这个空隙的原因。
答:产生的空隙是由于有虚拟页被释放造成的,在EOS启动时有一个初始化线程在初始化完毕后就退出了,线程的堆栈所占用的虚拟页就被释放了。
5. 在本实验3.5中,调用MmAllocateVirtualMemory函数分配虚拟页时只使用了MEM_RESERVE标志,没有使用MEM_COMMIT标志,尝试说明这两个标志的区别。修改代码,在调用MmAllocateVirtualMemory函数时增加使用MEM_COMMIT标志,并调试为虚拟页映射物理页的过程。
答:使用MEM_RESERVE标志分配虚拟页时,没有为其映射实际的物理页。使用MEM_COMMIT表示分配虚拟页时,会为其映射实际的物理页。
实验8 分页存储器管理
一、实验目的
学习i386处理器的二级页表硬件机制,理解分页存储器管理原理。
查看EOS应用程序进程和系统进程的二级页表映射信息,理解页目录和页表的管理方式。
编程修改页目录和页表的映射关系,理解分页地址变换原理。 二、实验内容
1 、准备实验
2 、查看EOS应用程序进程的页目录和页表 三、问题答案及参考代码
1. 观察之前输出的页目录和页表的映射关系,可以看到页目录的第0x300个PDE映射的页框号就是页目录本身,说明页目录被复用为了页表。而恰恰就是这种映射关系决定了4K的页目录映射在虚拟地址空间的0xC0300000-0xC0300FFF,4M的页表映射在0xC0000000-0xC03FFFFF。现在,假设修改了页目录,使其第0x100个PDE映射的页框号是页目录本身,此时页目录和页表会映射在4G虚拟地址空间的什么位置呢?说明计算方法。 答:假设修改了页目录,使其第0x100个PDE映射的页框号是页目录本身,此时页目录和页表会映射在4G虚拟地址空间的什么位置呢?说明计算方法。 页目录:PDE标号0x100做为虚拟地址的高10位,PTE标号0x100做为虚拟地址的12-22位,得到虚拟地址0x 40100000。 页表:PDE标号0x100做为虚拟地址的高10位,PTE标号0x0做为虚拟地址的12-22位,得到虚拟地址0x 40000000。
3. 修改EOSApp.c中的源代码,通过编程的方式统计并输出页目录和页表的数目。注意页目录被复用为页表
答:编写代码将申请到的物理页从二级页表映射中移除,并让内核回收这些物理页。 参见源代码文件MapNewPageEx.c。使用该文件中的ConsoleCmdMemoryMap函数替换ke/sysproc.c中的ConsoleCmdMemoryMap函数即可。在移除映射的物理页时,只需要将PTE/PDE的存在标志位设置为0即可,要先修改PTE,再修改PDE。另外,要注意刷新快表。调用MiFreePages函数即可回收物理页,具体的用法可以参考其函数定义处的注释和源代码(mm/pfnlist.c第248行)。
5. 既然所有1024个页表(共4M)映射在虚拟地址空间的0xC0000000-0xC03FFFFF,为什么不能从页表基址0xC0000000开始遍历,来查找有效的页表呢?而必须先在页目录中查找有效的页表呢?编写代码尝试一下,看看会有什么结果。
答:不能从页表基址0xC0000000开始遍历查找有效的页表因为:只有当一个虚拟地址通过二级页表映射关系能够映射到实际的物理地址时,该虚拟地址才能够被访问,否则会触发异常。由于并不是所有的页表都有效,所以不能从页表基址0xC0000000开始遍历。 6. 学习EOS操作系统内核统一管理未用物理页的方法(可以参考本书第6章的第6.5节)。尝试在本实验第3.5节中ConsoleCmdMemoryMap函数源代码的基础上进行修改,将申请到的物理页从二级页表映射中移除,并让内核回收这些物理页。
参见源代码文件MapNewPageEx.c。使用该文件中的ConsoleCmdMemoryMap函数替换ke/sysproc.c中的ConsoleCmdMemoryMap函数即可。 在移除映射的物理页时,只需要将PTE/PDE的存在标志位设置为0即可,要先修改PTE,再修改PDE。调用MiFreePages函数即可回收物理页,具体的用法可以参考其函数定义处的注释和源代码(mm/pfnlist.c第248行)。
源代码:
ULONG PfnArray[2]; //
// 访问未映射物理内存的虚拟地址会触发异常。 // 必须注释或者删除该行代码才能执行后面的代码。 //
*((PINT)0xE0000000) = 100; //
// 从内核申请两个未用的物理页。
// 由 PfnArray 数组返回两个物理页的页框号。 //
MiAllocateZeroedPages(2, PfnArray);
OutputFormat = \fprintf(StdHandle, OutputFormat, PfnArray[0], PfnArray[1]); KdbPrint(OutputFormat, PfnArray[0], PfnArray[1]); //
// 使用 PfnArray[0] 页做为页表,映射基址为 0xE00000000 的 4M 虚拟地址。 //
IndexOfDirEntry = (0xE0000000 >> 22); // 虚拟地址的高 10 位是 PDE 标号 ((PMMPTE_HARDWARE)0xC0300000)[IndexOfDirEntry].PageFrameNumber PfnArray[0];
((PMMPTE_HARDWARE)0xC0300000)[IndexOfDirEntry].Valid = 1;
// 有效 // 可写
=
((PMMPTE_HARDWARE)0xC0300000)[IndexOfDirEntry].Writable = 1; MiFlushEntireTlb(); //
// 根据 PDE 的标号计算其映射的页表所在虚拟地址的基址 //
PageTableBase = 0xC0000000 + IndexOfDirEntry * PAGE_SIZE; //
// 将 PfnArray[1] 放入页表 PfnArray[0] 的两个 PTE 中, // 分别映射基址为 0xE0000000 和 0xE0001000 的 4K 虚拟地址 //
// 刷新快表
IndexOfTableEntry = (0xE0000000 >> 12) & 0x3FF; // 虚拟地址的 12-22 位是 PTE 标号
((PMMPTE_HARDWARE)PageTableBase)[IndexOfTableEntry].PageFrameNumber PfnArray[1];
((PMMPTE_HARDWARE)PageTableBase)[IndexOfTableEntry].Valid = 1; ((PMMPTE_HARDWARE)PageTableBase)[IndexOfTableEntry].Writable = 1; MiFlushEntireTlb(); …… 此处隐藏:1403字,全部文档内容请下载后查看。喜欢就下载吧 ……
相关推荐:
- [学前教育]MC9S12XS256RMV1 xs128芯片手册4
- [学前教育]安东尼语录经典语录
- [学前教育]e级gps控制测量技术设计书
- [学前教育]苏教版2022-2022学年八年级下学期期末
- [学前教育]装修公司推广 营销
- [学前教育]家政服务合同(完整版)
- [学前教育]湖北省2016届高三联考语文试题
- [学前教育]爱立信无涯学习系统LTE题库1-LTE基础知
- [学前教育]揭秘大众柴油车作弊软件原理
- [学前教育]人才流失原因及对策分析
- [学前教育]房屋建筑施工工程劳务分包合同
- [学前教育]国际贸易实务试卷A卷09.6
- [学前教育]校园废品回收活动计划方案书范文格
- [学前教育]电大成本会计试题及答案
- [学前教育]大学物理实验 华南理工出版社 绪论答案
- [学前教育]爱丁堡产后抑郁量表
- [学前教育]液压冲击的危害、产生原因与防止方法(
- [学前教育]学生工作总结高一学生期中考试总结_020
- [学前教育]人民医院医疗废物管理规章制度大全
- [学前教育]阳光维生素的巨大抗癌潜能阅读题答案.d
- 马云在云锋基金江苏论坛闭幕式的发言
- 试论小学体育教育中的心理健康教育-教
- 语文A版一年级下册《语文乐园一》教学
- 2021四川大学物理化学考研真题经验参考
- [人教A版]2015-2016学年高中数学 第二
- 终端网点销售返利协议书
- 江苏省2015年眼科学主治医师青光眼考试
- 2017年部编人教版八年级语文上册教案
- 十一中学七年级英语上册Unit7Howmuchar
- 以赛促教的创新性实验教学机制建设实践
- 平凉市崆峒区2015七年级下生物期末试题
- 琶洲(地块五)A、B塔楼1、2#塔吊基础
- 一级医院工作制度与人员岗位职责
- 2018北京西城区高三二模理科数学试题及
- 炒股密码线技术 - 图文
- 职高学生生涯发展辅导教案
- 语文人教版四年级上册8 世界地图引出的
- 最新最新人教版二年级上册全册数学教案
- 2017高考英语全国2卷精彩试题(有问题
- 普通心理学笔记




