Si un proceso en ejecución se bloquea en E / S
Bloquear en IO es prácticamente equivalente a suspender su proceso. En el contexto del kernel de Linux, la ejecución de alguna llamada al sistema IO como read()
causará que un sysenter
controlador de interrupción se active para cuidar de ese IO, llamando en do_sys_read()
última instancia. Aquí, si la solicitud actual no puede ser satisfecha de inmediato, la función llama sched()
y luego puede ejecutar otro proceso.
En el contexto de un sistema cooperativo, esperaría que cuando realiza una llamada al sistema por algún motivo de E / S, si no se puede satisfacer la solicitud, el kernel elige otra tarea y la ejecuta. Este documento proporciona algunos antecedentes: básicamente, si esperaba en IO, podría estar colgado para siempre esperando ese IO. La idea de la programación cooperativa es que usted llama con frecuencia sched()
o el método equivalente de renunciar a la CPU, si realiza tareas intensivas de CPU.
Las consideraciones del modo kernel se vuelven más interesantes. En las arquitecturas donde están disponibles, como ciertas plataformas integradas , los controladores de interrupciones aún se invocarán en respuesta a interrupciones de hardware o software. Por lo general, es posible, en términos de implementación, deshabilitar el manejo de interrupciones , pero eso también tiene inconvenientes.