- 1、本文档共16页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
nachos-La的b6实习报告
系统调用实习报告
目录
内容一:总体概述 3
内容二:任务完成情况 3
任务完成列表(Y/N) 3
具体Exercise的完成情况 3
内容三:遇到的困难以及解决方法 16
内容四:收获及感想 16
内容五:对课程的意见和建议 16
内容六:参考文献 16
内容一:总体概述
本次lab的主要内容是实现nachos定义的系统调用。理论方面,我们需要了解nachos系统调用的实现原理,实践方面,我们需要实现文进系统相关系统调用和用户程序相关系统调用,并且编写用户程序验证相关系统调用的正确性。
内容二:任务完成情况
任务完成列表(Y/N)
Exercise1 Exercise2 Exercise3 Exercise4 Exercise5 Y Y Y Y Y
具体Exercise的完成情况
一、理解Nachos系统调用
Exercise 1 源代码阅读
阅读与系统调用相关的源代码,理解系统调用的实现原理。
code/userprog/syscall.h
code/userprog/exception.cc
code/test/start.s
userprog/syscall.h定义nachos的系统调用,主要包括系统调用号和系统调用函数,内核通过识别用户程序传递的系统调用号确定系统调用类型
已经实现的系统调用包括
void Halt();
关闭nachos虚拟机,打印性能统计信息
需要实现的系统调用包括:
3种系统调用涉及地址空间:
1)、void Exit(int status);
用户程序完成,status = 0表示正常退出
2)、SpaceId Exec(char *name);
加载并执行名字是name的Nachos可执行文件,返回其地址空间的标志符
SpaceId实际是整型,标识地址空间
3)、int Join(SpaceId id);
等待标志符为id的用户线程运行完毕,返回其退出状态
5种系统调用涉及文件系统:
1)、void Create(char *name);
创建文件名name的Nachos文件
、OpenFileId Open(char *name);
打开文件名name的Nachos文件,返回打开文件标志符
OpenFileId实际是整形,标识打开文件
3)、void Write(char *buffer, int size, OpenFileId id);
向标志符是id的文件写入buffer中长度为size字节的数据
4)、int Read(char *buffer, int size, OpenFileId id);
从标志符是id的文件读取长度为size字节的数据存入buffer,返回实际读取的字节数
5)、void Close(OpenFileId id);
关闭标志符是id的文件
2种系统调用涉及用户级线程,用于支持多线程用户程序:
1)、void Fork(void (*func)());
创建和当前线程拥有相同地址空间的线程,运行func指针指向的函数
2)、void Yield();
当前线程让出CPU
code/userprog/exception.cc定义进行异常处理的ExceptionHandler函数,主要流程是根据异常信息处理不同异常,包括系统调用
目前支持的异常:
NoException, // 正常
SyscallException, // 系统调用
PageFaultException, // 缺页(页表/快表)
ReadOnlyException, // 访问只读页面
BusErrorException, // 总线错误
AddressErrorException, // 访问地址对齐错误/超出范围
OverflowException, // 算数溢出
IllegalInstrException, // 非法指令
NumExceptionTypes
处理系统调用时,需要从2号寄存器获得系统调用号确定系统调用类型
code/test/start.s是辅助用户程序运行的汇编代码,主要包括初始化用户程序和系统调用相关操作
(1)初始化用户程序:通过调用main函数运行用户程序
.globl __start
.ent __start
__start:
jal main //跳转到main函数执行用户程序
move $4,$0 //main函数返回
//r4寄存器存入0,作为下面调用Exit参数
jal Exit
.end __startHalt:
a
您可能关注的文档
- LTE 的topn处理.docx
- LTE-EP的C网络介绍.ppt
- LTE RF优化的介绍.ppt
- LoRa物联网应的用解决方案.pptx
- LTE基本概念的及体系结构.pptx
- LTE-基的础知识全解.ppt
- LTE基本原理的和系统架构.ppt
- Linu的x虚拟内存管理进阶4.pdf
- LTE的系统消息.ppt
- LTE大话务冲击应对的措施.ppt
- 英语人教PEP版八年级(上册)Unit4+writing+写作.pptx
- 人美版美术四年级(上册)8 笔的世界 课件 (1).pptx
- 人美版美术七年级(上册)龙的制作.pptx
- 英语人教PEP版六年级(上册)Unit 2 第一课时.pptx
- 数学苏教版三年级(上册)3.3 长方形和正方形周长的计算 苏教版(共12张PPT).pptx
- 音乐人教版八年级(上册)青春舞曲 课件2.pptx
- 音乐人教版四年级(上册) 第一单元 音乐知识 附点四分音符|人教版.pptx
- 英语人教PEP版四年级(上册)Unit 6 Part B let's learn 1.pptx
- 道德与法治人教版二年级(上册)课件-3.11大家排好队部编版(共18张PPT).pptx
- 人美版美术七年级(上册)《黄山天下奇》课件1.pptx
文档评论(0)