什么是系统调用,系统调用的过程

  • 内容
  • 评论
  • 相关

系统调用(system call)提供操作系统服务接口。这些调用通常以 C 或 C++ 编写,当然,对某些底层任务(如需直接访问硬件的任务),可能应以汇编语言指令编写。

在讨论操作系统如何提供系统调用之前,首先通过例子来看看如何使用系统调用:编写一个简单程序,从一个文件读取数据并复制到另一个文件。程序首先需要输入两个文件名称:输入文件名称和输出文件名称。这些名称有许多不同的给定方法,这取决于操作系统设计。

一种方法是,让程序询问用户这两个文件名称。对于交互系统,该方法包括一系列的系统调用:先在屏幕上输出提示信息,再从键盘上读取定义两个文件名称的字符。对于基于鼠标和图标的系统,一个文件名称的菜单通常显示在窗口内。用户通过鼠标选择源文件名称,另一个类似窗口可以用来选择目的文件名称。这个过程需要许多 I/O 系统调用。

在得到两个文件名称后,该程序打开输入文件并创建输出文件。每个操作都需要一个系统调用。每个操作都有可能遇到错误情况,进而可能需要其他系统调用。

例如,当程序设法打开输入文件时,它可能发现该文件不存在或者该文件受保护而不能访问。在这些情况下,程序应在控制台上打印出消息(另一系列系统调用),并且非正常地终止(另一个系统调用)。如果输入文件存在,那么必须创建输出文件。可能发现具有同一名称的输出文件已存在。这种情况可以导致程序中止(一个系统调用),或者可以删除现有文件(另一个系统调用)并创建新的文件(另一个系统调用)。对于交互系统,另一选择是询问用户(一系列的系统调用以输出提示信息并从控制台读人响应)是否需要替代现有文件或中止程序。

现在两个文件已设置好,可进入循环,以读取输入文件(一个系统调用),并写到输出文件(另一个系统调用)。每个读和写都应返回一些关于各种可能错误的状态信息。对于输入,程序可能发现已经到达文件的结束,或者在读过程中发生了硬件故障(如奇偶检验错误)。对写操作,也可能出现各种错误,这取决于输出设备(例如,没有磁盘空间)。

最后,在复制了整个文件后,程序可以关闭两个文件(另一个系统调用),在控制台或视窗上写一个消息(更多系统调用),最后正常结束(最后一个系统调用)。图 1 显示了这个系统调用序列。


如何使用系统调用的例子
图 1 如何使用系统调用的例子

本文标题:什么是系统调用,系统调用的过程

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

评论

0条评论

发表评论

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