La ontología del kernel de Linux
El mapa mental de todo el territorio antes de entrar: los subsistemas del kernel, cómo se relacionan, y el camino de 30 niveles que te lleva de un módulo 'hola mundo' a contribuir upstream.
El kernel de Linux es uno de los programas más grandes y complejos jamás escritos: decenas de millones de líneas que gestionan cada máquina, del reloj a los superordenadores. Antes de tocar una línea, necesitas el mapa. Esta lección es la ontología — la visión aérea de todo lo que vas a conquistar.
- Ver el mapa mental completo del kernel.
- Entender sus grandes subsistemas y cómo cooperan.
- Situar los 30 niveles en el territorio.
- Empezar con el modelo mental correcto.
El territorio, de un vistazo
mindmap
root((Kernel Linux))
Nucleo
Planificador
Gestion de procesos
Concurrencia y RCU
Memoria
kmalloc y slab
Paginas fisicas
Espacio virtual
Almacenamiento
VFS
Sistemas de archivos
Block layer
Dispositivos
Char devices
Drivers
Interrupciones
Red
Sockets
Protocolos
Lenguajes
C del kernel
Ensamblador
Rust for LinuxQué hace un kernel
El kernel es el intermediario entre el hardware y todo lo demás. Cuando un programa quiere leer un archivo, usar la red o reservar memoria, no habla con el hardware directamente: se lo pide al kernel mediante una syscall. El kernel gestiona los recursos, arbitra entre programas y protege el sistema.
flowchart TD U[Programas de usuario] -->|syscalls| K[Kernel] K --> P[Procesos y planificador] K --> M[Gestion de memoria] K --> F[Sistemas de archivos VFS] K --> D[Drivers de dispositivos] K --> N[Pila de red] P --> H[Hardware: CPU, RAM, discos, red] M --> H F --> H D --> H N --> H style U fill:#a6e3a1,color:#11111b style K fill:#f9e2af,color:#11111b style H fill:#89b4fa,color:#11111b
Los grandes subsistemas
Gestión de procesos
El planificador reparte la CPU entre procesos, hace el context switch, y gestiona la creación y vida de las tareas.
Gestión de memoria
Memoria virtual, paginación, el asignador (kmalloc, slab), y la frontera entre memoria física y virtual.
Sistemas de archivos (VFS)
El Virtual File System abstrae todos los sistemas de archivos tras una interfaz común: por eso “todo es un archivo”.
Drivers de dispositivos
El código que habla con el hardware concreto. Son la mayoría del kernel, y donde más se contribuye.
Red
La pila de protocolos (TCP/IP y demás), sockets, y el enrutado de paquetes.
Concurrencia
El kernel es masivamente paralelo: spinlocks, RCU, atomics y barreras que lo hacen escalar a miles de núcleos.
El kernel es único
El kernel no es “un programa grande de C”: es un entorno con reglas propias que lo cambian todo. No hay libc (nada de printf o malloc; usas printk y kmalloc). No puedes usar coma flotante libremente. Un fallo no cierra un proceso: cuelga la máquina entera (el temido kernel panic). El código corre en contextos distintos —proceso, interrupción— cada uno con lo que puedes y no puedes hacer. Y eres masivamente concurrente por defecto. Todo lo que aprendiste en userspace sigue valiendo como base, pero aquí juegas con reglas más estrictas y con un poder absoluto sobre la máquina. Por eso el kernel es a la vez el terreno más exigente y el más fascinante de la programación de sistemas. Este track te enseña esas reglas, una a una.
El camino: 30 niveles
- Niveles 1–9 · Los cimientos — qué es un kernel, su C especial, el árbol de fuentes, Kconfig, Kbuild, arrancar en QEMU, tu primer módulo y el estilo del kernel.
- Niveles 10–14 · Datos y drivers — estructuras del kernel, manejo de errores, la frontera con el usuario, char devices y el VFS.
- Niveles 15–18 · Concurrencia — spinlocks, mutexes, RCU y las barreras de memoria.
- Niveles 19–21 · Memoria — kmalloc, el slab allocator y las páginas físicas.
- Niveles 22–25 · Tiempo y ejecución — interrupciones, bottom halves, timers y el planificador.
- Niveles 26–27 · Depuración — ftrace, KASAN, lockdep y compañía.
- Niveles 28–30 · La frontera — Rust for Linux, drivers reales, y contribuir upstream.
Un bug en userspace crashea tu programa; un bug en el kernel puede colgar tu máquina o corromper tu disco. Nunca desarrolles el kernel en tu equipo principal: usa una máquina virtual (QEMU, nivel 6). Es la primera regla de seguridad del kernel, y te la repetiré. Con una VM, un panic es solo reiniciar la VM, no perder tu trabajo.
- Estudia el mapa mental y localiza qué subsistemas te suenan.
- Piensa en algo que hace tu ordenador ahora mismo (abrir un archivo, conectarse a WiFi): ¿qué subsistemas del kernel intervienen?
- Anota una pregunta sobre el kernel (p. ej. “¿cómo decide qué proceso corre?”). La responderás en su nivel.
- Comprométete con la regla de la VM antes de escribir tu primer módulo.