**
Nachos-3.4 系统调用 实现Create Open Read Write Close
**
我使用的是32位,ubuntu16.04 虚拟机是VMware Nachos是3.4版本的
[简要说明]
本学期的实验课重点来了,就是关于nachos的实验。上上个星期,我开始接触到Nachos ,准确的说是Nachos-4.1。其实我大部分时间都是花在搭建Nachou-4.1的工作上,大概花了两周,都没搭好。我最开始是在ubuntu上搭建的,之后又在red hat linux 上搭建。然后又是ubuntu 这个过程真的有点想吐。还好最后将Nachos-4.1和Nachos-3.4的安装都弄好了,不过最近太忙了,但是我想之后还是会写一篇文章的吧,相信之后会有无数的学弟学妹们,走在被Nachos坑的路上。
好,进入正题。今天主要是讲Nachos-3.4的系统调用。
我将从三个方面来讲
1. Nachos-3.4系统调用的整个过程
2. 分析系统调用过程,我们修改内容步骤介绍
3. Create,Open,Write,Read,Close这五个系统调用函数的实现
1. Nachos-3.4系统调用的整个过程
1. Nachos-3.4源码的结构
如上图所示:Nachos-3.4 code 文件夹下内容,我将其大致分为三部分
bin:
通过交叉编译器将主机运行的程序转换为Nachos用户态可运行的程序(出现coff2noff文件)
注意:我们知道Nachos实际上是相当与一个虚拟机,我们通过 nachos -x uerprogram 这样的命令来运行用户写的程序,用户写出来的.c文件只用通过交叉编译器mips以及这个bin文件下内程序转换为coff2noff文件才能在nachos下运行。nachos核心部分:
filesys:文件系统管理
machine:模拟机器硬件
network:网络系统管理
threads:内核线程管理
vm:虚拟内存与用户相关:
test:用户态程序
userprog:用户程序管理
注意:下面的Makefile主要是用于nachos整体编译安装
2. Nachos-3.4运行用户态程序和目录结构间的关系
如上图,可以将自己写的程序和nachos分开,分为三步:
- 首先你在/nachos-3.4/code/这个路径下通过make 将nachos整体编译,此时nachos相当于准备好了,它是一个虚拟机
- 其次你在/nachos-3.4/code/test 这个目录下编写自己的.c文件,修改Makefile,然后make(这个过程会调用mips) 生成一个coff2noff文件
最后通过在/nachos-3.4/code/test这个路径下 让准备好的nachos 和准备好的用户程序结合起来,也就是用户程序开始调用系统,nachos为用户程序提供支持~~
**整个过程中使用的指令: /nachos-3.4/code/下 make
/nachos-3.4/code/test 下 编写your.c(举个栗子) 文件 ,修改Makefile,make
/nachos-3.4/code/test下 ../userprog/nachos -x your (-x指运行用户程序)**
3. Nachos-3.4系统调用过程中调用的函数
这个部分有一定难度,一定是要参考Nachos-3.4的源代码看才行
//以下是函数出现的线性顺序
main.cc //nachos整个程序的入口
startProcess() //根据-x 知道是要运行用户程序,由此调用此函数(在main.cc中)
machine->run() //StartProcess函数将可执行文件加载到地址空间后,交给当前执行线程进行处理。调用machine->Run()函数。
OneInstruction()
/*Run函数模拟了CPU的执行过程,每次执行一条指令。然后时钟向前并等待下次中断。执行指令函数为OneInstruction(machine目录下mipssim.cc中)。每一条指令是一个Instruction类,该类定义在machine.h中。Instruction类中有两个重要的参数:opCode和一个寄存器。*/
RaiseException() //在OneInstruction函数中,当操作指令为OP_SYSCALL时会使用RaiseException函数触发中断。
interrupt->setStatus(SystemMode)将系统切换到内核态
Exce