¿Cuál es la razón detrás de hacer que la E / S sea ininterrumpida? ¿Cuáles serían las consecuencias negativas si un proceso que maneja E / S pudiera manejar una señal?
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.
Peter Cordes
Respuestas:
9
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:
La palabra "ininterrumpible" debe referirse a "sueño ininterrumpible". Cuando un proceso está en suspensión ininterrumpida, NO puede ser despertado por señales ni puede manejar señales.
Un proceso maneja señales cuando: a. se está ejecutando en modo kernel y está a punto de volver al modo de usuario. si. Está a punto de entrar y salir del estado de suspensión cuando la suspensión es interrumpible.
¿Qué sucede cuando una señal despierta un proceso de sueño? Manejaría la señal, y la acción predeterminada sería salir del proceso. Cuando un proceso espera la finalización de E / S, por supuesto, no desea que salga prematuramente.
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.
O montando con sshfs y luego tirando del cable de red. El sueño ininterrumpido ocurre, incluso hoy en día, cuando los medios / almacenamiento subyacentes actúan. Y generalmente es un dolor sangriento en el culo tratar.
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.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.
fuente
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:
fuente
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.
fuente