- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
1实习报告模板
系统调用实习报告姓名:文世为 学号:1100012968
日期:2014.5.12目录
内容一:总体概述 3
内容二:任务完成情况 3
任务完成列表(Y/N) 3
具体Exercise的完成情况 3
内容三:遇到的困难以及解决方法 4
内容四:收获及感想 5
内容五:对课程的意见和建议 5
内容六:参考文献 5内容一:总体概述
本次试验主要是了解nachos系统调用的实现机制,并实现相关的系统调用。
【用简洁的语言描述本次lab的主要内容;阐述本次lab中涉及到的重要的概念,技术,原理等,以及其他你认为的最重要的知识点。这一部分主要是看大家对lab的总体的理解。
要求:简洁,不需要面面俱到,把重要的知识点阐述清楚即可。】
内容二:任务完成情况
任务完成列表(Y/N)
Exercise1 Exercise2 Exercise3 Exercise4 Exercise5 Exercise6 第一部分 Y/N Y/N Y/N第二部分 Y/N Y/N Y/N第三部分 Y/N第四部分 Y/N Y/N Y/N Y/N Y/N Y/N
具体Exercise的完成情况
第一部分
Exercise1源代码阅读
阅读与系统调用相关的源代码,理解系统调用的实现原理。
code/userprog/syscall.h
code/userprog/exception.cc
code/test/start.s
下面我从系统调用的流程角度来叙述上述文件。
当用户程序调用系统调用接口时,Nachos会执行与此系统调用相对应的Stub.系统调用的Stub定义在start.s文件中.Stub主要完成三件事情.
将系统调用号写入2号寄存器
执行syscall指令
返回到31号寄存器存放的地址处,该地址为用户程序返回地址.这里说的系统调用号,是Nachos为系统调用接口指定的一个整形编号,该编号定义在syscall.h文件中,syscall.h文件中还定义了系统调用接口.默认情况下,Nachos定义了11个系统调用号,每个号对应一个系统调用.比如SC_Halt为0,对应着系统调用Halt.
当系统执行syscall指令时,在MIPS处理器的模拟器中会捕获该指令,对应的代码在mipssim.cc的OneInstruction方法中exception.cc中的RaiseException函数中,
interrupt-setStatusSystemMode,此时系统进入核心态,接着执ExceptionHandlerwitch,ExceptionHandler方法在exception内进行实现exceptoinHandler首先从2号寄存处中取出系统调用号,然后判断发生的异常是不是SyscallException和系统调用好是不是SC_Halt如果是,则调用interrupt-Halt执行Halt方法的具体代码.注意这儿有两个条件判断,一是判断不是系统调用异常,而是根据系统调用号执行系统调用的具体代码.此处只对Halt系统调用进行了处理,我们可以在这儿扩展其他系统调用的处理代码。
执行完ExceptionHandler后,会回到machine.cc的RaiseException代码,继续执行interrupt-setStatusUserModel,重新回到用户态.RaiseException方法执行完后,回到Stub继续执行返回用户程序指令j $31。回到用户程序继续执行。
Exercise1
系统调用实现
类比Halt的实现,完成与文件系统相关的系统调用:Create, Open,Close,Write,Read。Syscall.h文件中有这些系统调用基本说明。
在ExceptionHandler中加入对这几个系统调用的判断和处理即可。
从寄存器读取参数时,如果寄存器存放的是地址,需要从该地址中读取字符串,则通过以下函数实现。
由于系统调用不让PC+4,我们需要自己实现PC+4:
令PC寄存器指向下一条指令的函数为machine-AdvancePC。在machine.cc中实现。
处理Create调用的代码为:
处理Open调用的代码为:
处理Close调用的代码为:
处理Write调用的代码为:
处理Read调用的代码为:Exercise2编写并运行用户程序,调用 练习2中所写的系统调用,测试其正确性。
首先编写create.c如下:
#include “syscall.h”
int main
Create “wsw.txt”, “/root”,1;
Halt;
return 0;
键入命令行 nachos -x create /root;
在编写write.c如下:
#include
您可能关注的文档
最近下载
- 2025呼和浩特粮油收储有限公司招聘18名工作人员笔试备考题库及答案解析.docx VIP
- 一种含电极的智能指环、灌胶治具及其封装工艺.pdf VIP
- The Wonderful Wizard of Oz-绿野仙踪(带动画) 课件.pdf VIP
- 2025至2030中国老年照护行业市场发展分析及竞争格局与投资发展报告.docx
- 2010年考研英语真题及解析.pdf VIP
- 浙江省强基联盟2024-2025学年高一上学期10月联考生物试卷.docx VIP
- 第一章 应急管理导论-2.ppt VIP
- 大连理工工程力学课件0.pdf VIP
- 大行距造林中杨树营养面积与大行距经济效益的研究.docx VIP
- 2025学宪法讲宪法知识竞赛题库及参考答案.pptx
文档评论(0)