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

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
\* 虚拟内存机制实习报告 目录 \ \ \ \ \ 一:总体概述 \ \ 二:任务完成情况 \ \ 任务完成列表() \ \ 具体的完成情况 \ \ 三:遇到的困难以及解决方法 \ \ 四:收获及感想 \ \ 五:对课程的意见和建议 \ \ 六:参考文献 \ 一:总体概述 通过认真仔细阅读系统虚拟内存部分的源代码,理解虚拟内存的管理和应用机制,用户程序的运行逻辑,并修改源代码,达到“实现虚拟存储系统”的目标。 二:任务完成情况 任务完成列表() 具体的完成情况 : 源代码阅读 : 阅读,着重理解执行用户程序的过程,以及该过程中与内存管理相关的要点。 阅读情况: 用户程序执行过程: 步骤 相关解释 在函数中,如果检测到传入的参数和“执行用户程序”相关,那么执行函数() 在函数中装载并运行一个用户程序 函数中: 用类打开文件 类在文件系统中定义,包括各种对文件的基本操作,如。实质上是包装了操作系统的底层函数。 用类创建一个用户空间,并将打开的文件装载进去 创建用户空间包括: 获取文件头,并将大小端做适宜转换; 通过文件头计算出文件所需空间,包括代码段,初始化数据段,未初始化数据段,栈空间个部分 通过文件所需空间计算出文件所需的虚拟页数量 创建用户空间的,指示了第个虚拟页(将)对应第个物理页 由于目前是最基本的【直接映射单用户程序无切换】模式,因此此时要将所有的虚拟页中的内容写到物理页(主存)当中。 . (())初始化用户空间中的各种寄存器,包括设为,栈指针移到空间底部 为执行用户程序做准备! (())将用户的部分状态(如)装载到类中,准备执行 事实上,仅仅是将用户空间的(在第二步创建的)装载到的指针中,相当于是用户程序在上运行时,是通过的映射找到对应内容运行的 调用,运行用户程序 是在中定义的。 其工作原理为: 通过()模拟,将一条指令进行分割,并软件模拟执行。 其中,在函数中,通过,读取主存中当前值指向的地址里的指令。 在函数中,通过函数对传入的虚地址做转换。 在函数中,如果虚地址没有找到对应的实地址转换,就会抛出异常(返回异常值)。 返回的异常值在中判断,并传入函数中 函数会调用函数对不同的异常做相应的处理。 (以上是异常处理机制。在这里就顺便说了。) 调用让时间前进 重复 : 阅读目录下的(),()文件和目录下的(),理解当前系统所采用的机制和地址转换机制。 机制和地址转换机制: 相关内容 简单解释 类(),包括: , , 以及一些标志位:等。 标识了用户空间的第个虚拟页应该映射到主存的第个物理页,并且这个物理页目前所处的状态。(? ?等) 初始化( 构造函数): 生成指定数量的构成的数组,并且设置均为. 本身就类似于的子集,有若干的的映射对。 的使用( 函数): 遍历数组,查找是否有对应映射 如果有,命中,直接进行物理地址转换;否则, ,进入处理。(目前还没有对应的处理函数) 无 地址转换机制: 在 函数中进行。 通过,计算出和; 通过或是直接通过,获得对应的;(否则抛出异常,在异常处理函数中做处理,但目前这部分没有实现) 通过和得到物理地址,将物理地址返回。 无 或是处理(): 在上一个表格中已经对异常处理是如何进入的做了介绍。 但这里要补充一点: 在处理完 或是之后,不需要将,因为异常处理函数结束后,返回的最终位置会是函数的取指阶段。取指失败后,函数会退出,然后再用同样的取一次指令。而这次就能够 或者 了。 无 : 异常处理 任务:修改目录下中的函数,使得系统可以对异常进行处理(异常时,系统会抛出,详见)。 完成情况: 关于异常处理的机理已经在 中说明了。因此能够对异常进行处理,我们只要在判断传入的参数为的异常,并对其进行处理即可。 事实上,我在实际操作的时候, 和,抛出的异常都是,此后再判断是否为空。如果为空,则执行;否则,执行。 : 步骤 简单解释 从的寄存器中取出发生异常的虚拟地址,并算出; 在函数中,将发生异常的虚拟地址放入该寄存器的。 扫描,寻找该对应的项。目前情况,是一定可以找到的。 由于目前用户程序运行的机理是: 将所有全部写入主存中,并且全部做好了虚实映射,放在自己的中。当需要加载这个用户程序时,会获得这个。于是相当于是,通过这个,可以得到用户空间所有虚地址对应的实地址。因此当 时,查找,是一定不会的。 接下来是寻找放入的位置: 先考虑中的项,如果存在,写入该项; 如果不存在项,那么就涉及置换算法,这在 中介绍。 总之最后一定可以找到一个放置新的项的位置。 无 : 置换算法 任务:为机制实现至少两种置换

文档评论(0)

kfcel5889 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档