欢迎来到天天文库
浏览记录
ID:48737906
大小:465.50 KB
页数:13页
时间:2020-01-21
《Lab1_Nachos系统调用.ppt》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、Nachos系统调用实验week7目录系统调用概述时间安排实验要求系统调用概述1/6系统调用的概念将一些同硬件或者和操作系统功能有密切联系的一部分常用指令序列抽取出来,使它们成为操作系统本身的一部分,这就是所谓的系统调用系统调用概述2/6系统调用概述一般的UNIX操作系统提供几十条甚至上百条系统调用,系统调用的多少取决于操作系统的复杂程度及其主要的适用范围。只有用户态的程序才能进行系统调用,进行系统调用后的状态变成系统态,一般程序在系统态运行会有较高的优先级。系统调用作为操作系统的一部分,它们是长驻
2、内存的。操作系统提供的系统调用太少,会影响用户程序的执行效率和用途;因为不是每种应用都会用到所有的系统调用,系统调用数目太多,则会使得操作系统的核心过于庞大而同样影响系统的效率。系统调用概述3/6Nachos系统调用Nachos的系统调用函数定义在Userprogksyscall.h头文件中,其运行机制与linux的系统调用相似。在该文件中定义了两个系统调用,分别为:SysHalt():实现中断操作SysAdd():实现两个数的相加操作系统调用概述4/6以Halt系统调用为例进行分析:在Nacho
3、s中,系统调用的其它异常陷入的入口处理函数都是Userprog下的ExceptionHandler函数,只是陷入的类型为SyscallException。在test目录下的start.s模块中描述了具体的系统调用过程.globlHalt.entHaltHalt:addin$2,$0,SC_HaltsyscallJ$31.endHalt其中addin$2,$0,SC_Halt语句的作用是在r2寄存器中存放系统调用的类别码SC_Halt,即Halt系统调用。系统调用概述5/6voidExceptionH
4、andler(ExceptionTypewhich){//取出系统调用代码inttype=machine->ReadRegister(2);DEBUG(dbgSys,"ReceivedException"<5、;ASSERTNOTREACHED();break;default:cerr<<"Unexpectedsystemcall"<6、MIPS编译决定了参数传递的以下规则参数1:r4寄存器参数2:r5寄存器参数3:r6寄存器参数4:r7寄存器时间安排实验一:Nachos系统调用week10~week12实验二:Nachos线程管理模块升级week13~week14实验三:Nachos内存管理模块升级week15~week17实验一要求实现Nachos的基本系统调用:Write,Read,Exec,Join/code/test/shell.c#include“syscall.h”intmain(){……Write(prompt,2,7、output);……}/code/userprog/syscall.h#defineSC_Write8intWrite(char*buffer,intsize,OpenFileIdid);/code/test/start.s#include"syscall.h”start:jalmainmove$4,$0jalExit.end__startWrite:addiu$2,$0,SC_Writesyscallj$31.endWriteexecutionstartsfromhere/code/userpro8、g/Exception.cccaseSC_Write:result=SysWrite();/code/userprog/ksyscall.hintSysWrite(){}generateahardwaretrapintonachoskernelRaiseException()/code/machine/Mipssim.cc实验提示----执行用户程序编译:1)code/test目录下make产生shell.noff2)code/build.linux目录下make产生
5、;ASSERTNOTREACHED();break;default:cerr<<"Unexpectedsystemcall"<6、MIPS编译决定了参数传递的以下规则参数1:r4寄存器参数2:r5寄存器参数3:r6寄存器参数4:r7寄存器时间安排实验一:Nachos系统调用week10~week12实验二:Nachos线程管理模块升级week13~week14实验三:Nachos内存管理模块升级week15~week17实验一要求实现Nachos的基本系统调用:Write,Read,Exec,Join/code/test/shell.c#include“syscall.h”intmain(){……Write(prompt,2,7、output);……}/code/userprog/syscall.h#defineSC_Write8intWrite(char*buffer,intsize,OpenFileIdid);/code/test/start.s#include"syscall.h”start:jalmainmove$4,$0jalExit.end__startWrite:addiu$2,$0,SC_Writesyscallj$31.endWriteexecutionstartsfromhere/code/userpro8、g/Exception.cccaseSC_Write:result=SysWrite();/code/userprog/ksyscall.hintSysWrite(){}generateahardwaretrapintonachoskernelRaiseException()/code/machine/Mipssim.cc实验提示----执行用户程序编译:1)code/test目录下make产生shell.noff2)code/build.linux目录下make产生
6、MIPS编译决定了参数传递的以下规则参数1:r4寄存器参数2:r5寄存器参数3:r6寄存器参数4:r7寄存器时间安排实验一:Nachos系统调用week10~week12实验二:Nachos线程管理模块升级week13~week14实验三:Nachos内存管理模块升级week15~week17实验一要求实现Nachos的基本系统调用:Write,Read,Exec,Join/code/test/shell.c#include“syscall.h”intmain(){……Write(prompt,2,
7、output);……}/code/userprog/syscall.h#defineSC_Write8intWrite(char*buffer,intsize,OpenFileIdid);/code/test/start.s#include"syscall.h”start:jalmainmove$4,$0jalExit.end__startWrite:addiu$2,$0,SC_Writesyscallj$31.endWriteexecutionstartsfromhere/code/userpro
8、g/Exception.cccaseSC_Write:result=SysWrite();/code/userprog/ksyscall.hintSysWrite(){}generateahardwaretrapintonachoskernelRaiseException()/code/machine/Mipssim.cc实验提示----执行用户程序编译:1)code/test目录下make产生shell.noff2)code/build.linux目录下make产生
此文档下载收益归作者所有