tagger tag picard musicbrainz mp3tag mac kid3 editar easytag linux process io linux-kernel sleep

tag - ¿Por qué hacer I/O en Linux es ininterrumpible?



music tagger (2)

¿Cuál es la razón detrás de esto? ¿Cuáles serían las malas consecuencias si un proceso que hace I / O tiene permiso para manejar la señal?


Ahora que he leído el libro "El diseño de los sistemas operativos Unix" de Maurice Bach, déjame responder esta pregunta yo solo.

En resumen, hacer I / O ininterrumpible es con el fin de hacer que la tarea de E / S termine lo antes posible, sin ser interferido por las señales.

Algunos conocimientos relacionados que obtuve del libro:

  1. La palabra "ininterrumpible" debe referirse a "suspensión ininterrumpida". Cuando un proceso está en suspensión ininterrumpida, NO puede ser despertado por señales, ni manejar señales.
  2. Un proceso maneja señales cuando: a. se está ejecutando en modo kernel y está a punto de regresar al modo de usuario. segundo. está a punto de entrar y salir del estado de suspensión cuando el sueño es interrumpible.
  3. ¿Qué sucede cuando un proceso de sueño se despierta con una señal? Manejaría la señal, con la acción predeterminada saliendo del proceso. Cuando un proceso está esperando la finalización de E / S, por supuesto no desea que se cierre prematuramente.

De acuerdo con la Documentación de desarrolladores de Linux , es para evitar la pérdida de datos y evitar que el hardware entre en un estado incoherente.

Imagine lo que podría ocurrir si un read() (como desde el disco) fuera interrumpible y el manejador de señal, entre otras tareas, alterara el buffer de lectura. Como la señal es asíncrona, los resultados de lectura no serían reproducibles. Caos similar se produciría si la escritura se interrumpiera.