Nachos虚拟内存机制实习报告..doc

  1. 1、本文档共17页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
虚拟内存机制实习报告 善良的大姐姐 2015.4.18 目录 一:总体概述 3 二:任务完成情况 3 任务完成列表(Y/N) 3 具体Exercise的完成情况 3 三:遇到的困难以及解决方法 15 四:收获及感想 15 五:对课程的意见和建议 15 六:参考文献 15 一:总体概述 通过认真仔细阅读Nachos系统虚拟内存部分的源代码,理解虚拟内存的管理和应用机制,用户程序的运行逻辑,并修改源代码,达到“实现虚拟存储系统”的目标。 二:任务完成情况 任务完成列表(Y/N) Exercise1 Exercise2 Exercise3 Exercise4 Exercise5 Exercise6 Exercise7 Challenge yes yes yes yes yes yes yes yes 具体Exercise的完成情况 Exercise 1: 源代码阅读 Part1: 阅读code/userprog/progtest.cc,着重理解nachos执行用户程序的过程,以及该过程中与内存管理相关的要点。 阅读情况: 用户程序执行过程: 步骤 相关解释 在main函数中,如果检测到传入的参数和“执行用户程序”相关,那么执行StartProcess函数(progtest.cc) 在StartProcess函数中装载并运行一个用户程序 StartProcess函数中: 用OpenFile类打开文件 OpenFile类在文件系统中定义,包括各种对文件的基本操作,如read,write。实质上是包装了操作系统的底层函数。 用AddrSpace类创建一个用户空间,并将打开的文件装载进去 创建用户空间包括: 获取文件头,并将大小端做适宜转换; 通过文件头计算出文件所需空间,包括代码段,初始化数据段,未初始化数据段,栈空间4个部分 通过文件所需空间计算出文件所需的虚拟页数量 创建用户空间的pagetable,指示了第i个虚拟页(将)对应第i个物理页 由于目前是最基本的【直接映射+单用户程序无切换】模式,因此此时要将所有的虚拟页中的内容写到物理页(主存)当中。 3. (AddrSpace::InitRegisters())初始化用户空间中的各种寄存器,包括PC设为0,栈指针移到空间底部 为执行用户程序做准备! (AddrSpace::RestoreState())将用户的部分状态(如pagetable)装载到machine类中,准备执行 事实上,仅仅是将用户空间的Pagetable(在第二步创建的)装载到machine的指针中,相当于是用户程序在machine上运行时,是通过machine的pagetable映射找到对应内容运行的 调用machine-Run,运行用户程序 Machine-run是在mipssim.cc中定义的。 其工作原理为: 通过OneInstruction(instr)模拟mips,将一条指令进行分割,并软件模拟执行。 其中,在OneInstruction函数中,通过machine-ReadMem,读取主存中当前PC值指向的地址里的指令。 在ReadMem函数中,通过Translate函数对传入的虚地址做转换。 在Translate函数中,如果虚地址没有找到对应的实地址转换,就会抛出异常(返回异常值)。 返回的异常值在ReadMem中判断,并传入RaiseException函数中 RaiseException函数会调用ExceptionHandler函数对不同的异常做相应的处理。 (以上是异常处理机制。在这里就顺便说了。) 调用onetick让时间前进 重复1,2 Part2: 阅读code/machine目录下的machine.h(cc),translate.h(cc)文件和code/userprog目录下的exception.h(cc),理解当前Nachos系统所采用的TLB机制和地址转换机制。 TLB机制和地址转换机制: 相关内容 简单解释 TranslationEntry类(translate.h),包括: virtualPage, physicalPage, 以及一些标志位:valid,readonly等。 标识了用户空间的第i个虚拟页应该映射到主存的第j个物理页,并且这个物理页目前所处的状态。(valid? readOnly?等) TLB初始化(machine.cc 构造函数): 生成指定数量的TranslationEntry构成的数组,并且设置均为Invalid. TLB本身就类似于Pagetable的子集,有若干的vpn,ppn的映射对。 TLB的使用(trans

文档评论(0)

tiangou + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档