简介
系统调用是指运行在使用者空间的程序向操作系统内核请求需要更高权限运行的服务。系统调用提供用户程序与操作系统之间的接口。生成系统调用是指应用程序或操作系统内核需要操作系统提供更高权限运行的服务时,必须使用系统调用命令。系统调用的类型不同,生成系统调用的类型一般也不相同,对于一般通用的 OS 而言,可将其所提供的系统调用分为:进程控制、文件操纵、通信管理和信息维护等几大类。
进程控制类系统调用这类系统调用主要用于对进程的控制,如创建一个新的进程和终止一个进程的运行,获得和设置进程属性等。
创建和终止进程的系统调用在多道程序环境下,为使多道程序能并发执行,必须先利用创建进程的系统调用来为欲参加并发执行的各程序分别创建一个进程。当进程已经执行结束时、 或因发生异常情况而不能继续执行时,可利用终止进程的系统调用来结束该进程的运行。
获得和设置进程属性的系统调用当我们创建了一个(些)新进程后,为了能控制它(们)的运行,应当能了解、 确定和重新设置它(们)的属性。这些属性包括: 进程标识符、进程优先级、最大允许执行时间等。此时,我们可利用获得进程属性的系统调用,来了解某进程的属性,利用设置进程属性的系统调用,来确定和重新设置进程的属性。
等待某事件出现的系统调用进程在运行过程中,有时需要等待某事件(条件)出现后方可继续执行。例如,一进程在创建了一个(些)新进程后,需要等待它(们)运行结束后,才能继续执行,此时可利用等待子进程结束的系统调用进行等待;又如,在客户/服务器模式中,若无任何客户向服务器发出消息,则服务器接收进程便无事可做,此时该进程就可利用等待(事件)的系统调用,使自己处于等待状态,一旦有客户发来消息时,接收进程便被唤醒,进行消息接收的处理。
文件操纵类系统调用对文件进行操纵的系统调用数量较多,有创建文件、删除文件、打开文件、关闭文件、读文件、写文件、建立目录、移动文件的读/写指针、改变文件的属性等。
创建和删除文件当用户需要在系统中存放程序或数据时,可利用创建文件的系统调用 creat,由系统根据用户提供的文件名和存取方式来创建一个新文件;当用户已不再需要某文件时,可利用删除文件的系统调用 unlink 将指名文件删除。
打开和关闭文件用户在第一次访问某个文件之前,应先利用打开文件的系统调用 open,将指名文件打开,即系统将在用户(程序)与该文件之间建立一条快捷通路。在文件被打开后,系统将给用户返回一个该文件的句柄或描述符;当用户不再访问某文件时,又可利用关闭文件的系统调用 close,将此文件关闭,即断开该用户程序与该文件之间的快捷通路。
读和写文件用户可利用读系统调用 read,从已打开的文件中读出给定数目的字符,并送至指定的缓冲区中;同样,用户也可利用写系统调用 write,从指定的缓冲区中将给定数目的字符写入指定文件中。read 和 write 两个系统调用是文件操纵类系统调用中使用最频繁的。1
进程通信类系统调用在 OS 中经常采用两种进程通信方式,即消息传递方式和共享存储区方式。 当系统中采用消息传递方式时,在通信前,必须先打开一个连接。为此,应由源进程发出一条打开连接的系统调用 open connection,而目标进程则应利用接受连接的系统调用 accept connection表示同意进行通信;然后,在源和目标进程之间便可开始通信。可以利用发送消息的系统调用 send message 或者用接收消息的系统调用 receive message 来交换信息。通信结束后,还须再利用关闭连接的系统调用 close connection 结束通信。
用户在利用共享存储区进行通信之前,须先利用建立共享存储区的系统调用来建立一个共享存储区,再利用建立连接的系统调用将该共享存储区连接到进程自身的虚地址空间上,然后便可利用读和写共享存储区的系统调用实现相互通信。
信息维护在 UNIX 系统中,设置了许多条用于系统维护的系统调用。
(1) 设置和获得时间。超级用户可利用设置时间的系统调用(stime),来设置系统的日期和时间。如果调用进程并非超级用户,则 stime 失败。一般用户可利用获得时间的系统调用ime 来获得当前的日期和时间。
(2) 获得进程和子进程时间(times)。利用该系统调用可获得进程及其子进程所使用的CPU 时间,其中包括调用进程在用户空间执行指令所花费的时间,系统为调用进程所花费的 CPU 时间、 子进程在用户空间所用的 CPU 时间、 系统为各子进程所花费的 CPU 时间等,并可将这些时间填写到一个指定的缓冲区。
(3) 设置文件访问和修改时间(utime)。该系统调用用于设置指名文件被访问和修改的时间。如果该系统调用的参数 times 为 NULL 时,文件主和对该文件具有写权限的用户,可将对该文件的访问和修改时间设置为当前时间;如果 times 不为 NULL,则把 times 解释为指向 utim buf 结构的指针,此时,文件主和超级用户能将访问时间和修改时间置入 utim buf结构中。
(4) 获得当前 UNIX 系统的名称(uname)。利用该系统调用可将有关 UNIX 系统的信息存储在 utsname 结构中。 这些信息包括 UNIX 系统名称的字符串、 系统在网络中的名称、 硬件的标准名称等。