Estaba leyendo sobre cómo funciona Linux en mi OS-libro cuando me encontré con este ..¿Llamada al sistema sin cambio de contexto?
[...] el núcleo se crea como un único binario, monolítico. La razón principal es mejorar el rendimiento. Debido a que todos los códigos del kernel y las estructuras de datos se guardan en un único espacio de direcciones, no son necesarios los cambios de contexto cuando un proceso llama a una función del sistema operativo o cuando se entrega un hardware de interrupción.
Eso me sonaba bastante sorprendente, seguramente debe almacenar el contexto del proceso antes de pasar al modo kernel para manejar una interrupción ... Pero está bien, lo compraré por ahora. Unas pocas páginas, mientras describía el contexto de programación de un proceso, decía:
Ambas llamadas al sistema e interrupciones que ocurren mientras el proceso se está ejecutando usarán esta pila.
"esta pila" es el lugar donde el kernel almacena los registros del proceso y tal.
¿No es esto una contradicción directa con la primera cita? ¿Lo estoy malinterpretando de alguna manera?
Gracias. Ha pasado mucho tiempo desde que estudié esto, pero tenía la impresión de que las interrupciones de hardware realmente interrumpían la ejecución y saltaban de inmediato al procedimiento de manejo en lugar de sondear para interrupciones más adelante. Pensé que si el proceso se ejecutaba en modo kernel, aún tendría que almacenar su contexto antes de ese salto, pero quizás ese fue mi error. Supongo que ahora eso no sería diferente de cualquier otra llamada a método si el método llamado maneja correctamente los registros usados ... ¿lo entendí bien? – user1130005
Según tengo entendido, el proceso se está ejecutando en modo de usuario y, de hecho, hay un cambio de contexto al modo kernel antes de que se maneje la interrupción. Sin embargo, * handling * la interrupción no requiere un cambio de contexto adicional en núcleos monolíticos, pero sí en microkernels (ya que los controladores de dispositivo residen en el espacio de usuario). –