Todos los sistemas operativos modernos admiten multitarea. Esto significa que el sistema puede ejecutar múltiples procesos al mismo tiempo; ya sea en pseudo-paralelo (cuando solo hay una CPU disponible) o hoy en día con CPU de múltiples núcleos que son comunes en paralelo (una tarea / núcleo).
Tomemos el caso más simple de que solo hay una CPU disponible. Esto significa que si ejecuta al mismo tiempo dos procesos diferentes (digamos un navegador web y un reproductor de música), el sistema no podrá ejecutarlos al mismo tiempo. Lo que sucede es que la CPU está cambiando de un proceso a otro todo el tiempo; pero esto está sucediendo extremadamente rápido, por lo que nunca lo notas.
Ahora supongamos que mientras se ejecutan esos dos procesos, presiona el botón de reinicio (chico malo). La CPU detendrá inmediatamente lo que esté haciendo y reiniciará el sistema. Felicidades: generaste una interrupción.
El caso es similar cuando está programando y desea solicitar un servicio de la CPU. La diferencia es que en este caso ejecuta código de software, generalmente procedimientos de biblioteca que ejecutan llamadas al sistema (por ejemplo, fopen
para abrir un archivo).
Por lo tanto, 1 describe dos formas diferentes de llamar la atención de la CPU.
La mayoría de los sistemas operativos modernos admiten dos modos de ejecución: modo de usuario y modo de núcleo. Por defecto, un sistema operativo se ejecuta en modo de usuario. El modo de usuario es muy limitado. Por ejemplo, todas las E / S están prohibidas; por lo tanto, no puede abrir un archivo desde su disco duro. Por supuesto, esto nunca sucede en realidad, porque cuando abres un archivo, el sistema operativo cambia de modo transparente de usuario a kernel. En el modo kernel, tiene el control total del hardware.
Si se pregunta por qué existen esos dos modos, la respuesta más simple es la protección. Los sistemas operativos basados en microkernel (por ejemplo, MINIX 3) tienen la mayoría de sus servicios ejecutándose en modo de usuario, lo que los hace menos dañinos. Los núcleos monolíticos (como Linux) tienen casi todos sus servicios ejecutándose en modo kernel. Por lo tanto, es poco probable que un controlador que falla en MINIX 3 derribe todo el sistema, mientras que esto no es inusual en Linux.
Las llamadas al sistema son las primitivas utilizadas en los núcleos monolíticos (modelo de datos compartidos) para cambiar del modo de usuario al de núcleo. El paso de mensajes es la primitiva utilizada en microkernels (modelo cliente / servidor). Para ser más precisos, en un mensaje que pasa los programadores del sistema también usan llamadas del sistema para llamar la atención de la CPU. La transmisión de mensajes solo es visible para los desarrolladores del sistema operativo. Los núcleos monolíticos que utilizan llamadas al sistema son más rápidos pero menos confiables, mientras que los microkernel que utilizan el paso de mensajes son más lentos pero tienen un mejor aislamiento de fallas.
Por lo tanto, 2 menciona dos formas diferentes de cambiar de modo de usuario a kernel.
Para revisar, la forma más común de crear una interrupción de software, también conocida como trap, es ejecutar una llamada al sistema. Las interrupciones, por otro lado, se generan únicamente por hardware.
Cuando interrumpimos la CPU (ya sea por software o por hardware), necesita guardar en algún lugar su estado actual, el proceso que ejecuta y en qué momento se detuvo; de lo contrario, no podrá reanudar el proceso al volver a cambiar . Eso se llama cambio de contexto y tiene sentido: antes de apagar su computadora para hacer otra cosa, primero debe asegurarse de haber guardado todos sus programas / documentos, etc. para que pueda reanudar desde el punto donde detuvo el la próxima vez lo encenderás :)
Por lo tanto, 3 explica qué debe hacerse después de ejecutar una trampa o una interrupción y qué tan similares son los dos casos.