Now that I've read the book "The Design of the Unix Operating Systems" by Maurice Bach, let me answer this question by myself.
In short, making I/O uninterruptible is for the purpose of making the I/O task finish ASAP, without being interfered by signals.
Some related knowledge that I gained from the book:
- The word "uninterruptible" should refer to "uninterruptible sleep". When a process is in uninterruptible sleep, it can NOT be waked up by signals, nor would it handle signals.
- A process handles signals when: a. it is running in kernel mode and is about to return to the user mode. b. it is about to enter and leave sleep state when the sleep is interruptible.
- What happens when a sleeping process is waken up by a signal? It would handle the signal, with the default action being exiting the process. When a process is waiting for I/O completion, you of course do not want it to exit prematurely.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…