Respuestas:
Cualquier E / S es manejada por una llamada al sistema invocada por un proceso. Eventualmente, una llamada de sistema de este tipo llegará a una función apropiada de controlador de dispositivo de bajo nivel para realizar la operación de E / S real.
La E / S puede ser complicada: para obtener datos dentro y fuera del dispositivo, es posible que se deban seguir varios pasos, en orden y posiblemente con los requisitos de tiempo. Si estos pasos no se completan atómicamente, la próxima vez que se prueben, es posible que el dispositivo no responda, se comporte mal o incluso que el sistema se bloquee. Estos pasos pueden ser diferentes y únicos para cada dispositivo, de ahí que existan tantos controladores de dispositivos.
Un controlador de dispositivo bien escrito debe saber cómo tratar con el dispositivo que está tratando de reparar, por lo que normalmente no debería experimentar problemas a menos que haya un error de controlador, esté utilizando el controlador incorrecto para el dispositivo o el dispositivo físico esté fallando.
Ahora que he leído el libro "El diseño de los sistemas operativos Unix" de Maurice Bach, permítanme responder esta pregunta yo mismo.
En resumen, hacer que la E / S sea ininterrumpida es para que la tarea de E / S finalice lo antes posible, sin ser interferida por señales.
Algunos conocimientos relacionados que obtuve del libro:
Algunas rutas de código en el núcleo están marcadas como ininterrumpibles, principalmente porque el código tiene que cumplir con un tiempo estricto (para responder a un dispositivo) o porque está haciendo algo que no admite interferencia. En el caso de Linux, la mayor parte de la primera se ha desplazado a bandas de rodamiento independientes en el núcleo, y las segundas se han erradicado en su mayoría (sospecho que la mayoría de las veces están bajo la presión de las máquinas multiprocesador actuales). Es decir, hace tiempo que no he visto un proceso de sueño ininterrumpido.
write(2)
se le permite regresar temprano, devolviendo el conteo de bytes real escrito, que puede ser menor que la longitud del búfer pasado como el 3er argumento.