11

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

4

2 回答 2

3

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

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

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

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

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

想象一下,如果一个read()(例如来自磁盘的)是可中断的并且信号处理程序以及其他职责改变了读取缓冲区会发生什么。由于信号是异步的,读取结果将无法重现。如果写作被打断,也会出现类似的混乱。

于 2013-01-27T00:28:22.130 回答