|
为了实现系统服务请求,操作系统提供统一的系统功能调用,采用统一的调用方式——访问管理程序来实现对这些功能的调用。下面分别进行讨论。
3.3.1 系统功能调用
对于用户所需要的功能,由系统设计者事先编制好能实现这些功能的例行子程序,作为操作系统程序模块的一部分。但是,这些例行子程序是不能像一般的用户子程序那样可随便调用的,因为这些能实现各种功能的例行子程序是操作系统的程序部分,它运行时,机器处于管态(管理程序状态),而用户程序运行时,机器处于目态。所以,用户程序对这些例行子程序的调用绝对不能像一般的子程序调用,而应以一种特殊的调用方式——访管方式来实现。而要实现访管必须提供系统功能调用。下面讨论什么是系统功能调用。
用户所需要的功能,有些是比较复杂的,硬件不能直接提供,只能通过软件的程序来实现。而有些功能,硬件有相应的指令,如启动外设工作,硬件就有 I/O 指令。但配置了操作系统后,对系统资源的分配、控制不能由用户干预,而必须由操作系统统一管理。所以,对于这样一类功能,也需有相应的控制程序来实现。为了实现对这些事先编制好的、具有特定功能的例行子程序的调用,现代计算机系统一般提供自愿进管指令,其指令形式为:
svc n
其中, svc 表示机器自愿进管指令的操作码记忆符, n 代地址码。 Svc 是 supervisor call (访问管理程序)的缩写,所以 svc 指令又称为访管指令。当处理机执行到这一条指令时就发生中断,该中断称为访管中断(或自愿进管中断),它表示正在运行的程序对操作系统的某种需求。借助中断,使机器状态由目态转为管态。为了使控制能转到用户当前所需要的那个例行子程序去,这就需要指令提供一个地址码。这个地址码表示系统调用命令的功能号,它是操作系统提供的众多的例行子程序的编号。在访管指令中填入相应的号码,就能使控制转到特定的例行子程序去执行,以完成用户当前所需要的服务。这样一个带有一定功能号的访管指令定义了一个系统调用命令。因此,系统调用命令是用户在程序一级请求操作系统服务的一种手段,它不是一条简单的硬指令,而是带有一定功能号的“访管指令”。它的功能并非由硬件直接提供,而是由操作系统中的一段程序完成的,即由软件方法实现的。有些书中,也把系统调用命令称为广义指令或系统宏指令。
用户可以用带有不同功能号的“访管指令”来实现各种不同的功能。可以这样说,系统调用命令是利用“访管指令”定义的指令。操作系统服务例程与一般子程序的区别在于,前者所实现的功能都是与计算机系统本身有关的,对前者的调用是通过一条“访管指令”来实现的。不同的程序设计语言调用操作系统服务的方式是不同的,它们有显式调用和隐式调用之分。在汇编语言中是直接使用系统调用命令对操作系统提出各种要求的,因为在这种情况下,系统调用命令具有汇编指令的形式。而在高级语言中一般是隐式的调用(经编译后转成某种直接调用)。
3.2.2 系统调用的实现
操作系统基本服务级是通过系统调用来处理的,系统调用提供运行程序和操作系统之间的界面。实现这些服务是通过系统服务请求机构提供的。这一机构也称为管理程序调用。
系统服务请求( SSR —— System Service Request )机构本质上是一个自陷门( trap door )。 SSR 的执行通常取决于计算机的结构,它由特定的硬件(或软件)指令实现对操作系统某一服务例程的调用。它的执行要发生访管中断。
系统功能调用的格式和功能号的解释随机器的不同而不同,但对任何不同的机器都有以下共同的特点:
①每个系统调用对应一个功能号,要调用操作系统的某一特定例程,必须在访管时给出对应的功能号。
②按功能号实现调用的过程大体相同,即都是由软件通过对功能号的解释分别转入对应的例行子程序。
图 3.3 说明了系统调用的执行过程。为了实现系统调用,必须事先准备好能实现各种功能的例行子程序,如 sub 0 ,sub 1 , … ,sub n , … sub m ,然后要建造例行子程序入口地址表。假定该表首址为 a ,每个例行子程序的入口地址占一个字长,将各例行子程序的入口地址 # sub 0 ,#sub 1 , … ,#sub n , … #sub m (即 a 0 , a 1 ,… a n ,… ,a m ),分别送入 a+0,a+1, … ,a+n, … ,a+m 中。另外,系统还需编制访管中断处理程序。其功能是:做常规的现场保护后,取 n 值,然后安排一条转移指令,按 a+n 单元职的内容转移。而在用雇用户程序中,在需要操作系统服务的地方安排一条系统调用命令。这样,当程序执行到这一条命令时,就发生中断,系统由目态转为管态,操作系统的访管中断处理程序得到控制权,它将按系统调用的功能号,借助例行子程序入口地址表转到相应的例行程序去执行,在完成了用户所需要的服务功能后,退出中断,返回到用户程序的断点继续执行。

图 3.3 系统调用的执行过程 |