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: 阅读 阅读情况 用户程序执行过程: 步骤 相关解释 在tProcess函数tProcess函数中装载并运行一个用户程序StartProcess函数中用File类打开文件用 创建用户空间包括: 获取文件头并将大小端做适宜转换 通过文件头计算出文件所需空间包括代码段初始化数据段未初始化数据段栈空间 通过文件所需空间计算出文件所需的虚拟页数量 创建用户空间的 由于目前是最基本的直接映射单用户程序无切换AddrSpace::InitRegisters())初始化用户空间中的各种寄存器包括AddrSpace::RestoreState())将用户的部分状态如装载到 事实上,仅仅是将用户空间的Pagetable(在第二步创建的)装载到machine的指针中,相当于是用户程序在machine上运行时,是通过machine的pagetable映射找到对应内容运行的 调用Machine-run是在mipssim.cc中定义的 其工作原理为 通过Instruction(instr)模拟mips将一条指令进行分割并软件模拟执行 其中在Instruction函数中通过在Mem函数中通过te函数对传入的虚地址做转换 在late函数中如果虚地址没有找到对应的实地址转换就会抛出异常 返回的异常值在Mem中判断并传入 RaiseException函数会调用tionHandler函数对不同的异常做相应的处理 (以上是异常处理机制。在这里就顺便说了。) 调用onetick让时间前进 重复 Part2: 阅读 TLB机制和地址转换机制: 相关内容 简单解释 TranslationEntry类.h),包括 virtualPage, physicalPage, 以及一些标志位valid,readonly等个虚拟页应该映射到主存的第TLB初始化cc 构造函数 生成指定数量的Entry构成的数组并且设置均为Invalid.TLB本身就类似于Pagetable的子集有若干的 遍历TLB数组查找是否有对应映射 如果有tion处理 在 通过 通过table,获得 通过ppn和fault处理ception.cc): 在上一个表格中已经对异常处理是如何进入的做了介绍 但这里要补充一点 在处理完fault之后不需要将Instruction函数的取指阶段取指失败后table hit了任务 完成情况 关于异常处理的机理已经在Exercise1 中说明了因此能够对 事实上,我在实际操作的时候,TLB MISS和PAGEFAULT,抛出的异常都是PageFaultException,此后再判断machine-tlb是否为空。如果为空,则执行PagefaultFunc;否则,执行TLBmissFunc。 TLBmissFunc: 步骤 简单解释 从VAddrReg寄存器中取出发生异常的虚拟地址并算出seException函数中将发生异常的虚拟地址放入该寄存器的扫描pn对应的项目前情况是一定可以找到的 由于目前用户程序运行的机理是: 将所有Table中当table。于是相当于是是一定不会Miss的接下来是寻找放入 先考虑TLB中invalid的项,如果存在,写入该项; 如果不存在ercise3 中介绍 总之最后一定可以找到一个放置新的ercise 3: 置换算法 任务 完成情况: FIFO替换算法 LRU替换算法 如果替换的是 否则为每个左移 异常处理函数中如果替换的是Invalid项则将所有否则扫描 将会分配 (visit time不同是因为每次 LRU: 结论:LRU算法略优于FIFO。 Exercise 4: 内存全局管理数据结构 任务 完成情况: 增改情况 简单解释 创建 Machine类中 新增一个MNG,大小设置

文档评论(0)

美洲行 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档