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

twi*_*imo 9 linux io sleep process linux-kernel

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

wal*_*lyk 3

根据Linux开发者文档,这是为了防止数据丢失并避免硬件进入不一致状态。

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

  • 但是 `read(2)` *是可中断的* 请参阅 http://www.kernel.org/doc/man-pages/online/pages/man2/read.2.html (然后你会得到 `errno==EINTR`) ; 然而,当文件系统操作正在进行时,进程保持在“D”状态。 (3认同)