-
鸿鹄论坛上的华为认证h35-211-hcnp-access network题库讨论了中断系统调用的相关内容
资源介绍
10.5 中断的系统调用
早期U N I X系统的一个特性是:如果在进程执行一个低速系统调用而阻塞期间捕捉到一个
信号,则该系统调用就被中断不再继续执行。该系统调用返回出错,其 e r r n o设置为E I N T R。这
样处理的理由是:因为一个信号发生了,进程捕捉到了它,这意味着已经发生了某种事情,所
以是个好机会应当唤醒阻塞的系统调用。
在这里,我们必须区分系统调用和函数。当捕捉到某个信号时,被中断的是
内核中执行的系统调用。
为了支持这种特性,将系统调用分成两类:低速系统调用和其他系统调用。低速系统调用
是可能会使进程永远阻塞的一类系统调用,它们包括:
• 在读某些类型的文件时,如果数据并不存在则可能会使调用者永远阻塞(管道、终端设
备以及网络设备)。
• 在写这些类型的文件时,如果不能立即接受这些数据,则也可能会使调用者永远阻塞。
• 打开文件,在某种条件发生之前也可能会使调用者阻塞(例如,打开终端设备,它要等
待直到所连接的调制解调器回答了电话)。
• pause(按照定义,它使调用进程睡眠直至捕捉到一个信号 )和w a i t。
• 某种i o c t l操作。
• 某些进程间通信函数(见第1 4章)。
在这些低速系统调用中一个值得注意的例外是与磁盘 I / O有关的系统调用。虽然读、写一个磁
盘文件可能暂时阻塞调用者(在磁盘驱动程序将请求排入队列,然后在适当时间执行请求期间),
但是除非发生硬件错误, I / O操作总会很快返回,并使调用者不再处于阻塞状态。
可以用中断系统调用这种方法来处理的一种情况是:一个进程起动了读终端操作,而使用
该终端设备的用户却离开该终端很长时间。在这种情况下进程可能处于阻塞状态几个小时甚至
数天,除非系统停机,否则一直如此。
与被中断的系统调用相关的问题是必须用显式方法处理出错返回。典型的代码序列 (假定
第 1 0章 信 号 2 0 7
下载