操作系统课内实验指导书

操作系统课内实验指导书

ID:20434093

大小:1.57 MB

页数:39页

时间:2018-10-11

操作系统课内实验指导书_第1页
操作系统课内实验指导书_第2页
操作系统课内实验指导书_第3页
操作系统课内实验指导书_第4页
操作系统课内实验指导书_第5页
资源描述:

《操作系统课内实验指导书》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、操作系统原理课内实验指导书实验一:进程管理实验指导准备知识1.基本概念1)进程的概念2)进程与程序的区别3)并发执行的概念4)进程互斥的概念5)进程通信的基本概念2.系统调用系统调用是一种进入系统空间的办法。通常,在OS的核心中都设置了一组用于实现各种系统功能的子程序,并将他们提供给程序员使用。程序员在需要OS提供某种服务的时候,便可以调用一条系统调用命令,去实现希望的功能,这就是系统调用。因此,系统调用就像一个黑箱子一样,对用户屏蔽了操作系统的具体动作而只是提供了调用功能的接口。不同的操作系统有各自的系统调用方法。如WindowsAPI,便是Windows的系统调用。

2、Linux的系统调用与之不同的是源于Linux内核代码完全公开,所以可以细致地分析出其系统调用的机制。2.1系统调用和普通函数的区别1)运行于不同的状态用户程序可以通过系统调用进入系统空间,在核心态执行;而普通函数则只能在用户空间当中进行。2)通过软中断切断由于用户程序使用系统调用后要进入系统空间,所以需要调用一个软中断;而普通函数在被调用时则没有这个进程。2.2系统调用的类型系统调用的作用与它的宿主操作系统有密切关系。根据操作系统的性质不同,它们所提供的系统调用会有一定的差异,不过对于普通操作系统而言,应该具有下面几类系统调用:Ø进程控制类Ø文件操纵类Ø进程通信类Ø信

3、息维护类2.3系统调用的实现机制由于操作系统的不同,其系统调用的实现方式可能不一样,然而实现机制应该大致相同的,一般包含下面两个步骤。1)设置系统调用号在系统当中,往往设置多条系统调用命令,并赋予每条系统调用命令一个惟一的系统调用号。根据分配系统调用号方式的不同分为:直接方式和参数表方式。系统调用的参数表方式分为直接和间接两种方式,如图1所示。图1系统调用的参数表方式2)处理系统调用操作系统中有一张系统调用入口表。表中的每个表目都对应一条系统调用命令,它包含有该系统调用自带参数的数目、系统调用命令处理程序的入口地址等等。操作系统内核便是根据所输入的系统调用号在该表中查找

4、到相应的系统调用,进而转入它的入口地址去执行系统调用程序。1.Linux的系统调用机制Linux的系统调用是通过中断机制实现的。中断这个概念涉及计算机系统结构方面的知识,显然它与微处理器等硬件有着密不可分的关系。中断(Interrupt),是指计算机在执行期间,系统内发生任何非寻常的或非预期的急需处理事件,使得CPU不得不暂时中断当前正在执行的程序而转去执行相应的事件处理程序,待处理完毕后再返回原来被中断处继续执行的进程。其发生一般而言是“异步”的。换句话说就是在无法预测的情况下发生的(如系统掉电)。所以计算机的软硬件对于中断的相应反应完全是被动的。软中断,是对硬中断的

5、一种模拟,发送软中断就是向接收进程的proc结构中的相应项发送一个特定意义的信号。软中断必须等到接收进程执行时才能生效的。陷阱(Trap),即由软件产生的中断,指处理机和内存内部产生的中断,它包括程序运算引起的各种错误,如地址非法、校验错误、页面失效等。它有专门的指令,如X86中的“INTn”,在程序中是有意产生的。所以说陷阱是主动的、“同步”的。异常(Exception),一般也是异步的,大多是由于不小心或无意造成的,比如在进行除法操作时除数为0,就会产生一次异常。2.相关函数fork函数fork()函数用于创建一个新进程(子进程)。其调用格式为:intfork();

6、正确返回:等于0,创建子进程,从子进程返回的ID值。等于1,从父进程返回的子进程的进程ID值。错误返回:等于-1,创建失败。1)子进程和父进程的调度执行子进程被创建后就进入就绪队列和父进程分别分别独立地等待调度。子进程继承父进程的程序段代码,子进程被调度执行时,也会和父进程一样从fork()返回。从共享程序段代码的角度来看,父进程和子进程所执行的程序代码是同一个,在内存中只有一个程序段副本;但是从编程的角度来看,为了使子进程和父进程做不同的事,要在程序中区分父进程和子进程的代码段,这就需要借助于从fork()带回的值来标志当前程序身份。从fork()返回后,都会执行如下

7、语句:pid=fork();得到返回的值pid,有如下几种情况:(1)若pid小于0,则表示fork()出错,相应语句为if(pid<0){printf("forkerror");exit(0);}(2)若pid等于0,则表示当前进程是子进程,继续执行的后面的代码是子进程要做的事,相应的语句可写成if(pid==0){printf("Thechildprocessisrunningnow!");exit(0);}(3)若pid大于0,则表示当前进程是父进程,继续执行的后面的代码是父进程要做的事,相应的语句可写成if(pid>0){

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。