El kernel: el núcleo del sistema operativo que gobierna todo
La lección pasada dijimos que un programa pide en el mostrador oficial (una llamada al sistema), y en cuanto cruza, cambia brevemente a modo núcleo. Pero detrás de ese mostrador, ¿quién es el que realmente hace el trabajo con un privilegio tan poderoso? ¿Y por qué ese modo se llamaba modo núcleo, para empezar? Hoy nos encontramos, cara a cara, con el centro más profundo del sistema operativo, el núcleo que siempre mantiene su puesto.
Quién está detrás del mostrador
Recuerda la lección pasada. Un programa está encerrado dentro de una cerca, no puede tocar el hardware directamente, y cuando necesita que se haga un trabajo, pide en el mostrador oficial llamado llamada al sistema. Y en cuanto cruza, la CPU cambia brevemente a modo núcleo, hace el trabajo y regresa. En aquel momento, a propósito no miramos una cosa: el ser que, detrás del mostrador, realmente hace el trabajo con ese privilegio poderoso. El mostrador es solo la entrada que recibe peticiones; dentro de él hay un trabajador aparte que de verdad lee el disco y pone puntos en la pantalla. El nombre de ese trabajador es el kernel.
Toca el mostrador para mirar detrás. El núcleo que estaba oculto detrás del mostrador de la llamada al sistema, el kernel, queda a la vista. El que realmente atendió la petición era este kernel todo el tiempo.
El kernel queda a la vista. Ahora hasta el nombre poderoso modo núcleo tiene sentido. Ese privilegio fuerte es justo el poder que este kernel usa cuando trabaja, así que el nombre se le puso por eso. Pero ¿este kernel solo aparece un momento cuando llega una petición y luego se desvanece? No. A continuación vemos desde cuándo y hasta cuándo el kernel permanece en su puesto.
El kernel siempre está despierto
Los programas que usamos se encienden y se apagan. Abrimos una app de música y la cerramos, lanzamos un navegador y lo apagamos. Una app se carga en memoria cuando hace falta, y al cerrarla deja la memoria. Pero el kernel es distinto. En cuanto la computadora se enciende, es el primero en tomar su lugar en memoria, y hasta que se corta la energía no abandona ese lugar ni una sola vez. Por más apps que vayan y vengan, el kernel siempre está despierto debajo de ellas. Si lo piensas, es de lo más natural. Cargar apps en memoria y quitarlas, decidir quién recibe la CPU, todo eso lo hace el kernel. Si el kernel se durmiera, no quedaría nadie para hacer ese trabajo.
Toca las apps para encenderlas y apagarlas. Las casillas de apps se encienden y se apagan, pero la casilla del kernel abajo permanece encendida todo el tiempo. El kernel vive en memoria desde el arranque hasta el apagado.
Las apps parpadearon, pero la casilla del kernel se mantuvo encendida de forma constante. El kernel es como la persona entre bastidores que sube y baja el telón. Los actores van y vienen, pero esa persona mantiene su puesto toda la función. Entonces, ¿qué hace exactamente el kernel desde ese puesto siempre presente? De hecho, casi todo lo que aprendimos en esta área estaba girando en las manos del kernel todo el tiempo. A continuación, reunámoslo todo en un solo lugar.
La torre de control de cada recurso
Recorriendo esta área, aprendimos muchas cosas. La planificación que decide quién recibe la CPU primero, la memoria virtual que finge ser más grande que la memoria real, los controladores que reconocen un dispositivo nuevo, el sistema que organiza archivos, y la comprobación de permisos que ve quién puede hacer qué. En aquel momento las aprendimos por separado, pero en realidad la mano que de verdad lleva a cabo todo esto es una. Es el kernel. El kernel es como la torre de control de un aeropuerto. Así como la torre decide en un solo lugar cuándo despega y aterriza cada avión y qué pista usa, el kernel gobierna desde una sola mano cuánto de cada recurso, la CPU, la memoria, los dispositivos y los archivos, le toca a quién.
Toca cada recurso uno por uno. Sea cual sea el que toques, planificación de CPU, memoria, controladores, archivos o permisos, el kernel en el centro se resalta como el que lo gobierna. Cada recurso gira en la única mano del kernel.
Sea cual fuera el recurso que tocaste, el camino se reunió en el kernel. Las tareas que parecían dispersas en realidad giraban en torno a un centro. Pero si el kernel hace todo este trabajo poderoso, ¿no es peligroso? Sería un desastre que cualquier programa pudiera usar este poder. Por eso la computadora divide el mundo del poder en dos. A continuación, miremos esa frontera.
La frontera entre dos modos
Recordemos los dos modos que vislumbramos la lección pasada. Uno es el modo usuario, el mundo de poder limitado donde viven nuestras apps. El otro es el modo núcleo, el mundo fuerte donde el kernel trabaja y puede tocar el hardware y cualquier otra cosa directamente. Entre los dos hay una frontera clara. Una app en modo usuario no puede alcanzar directamente el hardware. Solo el kernel, en modo núcleo, puede tocar el hardware directamente. Así que si una app intenta hacer algo por sí misma, queda bloqueada, y el trabajo solo ocurre cuando le pide al kernel y pasa por el modo núcleo. Gracias a esta frontera, el poder fuerte está reunido en un solo lugar confiable, el kernel.
Toca para cambiar el modo. En modo usuario, alcanzar directamente el hardware queda bloqueado (rojo). Solo en modo núcleo se permite el acceso al hardware (verde). El poder fuerte vive solo dentro del modo núcleo.
En modo usuario quedaba bloqueado, y solo en modo núcleo pasaba. Tener el poder fuerte reunido en un solo lugar, el kernel, es tranquilizador. Como las acciones peligrosas pasan por un solo lugar, basta con guardar bien ese único lugar. Pero al mismo tiempo surge un pensamiento algo vertiginoso. Si todo pende del kernel solo, ¿qué pasa si surge un problema en ese mismo kernel? En la etapa final, cerremos la lección de hoy con esa pregunta.
Cuando el kernel se detiene
Reunamos la lección de hoy en una línea. El kernel es el programa central que hace el trabajo real detrás del mostrador de la llamada al sistema; permanece residente en memoria desde el arranque hasta el apagado; y gobierna cada recurso, la CPU, la memoria, los dispositivos, los archivos y los permisos, desde una sola mano. El fuerte modo núcleo es el poder que el kernel usa cuando trabaja. Así que esto es lo que pasa. Aunque una app falle y se congele o muera, el kernel por encima de ella está vivo, así que solo retira esa app y el resto sigue funcionando bien. Por eso podemos forzar el cierre de una app trabada y seguir usando la computadora. Pero si el kernel mismo se detiene, la historia es del todo distinta. La única mano que retiraría apps, repartiría recursos y atendería peticiones desaparece, así que toda app por encima de él y el sistema entero se detienen de golpe. Ese raro momento en que la computadora de pronto se pone azul o queda muerta y hay que reiniciarla es justo cuando el kernel ya no pudo aguantar más.
Toca una app para detenerla. El kernel está vivo, así que solo esa app se retira y el resto está bien. Por último toca el kernel para detenerlo, y todo lo que hay por encima se para de golpe (rojo). Todo pende del único kernel.
Ahora el mismísimo centro del sistema operativo se ve con claridad. La planificación, la memoria, los controladores, los archivos, los permisos y las llamadas al sistema que aprendimos por separado estaban todos girando en la mano de este único kernel. Pero cuando los recursos se reparten desde una sola mano, aparece un nuevo dolor de cabeza. Si dos programas se aferran cada uno a lo que tienen y solo esperan lo del otro, ambos pueden detenerse para siempre. En la próxima lección nos encontramos con el bloqueo mutuo que ocurre cuando ninguno cede.