为什么在Linux中进行I / O是不可中断的?

时间:2013-01-27 00:08:04

标签: linux process io linux-kernel sleep

背后的理由是什么?如果允许进行I / O的进程处理信号,会产生什么不良后果?

2 个答案:

答案 0 :(得分:3)

现在我已经读过Maurice Bach的“Unix操作系统的设计”一书,让我自己回答这个问题。

简而言之,使I / O不间断是为了尽快完成I / O任务,而不受信号的干扰。

我从这本书中获得的一些相关知识:

  1. “不间断”一词应指“不间断睡眠”。当一个进程处于不间断睡眠状态时,它不会被信号唤醒,也不能处理信号。
  2. 进程处理信号时:a。它在内核模式下运行,即将返回用户模式。湾当睡眠中断时,它即将进入和离开睡眠状态。
  3. 当信号唤醒睡眠过程时会发生什么?它将处理信号,默认操作正在退出进程。当进程等待I / O完成时,您当然不希望它过早退出。

答案 1 :(得分:2)

根据Linux Developers Documentation,它是为了防止数据丢失并避免硬件进入不一致状态。

想象一下,如果read()(例如来自磁盘)是可中断的,并且信号处理程序(除其他职责之外)改变了读缓冲区,可能会发生什么。由于信号是异步的,因此读取结果将不可再现。如果写作中断,就会发生类似的混乱。