系统调用的类型(六大类)

  • 内容
  • 评论
  • 相关

系统调用大致可分为六大类:进程控制(process control)文件管理(file manipulation)设备管理(device manipulation)信息维护(information maintenance)通信(communication) 保护(protection)。

进程控制

执行程序应能正常(end())或异常(abort())停止执行。如果一个系统调用异常停止当前执行的程序,或者程序运行遇到问题并引起错误陷阱,那么有时转储内存到磁盘,并生成错误信息。内存信息转储到磁盘后,可用调试器(debugger)来确定问题原因(调试器为系统程序,用以帮助程序员发现和纠正错误(bug))。

无论是正常情况还是异常情况,操作系统都应将控制转到调用命令解释程序。命令解释程序接着读入下个命令。对于交互系统,命令解释程序只是简单读入下个命令,而假定用户会采取合适命令以处理错误。对于 GUI 系统,弹出窗口可用于提醒用户出错,并请求指引。对于批处理系统,命令解释程序通常终止整个作业,并继续下个作业。当出现错误时,有的系统可能允许特殊的恢复操作。

如果程序发现输入有错并且想要异常终止,那么它也可能需要定义错误级别。错误越严重,错误参数的级别也越高。通过将正常终止的错误级别定义为 0,可以把正常和异常终止放在一起处理。命令解释程序或后面的程序可以利用这种错误级别来自动确定下个动作。

执行一个程序的进程或作业可能需要加载(load())和执行(execute())另一个程序。这种功能允许命令解释程序来执行一个程序,该命令可以通过用户命令、鼠标点击或批处理命令来给定。一个有趣的问题是:加载程序终止时会将控制返回到哪里?与之相关的问题是:原有程序是否失去或保存了,或者可与新的程序一起并发执行?

如果新程序终止时控制返回到现有程序,那么必须保存现有程序的内存映像。因此,事实上创建了一个机制,以便一个程序调用另一个程序。如果两个程序并发继续,那么也就创建了一个新作业或进程,以便多道执行。通常,有一个系统调用专门用于这一目的(create_process() 或 submit_job())。

如果创建了一个新的作业或进程或者一组作业或进程,那么我们应能控制执行。这种控制要能判定和重置进程或作业的属性,包括作业的优先级、最大允许执行时间等(get_ process_attributes() 和 set_process_attributes())。如果发现创建的进程或作业不正确或者不再需要,那么也要能终止它(terminate_process())。

创建了新的作业或进程后,可能要等待其执行完成,也可能要等待一定时间(wait_time())。更有可能要等待某个事件的出现(wait_event())。当事件出现时,作业或进程就会响应(signal_event())。

通常,两个或多个进程会共享数据。为了确保共享数据的完整性,操作系统通常提供系统调用,以允许一个进程锁定(lock)共享数据。这样,在解锁之前,其他进程不能访问该数据。通常,这样的系统调用包括 acquire_lock() 和 release_lock()。这类系统调用用于协调并发进程,将在后续章节详细讨论。

进程和作业控制差异很大,这里通过两个例子加以说明:一个涉及单任务系统,另一个涉及多任务系统。

MS-DOS 操作系统是个单任务的系统,在计算机启动时它就运行一个命令解释程序(图 1a)。由于 MS-DOS 是单任务的,它采用了一种简单方法来执行程序而且不创建新进程。它加载程序到内存,并对自身进行改写,以便为新程序提供尽可能多的空间(图 1b)。


MS-DOS 执行状态
图 1 MS-DOS 执行状态

本文标题:系统调用的类型(六大类)

本文地址:http://www.hosteonscn.com/3552.html

评论

0条评论

发表评论

邮箱地址不会被公开。 必填项已用*标注