- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
操作系统课程设计_内存管理
作者:李晓琳 200800300117
刘泽民 200800300153
三、实现系统调用与内存管理
设计目标:
实现fork,exec,exit与join系统调用。
实现Nachos中用户程序的装入和内存页
式转换机制,实现多道程序驻留内存
实现带有TLB机制的的内存管理机制。
设计背景:
在nachos中,Thread类是来模拟一个线程的。在Thread类中,模拟了一个系统栈,并且在这个栈中保存系统寄存器的值。这里所说的系是指nachos运行的环境,对我们来说,就是所在的Linux系统。因为nachos要模拟线程的切换,因此必须要有能保存真实机器的CPU中的寄存器内容的地方。这就是说nachos自己实现了一个线程库。
在一个线程刚创建时,其处在JUST_CREATE状态,并且未分配系统栈。Thread类中,还有一个很重要的函数是fork,这个函数接收一个函数指针作为参数。在这个函数中,nachos会初始化这个线程的系统栈空间,并且会把所传入的函数的首址放在栈顶,这样,当这个线程被第一次运行的时候,就会从传入的这个函数处开始运行。
在线程还维护了一个AddrSpace类型的指针。当调用exec时,就会从文件中装载并初始化进程的用户空间。在nachos上,可执行文件是noff格式的。这种格式的文件中,包括一个文本段与三个数据段,并且在文件头中记录了其在虚拟空间的起始位置、在文件中的起始位置,以及大小,这样可以分别来初始化其用户空间的代码段、初始化数据段与未初始化数据段。这时候可以认为这个线程已经变成了一个进程。
在nachos中,对机器原模拟是在machine类中。在这个类中,用两个整型数组分别来模拟寄存器与内存。在machine中,有一个Run函数,这个是用来模拟机器的运行的。这个函数是一个死循环,在每一次循环的时候,首先从用户空间中取一条指令,然后在一个大的switch语句中解释执行指令。 在userpro目录下,有一个system.h的头文件,在这个头文件中,声明了与系统调用有关的函数头。对于test下的测试程序,就可以通过调用这个头文件中声明的函数来实现系统调用。
在用户程序被编译完成后,在函数调用的时候,首先会把参数放到r4-r7这几个寄存器中去,然后会把相应的系统调用编译成下而的指令:
addiu $2,$0,SC_Halt
syscall
j $31
.end Halt
即首先是把系统调用的类型放入r2,然后再执行系统调用指令。在nachos内部,是用RaiseException来模拟系统调用的,这个函数会调用ExceptionHandle,依靠分支来处理各种系统调用。
设计分析:
制约Nachos实现多用户程序的根本原因在于Nachos在建立用户程序的时候,令虚拟地址和物理地址一一映射。每当一个新的用户程序建立的时 候,虚拟地址和物理地址都是从0开始分配,这样新的用户程序将会冲掉原 来在物理0开始的旧用户程序,发生错误。克服此种缺陷的方法之一是使用 位示图分配物 理地址。在做虚存和物理地址的映射时,使用bitmap的find 函数分配虚存对应的物理地址,但是如此使用bitmap之后,当处理虚地址 到内存的映射 的时候,就又不得不改用一个一个segment地读取,那么如 果采用code segment 和 data segment连续地在物理地址中存放,那么 在读取code和data的时候必须首先判断是否是从一个segment 0 端开 始,如果是,万事大吉,如果不是,那么以后每次都要分两次读一个 segment,控制逻辑十分复杂,找data的初始位置的时候也很混乱。所以 采取如 下方案:保留一部分内存碎片,code和data 存放的时候都始终从 一个segment的0开始,如果最后一部分不满一个segment,算为一个 segment,剩余部分为碎片。
实现Nachos系统调用fork,exec,exit与join实现Nachos的系统调用的时候,程序的执行采用的是异常中断的方法,接住异常的类在userprog/exception.cc,必须在此类中添加处理fork,exec,exit与join的方法。
关键代码及注释:
用户程序入口,用户空间:
void
StartProcess(_int fn)
{
char *filename = (char*)fn;
OpenFile *executable = fileSystem-Open(filename);
AddrSpace *space;
if (executable == NULL) {
printf(Unable to open file %s\n, filenam
您可能关注的文档
- 市场营销毕业设计(论文)_我国石化企业网络营销策略研究.doc
- 市场营销毕业设计(论文)_药品的市场定位策略研究.doc
- 市场营销毕业设计(论文)_长春宇龙房地产开发有限公司营销策略研究.doc
- 市场营销毕业设计(论文)_电脑销售中的转转经__卓邦电子科技有限公司顶岗实习回顾.doc
- 市场营销毕业设计(论文)开题报告_当前农民增收难的原因及对策.doc
- 市场营销电大专科毕业论文_甘宁扬子石油化工股份有限公司营销策略研究.doc
- 市场营销自学考试毕业论文_浅析我国企业网络营销的现状与对策.doc
- 市场营销策划案_德茹雪桑蚕丝被二三级市场品牌推广策划案.doc
- 市政广场工程施工组织设计.doc
- 市政基础设施工程质量监督管理手册.doc
最近下载
- 平狄克-微观经济学-第七版--课件.ppt VIP
- 电线电缆质量手册范本.doc VIP
- 中职英语高教版(2025)基础模块1Unit 1 Personal and Family Life 单词课件(共20张ppt)(含音频+视频).pptx VIP
- 2025年高考语文一轮复习考点通关【语言文字运用】考点38 正确使用词语(含答案).docx VIP
- 猜谜语-动物(十六).docx VIP
- 2025年高考语文一轮复习考点通关【语言文字运用】考点41 辨析与鉴赏修辞手法(含答案).docx VIP
- 沃森(VicRuns)VD120A-GS系列变频器说明书用户手册.doc
- 2025年10月离任审计述职报告范文模板.docx VIP
- 2024年《社区JW工作规范(试行)》题库.docx
- 跨境电商客户服务课件:学习情境四 跨境电子商务售中沟通与服务.pptx VIP
文档评论(0)