Nachos系统调用实习报告

Nachos系统调用实习报告

ID:37079166

大小:1.12 MB

页数:19页

时间:2019-05-20

Nachos系统调用实习报告_第1页
Nachos系统调用实习报告_第2页
Nachos系统调用实习报告_第3页
Nachos系统调用实习报告_第4页
Nachos系统调用实习报告_第5页
资源描述:

《Nachos系统调用实习报告》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、系统调用实习报告善良的大姐姐2015.5.319目录一:总体概述3二:任务完成情况3任务完成列表(Y/N)3具体Exercise的完成情况3三:遇到的困难以及解决方法18四:收获及感想19五:对课程的意见和建议19六:参考文献1919一:总体概述自lab4我们完成了虚拟内存的实习,可以运行用户程序之后,我们就考虑加入系统调用。即,用户程序可以通过特定的系统调用,陷入Nachos内核,从而完成特定的目标。本次lab一共要求完成10个系统调用,包括两大部分,文件系统相关——Create,Open,Close,Read,Write;用户程序相关——Exec,Fork,Yield,

2、Join,Exit。需要在阅读和理解源码的基础上,知道系统调用的执行流程,进一步修增源代码,实现新增的系统调用功能。二:任务完成情况任务完成列表(Y/N)Exercise1Exercise2Exercise3Exercise4Exercise5YesYesYesYesYes具体Exercise的完成情况Exercise1:源代码阅读任务:阅读与系统调用相关的源代码,理解系统调用的实现原理。完成情况:1.Syscall.h概述:1)定义了每个系统调用对应的系统调用号2)声明了每个系统调用2.Exception.cc概述:对系统陷入进行处理。1)从machine的2号寄存器读入

3、系统调用号191)执行对应的操作代码(需要自己完成)2)(如果需要)将返回值写回Machine的2号寄存器1.Start.s概述:当用户程序执行一个系统调用的时候,将参数放入2号寄存器,然后跳转到exception.cc执行。以Halt为例:将系统调用号放入2号寄存器2.总结当用户希望执行一条系统调用的时候:1)在用户程序中调用2)当这条语句被OneInstruction函数解析执行时,会判断出这是一条系统调用,转入start.s3)在start.s中找到系统调用对应的入口(可能需要自己增加),将系统调用号放入machine的2号寄存器,并转入exception.cc4)在

4、exception.cc中,读出2号寄存器中的系统调用号,执行对应操作5)必要时,将返回值写回2号寄存器,并注意,将PC前进。6)指令回到用户程序系统调用的下一条继续执行。系统调用完成。为了执行一条系统调用,我们需要完成的部分:第一步:增加需要编译的文件名称。这两个是我新增的1)自己写一个用于测试的用户程序的.c文件,并修改test的Makefile,使得用户程序能够被Nachos系统执行。第二步,增加如何编译的信息。2)因为本次lab需要写的系统调用,在start.s中都已经写好了,因此我们不需要修改。同样,syscall.h中,系统调用号和函数声明也都写好了。(但如果希

5、望自己新增系统调用,这两个文件是需要修改的,修改方式可以参照别的系统调用)3)补充exception.cc,执行对应的系统调用操作。19Exercise2:系统调用实现任务:类比Halt的实现,完成与文件系统相关的系统调用:Create,Open,Close,Write,Read。Syscall.h文件中有这些系统调用基本说明。Exercise3:编写用户程序任务:编写并运行用户程序,调用练习2中所写系统调用,测试其正误。EX2+EX3完成情况:首先,在完成了文件系统的lab之后,为了能够让userprog编译通过,需要修改system.h的makefile,多includ

6、e几个头文件以及声明extern变量。否则,会出现:undefinedreference***这种情况。其次,我们需要在exception.cc中,加入系统调用入口:1.voidCreate(char*name)概述:191)从4号寄存器读入文件名指针2)利用指针,从Machine的mainmemory(内存)中,读出文件名3)用文件名为参数,调用filesystem的create函数,创建文件(默认长度256byte)4)将PC前移:(machine.cc中定义)代码:(从内存中读出文件名部分)测试截图:之后在userprog文件夹下,就出现了a.txt这个文件(因为我是

7、用UNIX的文件系统来做这次lab的)1.OpenFileIdOpen(char*name)概述:1)从4号寄存器读入文件名指针2)利用指针,从Machine的mainmemory(内存)中,读出文件名191)用文件名为参数,调用filesystem的open函数,打开文件,返回OpenFile指针(在Nachos系统中,OpenFile相当于是文件描述符)2)将OpenFile指针写回machine的2号寄存器(machine->WriteRegister(2,(int)openfile))3)PC前移代码:(O

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。