nachosLab4实习报告剖析.doc

  1. 1、本文档共25页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
nachosLab4实习报告剖析

虚拟内存实习报告 目录 内容一:总体概述 3 内容二:任务完成情况 3 任务完成列表(Y/N) 3 具体Exercise的完成情况 3 内容三:遇到的困难以及解决方法 23 内容四:收获及感想 24 内容五:对课程的意见和建议 24 内容六:参考文献 24 内容一:总体概述 实习的主要内容是了解和改进nachos存储管理相关实现,主要分为三个部分。第一部分的主要内容是实现TLB相关异常处理和置换算法,第二部分的主要内容是实现全局内存管理机制,使得nachos内存可以同时存在复数线程,第三部分的主要内容是实现程序运行时载入所需页面。扩展部分主要是增加线程挂起状态以及实现倒排页表。 内容二:任务完成情况 任务完成列表(Y/N) Exercise1 Exercise2 Exercise3 Exercise4 Exercise5 Exercise6 Exercise7 Y Y Y Y Y Y Y Challenge1 Challenge2 Y Y 具体Exercise的完成情况 TLB异常处理 目前,Nachos系统对于内存的管理是基于软件模拟的TLB机制。其工作原理、异常处理、替换算法等方面,与分页式内存管理非常相像。 Exercise1 源代码阅读 阅读code/userprog/progtest.cc,着重理解nachos执行用户程序的过程,以及该过程中与内存管理相关的要点。 阅读code/machine目录下的machine.h(cc),translate.h(cc)文件和code/userprog目录下的exception.h(cc),理解当前Nachos系统所采用的TLB机制和地址转换机制 (1)用户程序执行过程 userprog/progtest.cc定义函数StartProcess主要功能是实现用户程序启动,如果我们希望执行test中的用户程序,那么我们进入userprog,执行./nachos -x ../test/(用户程序),通过识别-x参数,nachos调用StartProcess执行用户程序(具体实现在threads/main.cc) StartProcess的基本流程是,通过文件系统定义的OpenFile打开相关文件,通过AddrSpace的构造函数建立用户空间,装载文件,通过AddrSpace的InitRegisters函数初始化用户寄存器,通过AddrSpace的RestoreState函数装载页表,通过machine的Run函数运行用户程序 AddrSpace的构造函数实现在userprog/addrspace.cc,主要流程是,获取文件头,大小端做适宜转换,通过文件头计算文件所需空间,包括代码段,初始化数据段,未初始化数据段,栈空间4个部分,通过文件所需空间计算出文件所需的虚拟页面数量,创建用户空间页表,指示了第i个虚拟页对应第i个物理页,将用户程序的正文段和相关数据依次调入内存 AddrSpace的InitRegisters函数实现在userprog/addrspace.cc,主要流程是初始化普通寄存器(初始化为0),初始化当前指令指针(PC,初始化为0),初始化下一条指令指针(初始化为4),初始化栈指针(地址空间尾部适当前移) AddrSpace的RestoreState函数实现在userprog/addrspace.cc,主要流程是将页表装载到machine类中,准备执行用户程序 machine的Run函数实现在machine/mipssim.cc,基本流程是通过OneInstruction函数完成指令译码和执行,通过interrupt的OneTick函数使得时钟前进 machine的Run函数通过machine的ReadMem函数读内存数据,通过machine的WriteMem函数写内存数据,两个函数的实现在machine/translate.cc,核心是translate函数,translate函数实现在machine/translate.cc,主要功能是实现虚拟地址到物理地址的转换,translate函数可能返回相应的错误,在这样的情况下,ReadMem函数/WriteMem函数调用RaiseException函数进行处理,RaiseException函数定义在machine/machine.cc,基本流程是将错误信息存储在特定位置,调用ExceptionHandler函数处理不同的错误,ExceptionHandler函数实现在userprog/exception.cc,主要流程是根据错误信息处理不同错误。 目前支持的错误 NoException, // 正常 SyscallEx

您可能关注的文档

文档评论(0)

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

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

版权声明书
用户编号:8133070117000003

1亿VIP精品文档

相关文档