系统调用实习报告 善良的大姐姐 2015.5.3 2 目录 一:总体概述 ................................................................................... 3 二:任务完成情况 ............................................................................ 3 任务完成列表(Y/N) ................................................................ 3 具体 Exercise 的完成情况 ........................................................... 3 三:遇到的困难以及解决方法 ...................................................... 18 四:收获及感想 ............................................................................. 19 五:对课程的意见和建议 .............................................................. 19 六:参考文献 ................................................................................. 19 3 一:总体概述 自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:源代码阅读 任务:阅读与系统调用相关的源代码,理解系统调用的实现原理。 完成情况: 1. Syscall.h 概述: 1) 定义了每个系统调用对应的系统调用号 2) 声明了每个系统调用 2. Exception.cc 概述:对系统陷入进行处理。 1) 从machine的2号寄存器读入系统调用号 4 2) 执行对应的操作代码(需要自己完成) 3) (如果需要)将返回值写回Machine的2号寄存器 3. Start.s 概述:当用户程序执行一个系统调用的时候,将参数放入2号寄存器,然后跳转到exception.cc执行。以Halt为例: 4. 总结 当用户希望执行一条系统调用的时候: 1) 在用户程序中调用 2) 当这条语句被OneInstruction函数解析执行时,会判断出这是一条系统调...