网站大量收购独家精品文档,联系QQ:2885784924

Nachos系统调用实习报告.doc

  1. 1、本文档共19页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
系统调用实习报告 善良的大姐姐 .5.3 目录 TOC \o 1-3 \h \z \u 一:总体概述 3 二:任务完毕状况 3 任务完毕列表(Y/N) 3 具体Exercise的完毕状况 3 三:碰到的困难以及解决办法 18 四:收获及感想 19 五:对课程的意见和建议 19 六:参考文献 19 一:总体概述 自lab4我们完毕了虚拟内存的实习,能够运行顾客程序之后,我们就考虑加入系统调用。即,顾客程序能够通过特定的系统调用,陷入Nachos内核,从而完毕特定的目的。本次lab一共规定完毕10个系统调用,涉及两大部分,文献系统有关——Create,Open,Close,Read,Write;顾客程序有关——Exec,Fork,Yield,Join,Exit。需要在阅读和理解源码的基础上,懂得系统调用的执行流程,进一步修增源代码,实现新增的系统调用功效。 二:任务完毕状况 任务完毕列表(Y/N) Exercise1 Exercise2 Exercise3 Exercise4 Exercise5 Yes Yes Yes Yes Yes 具体Exercise的完毕状况 Exercise 1:源代码阅读 任务:阅读与系统调用有关的源代码,理解系统调用的实现原理。 完毕状况: Syscall.h 概述: 定义了每个系统调用对应的系统调用号 声明了每个系统调用 Exception.cc 概述:对系统陷入进行解决。 从machine的2号寄存器读入系统调用号 执行对应的操作代码(需要自己完毕) (如果需要)将返回值写回Machine的2号寄存器 Start.s 概述:当顾客程序执行一种系统调用的时候,将参数放入2号寄存器,然后跳转到exception.cc执行。以Halt为例: 将系统调用号放入2号寄存器 将系统调用号放入2号寄存器 总结 当顾客但愿执行一条系统调用的时候: 在顾客程序中调用 当这条语句被OneInstruction函数解析执行时,会判断出这是一条系统调用,转入start.s 在start.s中找到系统调用对应的入口(可能需要自己增加),将系统调用号放入machine的2号寄存器,并转入exception.cc 在exception.cc中,读出2号寄存器中的系统调用号,执行对应操作 必要时,将返回值写回2号寄存器,并注意,将PC迈进。 指令回到顾客程序系统调用的下一条继续执行。系统调用完毕。 为了执行一条系统调用,我们需要完毕的部分: 第一步:增加需要编译的文献名称。这两个是我新增的自己写一种用于测试的顾客程序的.c文献,并修改test的Makefile,使得顾客程序能够被Nachos系统执行。 第一步:增加需要编译的文献名称。这两个是我新增的 第二步,增加如何编译的信息。 第二步,增加如何编译的信息。 由于本次lab需要写的系统调用,在start.s中都已经写好了,因此我们不需要修改。同样,syscall.h中,系统调用号和函数声明也都写好了。(但如果但愿自己新增系统调用,这两个文献是需要修改的,修改方式能够参考别的系统调用) 补充exception.cc,执行对应的系统调用操作。 Exercise 2: 系统调用实现 任务:类比Halt的实现,完毕与文献系统有关的系统调用:Create, Open,Close,Write,Read。Syscall.h文献中有这些系统调用基本阐明。 Exercise 3: 编写顾客程序 任务:编写并运行顾客程序,调用 练习2中所写系统调用,测试其正误。 EX2+EX3完毕状况: 首先,在完毕了文献系统的lab之后,为了能够让userprog编译通过,需要修改system.h的makefile,多include几个头文献以及声明extern变量。否则,会出现:undefined reference *** 这种状况。 另首先,我们需要在exception.cc中,加入系统调用入口: void Create(char *name) 概述: 从4号寄存器读入文献名指针 运用指针,从Machine的mainmemory(内存)中,读出文献名 用文献名为参数,调用filesystem的create函数,创立文献(默认长度256byte) 将PC前移:(machine.cc中定义) 代码:(从内存中读出文献名部分) 测试截图: 之后在userprog文献夹下,就出现了a.txt这个文献(由于我是用UNIX的文献系统来做这次lab的) OpenFileId Open(char *name) 概述: 从4号寄存器读入文献名指针 运用指针,从Machine的mainmemory(内存)中,读出文献名 用文献名为参数,

文档评论(0)

130****8663 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档