什么是其背后的原理是什么? 将坏的后果是什么,如果这样做I / O允许进程来处理信号?
Answer 1:
现在,我已经读过这本书的“UNIX操作系统设计”莫里斯巴赫,让我自己回答这个问题。
总之,使I / O不间断是为了使I / O任务尽快完成,不受信号的干扰的目的。
我从书中获得了一些相关知识:
- 单词“不间断”应该是指“不间断睡眠”。 当一个进程是不可中断的睡眠,它不能被通过信号唤醒,也不会处理信号。
- 当的方法处理信号:一个。 它在内核模式下运行,并即将返回到用户模式。 湾 它即将进入和离开睡眠状态时,睡眠中断。
- 当睡眠过程由信号唤醒了,会发生什么? 它会处理信号,默认动作是退出进程。 当一个进程正在等待I / O完成,你当然不希望它过早退出。
Answer 2:
按照Linux的开发者文档 ,这是为了防止数据丢失,避免硬件进入不一致的状态。
试想一下,如果一个会发生什么read()
(如从磁盘)是中断和信号处理程序,除其他职责外,改变读取缓冲区。 由于信号是异步的,所读取的结果不会是重复的。 如果写作被打断了类似的混乱将随之而来。
文章来源: Why doing I/O in Linux is uninterruptible?