您的当前位置是:第七章 操作系统接口>>学习内容>>知识点三

观看视频7.3学习本节知识点


一、程序接口

程序接口是操作系统专门为用户程序设置的,也是用户程序取得操作系统服务的唯一途径。程序接口通常是由各种类型的系统调用所组成。系统调用提供了用户程序和操作系统之间的接口,应用程序通过系统调用实现其与操作系统的通信,并可取得它的服务。系统调用不仅可供所有的应用程序使用,而且也可供操作系统自身的其他部分,尤其是命令处理程序使用。

二、系统调用的基本概念

1.系统调用的概念

系统调用是应用程序请求操作系统内核完成某功能时的一种过程调用,是一种特殊的过程调用。

2.系统调用与一般过程调用的区别

①运行不同的系统状态。

一般过程调用,其调用程序和被调用程序都运行在相同的状态――系统态和用户态;而系统调用是调用程序运行在用户态,而被调用程序运行在系统状态。

②通过软中断进入。

一般过程调用不涉及到系统状态的转换,可直接由调用过程转向被调用过程。但在运行系统调用时,由于调用和被调用过程是工作在不同的系统状态,因而不允许由调用过程直接转向被调用过程。通常都是通过软中断机制,先由用户态转换为系统态,经核心分析后,才能转向相应的系统调用处理子程序。

③返回问题。

在采用了抢占式调度方式的系统中,在被调用过程执行完后,要对系统中所有要求运行的进程做优先权分析。当调用进程仍具有最高优先级时,才返回到调用进程继续执行,否则,将引起重新调度,以便让优先权最高的进程优先执行。此时,将把调用进程放入就绪队列。

④嵌套调用。

系统调用可以嵌套进行,在一个被调用过程的执行期间,还可以利用系统调用命令去调用另一个系统调用。最大深度为6。如图7-3所示。

图7-3 系统功能调用

三、系统调用的类型

1.进程控制类

①创建和终止进程

②获得和设置进程属性:进程标识符、进程属性、最大允许执行时间等。

③等待某事件出现

2.文件操纵类

①创建和删除文件。

②打开和关闭文件。

③读和写文件。

④建立目录

⑤移动文件的读/写指针

⑥改变文件属性

3.进程通信类

①消息传递方式

当系统中采用消息传递方式时,在通信前,必须先打开一个连接。为此,应由源进程发出一条打开连接的系统调用open connection,而目标进程则应利用接受连接的系统调用accept connection表示同意进行通信;然后,在源和目标进程之间便可开始通信。可以利用发送消息的系统调用send message或者用接收消息的系统调用receive message来交换信息。通信结束后,还须再利用关闭连接的系统调用close connection结束通信。

②共享存储区方式

在利用共享存储区进行通信之前,须先利用建立共享存储区的系统调用,来建立一个共享存储区,再利用建立连接的系统调用将该共享存储区连接到进程自身的虚拟空间上,然后便可利用读和写共享存储区的系统调用实现相互通信。

四、系统调用的实现

系统调用的实现与一般过程调用的实现相比,两者之间有很大差异。对于系统调用 ,控制是由原来的用户态转换为系统态,这是借助于中断和陷入机制来完成的,在该机制中包括中断和陷入硬件机构及中断与陷入处理程序两部分。

1.中断和陷入硬件机构

①中断

中断是指CPU对系统发生某事件时的一种响应。当中断发生时:

CPU暂停正在执行的程序,在保留现场后自动地转去执行该事件的中断处理程序,执行完后,再返回到原程序的断点处继续执行。图7-4表示中断时CPU的活动轨迹。

图7-4 中断时的CPU轨迹

②陷入

中断可分为外中断和内中断。

所谓外中断是指磁盘中断、打印机中断等,而内中断是指由于CPU内部事件悊引起的中断,如程序出错(非法指令、地址越界等)、电源故障等。内中断被译为“捕获”或“陷入”。

通常,陷入是由于执行了现行指令所引起的,而中断则是由于系统中某事件引起的,该事件与现行指令无关。

③中断向量和陷入向量

为了处理上的方便,通常都是针对不同的设备编制不同的中断处理程序,并把该程序的入口地址放在特定的内存单元中。此外,不同的设备也对应着不同的处理机状态字PSW,且把它放在与中断处理程序入口指针相邻接的特定单元中。在进行中断处理时,只要有了这样两个字,便可转入相应设备的中断处理程序,重新装配处理机的状态字和优先级,进行对该设备的处理。因此把这两个字称为中断向量。相应地,把存放这两个字的单元称为中断向量单元。类似地,对于陷入,也有陷入向量。由所有的中断向量和陷入向量构成了中断向量和陷入向量表,如图7-5所示。

图7-5 中断向量与陷入向量表

2.系统调用号和参数的设置

每一条系统调用都含有若干个参数,在执行系统调用时,如何设置系统调用所需的参数,也有以下两种方式:

①直接将参数送入相应的寄存器中

其优点是简单,缺点是由于寄存器数量有限,因而传送的参数也有限。MS-DOS采用此种方式。

②参数表方式

将系统调用所需的参数放入一张参数表中,再将指向该参数表的指针放在某个指定的寄存器中。

UNIX系统采用此种方式。

该方式又可进一步分成直接和间接两种方式,如图7-6所示。在直接参数方式中,所有的参数值和参数的个数N,都放入一张参数表中;而在间接参数方式中,则在参数表中仅存放参数个数和指向真正参数数据表的指针。

图7-6 系统调用的参数传送方式

3.系统调用的处理步骤

①将处理机状态由用户态转为系统态,由硬件和内核程序进行系统调用的一般性处理,即首先保护被中断进程的CPU环境,将处理机状态字PSW、程序计数器PC、系统调用号、用户栈指针以及通用寄存器内容等,压入堆栈,然后,将用户定义的参数传送到指定的地方保存起来。

②分析系统调用类型,转入相应的系统调用处理子程序。在系统中配置了一张系统调用入口表,表中的每个表目都对应一条系统调用。其中包含该系统调用自带参数的数目、系统调用处理子程序的入口地址等。核心可利用系统调用号去查找该表,即可找到相应处理子程序的入口地址而转去执行它。

③在系统调用处理程序执行完后,应恢复被中断的或设置新进程的CPU现场,然后返回被中断进程或新进程,继续往下执行。

4.系统调用处理子程序的处理过程

进入Creat的处理子程序后,核心将根据用户给定的文件路径名Path, 利用目录检索过程,去查找指定文件的目录项。查找目录的方式可以用顺序查找法,也可用Hash查找法。如果在文件目录中找到了指定文件的目录项,表示用户要利用一个已有文件来建立一个新文件。但如果在该已有(存)文件的属性中有不允许写属性,或者创建者不具有对该文件进行修改的权限,使认为是出错而做出错处理;若不存在访问权限问题,便将已存文件的数据盘块释放掉,准备写入新的数据文件。如未找到指名文件,则表示要创建一个新文件,核心便从其目录文件中找出一个空目录项,并初始化该目录项,包括填写文件名、文件属性、文件建立日期等,然后将新建文件打开。

系统调用与一般的过程调用有什么区别?