系统调用是获取操作系统服务的一系列接口,它们通常用C/C++编写,对于一些底层操作也采用汇编语言编写。这些接口提供最基本的操作,是面向程序提供的——程序员通过引用一系列的系统调用编写程序,操作系统在执行程序时按有关描述依次执行系统调用,提供相应的服务。然而,因为系统调用的操作过于基本,所以即使任务非常简单,程序也要多次执行系统操作,使用大量的系统调用;另外,系统调用的指令名称和功能因系统而异,所以直接使用系统调用编写的程序可移植性差,无法跨平台实现;同时,真实系统调用对参数传递要求很繁琐。实际中,程序员通常使用对编程更友好的应用程序接口(以下简称API)设计程序。API为应用程序员调用实际的系统调用,所以程序员只需要熟悉并组合运用API中的指令进行编程,以避免上文提到的三种问题。在比较常用的几种操作系统中,API都被内置在一个库中,通过系统调用接口进行调用。在用户程序调用系统调用时,操作系统进入内核态并执行API中相应的函数。执行完毕后,系统转换回用户模式,通过系统调用接口把结果返回给用户。在执行系统调用时,需要为之传递相应的参数,传递的方式包括存入寄存器、存入内存和压入栈中等。
系统调用主要类型包括进程控制、文件管理、设备管理、信息维护、通信和安全保护等六种类型。
-
进程控制
进程是计算机任务的基本单元,操作系统通过系统调用对单一或多个进程进行全方面控制。首先,进程的创建和终止由系统调用实现,进程占用的内存空间由系统调用来分配或释放。在任务中,操作系统也需要通过系统调用装入进程并执行。其中,执行一个程序的进程可能需要装入并执行另一个程序。新进程可能在执行完后将控制权交还给原进程,也可能和原进程并发执行。在前者的情况下,原进程需要暂时挂起,等待新进程的执行。另外,在多进程并发执行时,操作系统通过系统调用获得并设置进程属性,以合理调配可用资源,规划进程的优先级。进程执行中可能出现错误,所以系统调用也被要求能正常或非正常地中断程序。在程序被中断后,控制权就被交给了命令解释器。同时,内存向磁盘写入一条错误信息,由调试器解释问题成因。之后,命令解释器会采取措施以消除这个错误,以继续执行命令,措施通常包括请求用户建议或直接跳转到下一个任务等。
-
文件和设备管理
对于文件的大部分基本操作由系统调用执行,主要包括创建、删除、打开、关闭、读写、重定位(解析相对地址)以及取得和设置属性等。如果文件系统是由目录结构所组织的,那么目录也需要同样的一套操作。如Windows系统中的文件夹也可以创建、打开和重命名等等。
设备表示操作系统控制的不同资源,包括实际存在的物理设备和抽象出来的虚拟设备。在多用户系统中,因为设备只能被单一用户使用,所以需要对设备设计请求和释放操作。用户通过请求来获得设备的使用权吗,在设备被分配给特定用户之后其他用户不能使用,被释放后方可重新被申请。在用户得到设备之后,可以对设备进行读写和重定位操作。
可以见得,因为设备和文件都可以视为为进程所用的资源(前者实体,后者虚拟),所以他们往往在操作系统表现出相同的特点,对他们的操作有共通之处。很多操作系统把设备和文件视为相同的对象,用同一套系统调用进行操作。对于一些针对文件或设备的细节操作,操作系统还会给出特定的操作。
-
信息维护
虽操作系统中有很多有关信息传递的操作,而这些操作也往往由系统调用实现。在操作系统中,当前时间、日期、用户数、操作系统版本号、空闲内存和磁盘空间等信息都是通过系统调用来访问和修改的。针对所有进程的信息,也有系统调用对其进行访问和控制。在调试程序时,和信息维护相关的系统调用发挥了巨大的功能,包括单步执行、内存转储和计时等。
-
通信
进程在执行中需要相互传递信息,以完成协同合作。以下介绍两种常见的通信模型:消息传递模型和共享内存模型。
消息传递模型通过系统调用,在进程之间建立一个连接,以实现信息交换。为了相互匹配,必须知道进程名和进程所在主机的主机名和IP地址。建立连接之后,通信源(客户机)和接收方(服务器)通过系统调用来传递信息。消息传递模型既可用于同一系统下进程的通信,也可用于通过网络向量的不同主机上的进程。
共享内存模型通过设立进程的公共区域来传递信息。进程所占据的内存原本不允许互访。通过系统调用,特定进程所占用的部分内存访问权限降低,变为半公开区域。指定的其他的进程可以访问此区域,这样不同的进程就可以在此区域读写数据,交换信息。这种机制存在一种变体,称为线程,在其*享内存是默认的。
-
保护与安全
针对进程和用户,保护对计算机各种资源的权限进行了设定,以控制对其的访问与修改。用户、进程的访问需求由系统调用提交,访问许可由系统调用下达。针对系统攻击或错误操作,安全提供了访问和修改系统属性的操作,以保证指令过程收到监督。
参考文献:
[1] AbrahamSilberschatz. 操作系统概念:Java实现:第7版:翻译版. 高等教育出版社, 2010.1;
[2] AbrahamSilberschatz. Operating System Concepts Essentials: 2nd ed. WileyOnline Library;
[3] 韩其睿. 操作系统原理. 清华大学出版社, 2013.8.