- 1、本文档共15页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
虚拟内存机制实习报告
善良的大姐姐
.4.18
目录
TOC \o 1-3 \h \z \u 一:总体概述 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的使用(translate.cc translat
文档评论(0)