El caso
Tres programas, un procesador. ¿Quién decide quién corre?
Isaac deja abierta la planilla de inventario, la videollamada con el proveedor y el sistema de pedidos al mismo tiempo, en una sola computadora. Ninguno de los tres tumba a los demás, y ninguno puede leer la memoria del vecino.
Alguien tiene que decidir quién usa el procesador ahora, cuánta memoria recibe cada uno y quién puede abrir cada archivo.
El kernel es un programa, el software central del sistema operativo. Lo que lo distingue de los otros programas no es lo que es, sino el poder que tiene sobre el hardware.
El problema
Los programas no pueden hablar directo con el hardware
Una computadora tiene un procesador, una memoria y un disco, y decenas de programas que quieren usarlos. Si cada uno hablara directo con el hardware:
- Colisión: dos programas escribirían en el mismo lugar de la memoria, y uno sobrescribiría al otro.
- Inseguridad: un programa malintencionado leería las contraseñas de otro.
- Repetición: cada programa tendría que saber manejar cada modelo de disco, de placa de red y de teclado.
- Caída en cadena: un error en un programa congelaría toda la máquina.
La solución
El kernel
El kernel (el núcleo) es ese programa: la parte del sistema operativo que corre con todos los privilegios sobre el hardware. Es lo primero que se carga cuando la computadora se enciende, y permanece en la memoria todo el tiempo. Los programas comunes le piden lo que necesitan, y él decide si lo concede.
Piensa en el mostrador del café de Isaac. El cliente no entra a la cocina: hace el pedido en el mostrador. El encargado verifica que el pedido esté permitido, lo lleva a la cocina, vuelve con el resultado y organiza la fila cuando llega mucha gente. Los clientes son los programas, el pedido es la llamada al sistema, la cocina es el hardware y el encargado es el kernel.
Los trabajos principales del kernel son cuatro:
Procesos y procesador (process management)
Decide qué programa usa el procesador y por cuánto tiempo, y alterna entre ellos tan rápido que parecen correr juntos. Quien hace esto es el planificador (scheduler).
En la computadora de Isaac: la videollamada y la planilla se turnan en el procesador.
Memoria (memory management)
Le da a cada programa su propia visión de la memoria, la memoria virtual, e impide que uno toque la de otro.
En la computadora de Isaac: el sistema de pedidos no ve la memoria de la planilla.
Archivos (file systems)
Organiza el disco en carpetas y archivos, y controla quién puede leer y escribir en cada uno.
En la computadora de Isaac: solo el usuario correcto abre la carpeta de clientes.
Dispositivos (device drivers)
Conversa con el hardware por medio de controladores (drivers), y esconde las diferencias entre un modelo y otro.
En la computadora de Isaac: el mismo programa imprime en cualquier impresora.
La red también pasa por el kernel: es él quien arma y entrega los paquetes de datos que el programa quiere enviar.
La frontera
Espacio de usuario y espacio del kernel
El procesador tiene dos modos de operación. En el modo privilegiado corre el kernel, que puede todo. En el modo restringido corren los programas comunes, que no pueden tocar el hardware ni la memoria de otros directamente. Por eso se habla de dos áreas:
- Espacio de usuario (user space): donde corren las aplicaciones.
- Espacio del kernel (kernel space): donde corre el kernel.
Para hacer algo que solo el kernel puede, como abrir un archivo o enviar datos por la red, el programa hace una llamada al sistema (system call, o syscall). Es un pedido formal: el procesador pasa al modo privilegiado, el kernel verifica que el pedido esté permitido, lo ejecuta y devuelve el resultado.
Algunas llamadas al sistema de Linux: open (abrir un archivo), read y write (leer y escribir), fork (crear un proceso) y mmap (mapear memoria).
No confundas
Kernel × sistema operativo
Los dos nombres se usan como si fueran lo mismo. No lo son.
Kernel
“¿Quién controla el hardware y reparte los recursos entre los programas?”
- Ejemplo
- Linux, el núcleo usado por Ubuntu, Debian y Android.
- Foco
- El núcleo: procesos, memoria, archivos, dispositivos y red.
Sistema operativo (operating system)
“¿Qué recibe el usuario listo para usar la computadora?”
- Ejemplo
- Ubuntu: el kernel Linux, más la terminal (shell), las bibliotecas, las utilidades y la interfaz.
- Foco
- El kernel más todo lo que viene alrededor.
Por dentro
Tipos de kernel
Hay distintas formas de organizar un kernel:
| Tipo | Cómo es | Ejemplo |
|---|---|---|
| Monolítico (monolithic) | Casi todo (procesos, memoria, archivos, drivers) corre dentro del kernel. Es rápido, pero un error en un driver puede tumbar el sistema | Linux |
| Microkernel (microkernel) | El kernel es mínimo, y los demás servicios corren como programas separados. Hay más aislamiento, y más pedidos entre las partes | Minix, QNX |
| Híbrido (hybrid) | Mezcla las dos ideas | Windows (NT), macOS (XNU) |
Linux es monolítico, pero modular: acepta módulos del kernel (kernel modules), pedazos de código, como drivers, que se cargan y descargan con el sistema funcionando, sin reiniciar.
En la práctica
Por qué esto importa si desarrollas software
El kernel aparece en el día a día de quien desarrolla y de quien opera sistemas:
Un programa colgado (process isolation)
Cuando un programa falla, el kernel termina solo ese proceso. El resto del sistema sigue.
En la computadora de Isaac: la videollamada se congela, y la planilla sigue abierta.
Falta de memoria (out of memory)
Si la memoria se acaba, el kernel de Linux puede terminar un proceso para salvar el sistema. Es el OOM killer.
En un servidor: la base de datos desaparece, y el log del kernel dice el motivo.
Observar las llamadas al sistema (strace)
En Linux, la herramienta strace muestra las llamadas al sistema que hace un programa.
Servidores, VMs y contenedores
Todo esto corre sobre un kernel: cada máquina virtual tiene el suyo, y los contenedores comparten el del servidor.
strace -c lsEl comando cuenta las llamadas al sistema que hace un ls simple, desde openat hasta write.
Términos clave
Seis términos para recordar
Toca la tarjeta para ver la definición.
Prueba rápida
Tres preguntas, estilo examen
01
Un programa necesita leer un archivo del disco. ¿Cómo lo hace?
02
Estrictamente hablando, ¿qué es Linux?
03
Un programa común intenta leer la memoria de otro programa. ¿Qué pasa?
El kernel es el árbitro entre los programas y el hardware: reparte el procesador, la memoria, los archivos y los dispositivos, y solo atiende lo que está permitido, por medio de llamadas al sistema. Entender esa frontera explica por qué un error en un programa común no tumba la máquina entera, y por qué casi toda herramienta, desde un editor de texto hasta una base de datos, depende del kernel. El próximo paso es entender lo que corre encima de él: Procesos e hilos.