wandres.dev
ONTOLOGÍA · El mapa del kernel

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.

⏱ 13 min

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.

🎯 Al terminar esta lección sabrás
  • 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 Linux

Qué 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

Programar el kernel es otro mundo (y esa es la gracia)

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.
⚠️
Regla de oro: trabaja en una máquina virtual

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.

⚔️ Sitúate en el mapa
  1. Estudia el mapa mental y localiza qué subsistemas te suenan.
  2. Piensa en algo que hace tu ordenador ahora mismo (abrir un archivo, conectarse a WiFi): ¿qué subsistemas del kernel intervienen?
  3. Anota una pregunta sobre el kernel (p. ej. “¿cómo decide qué proceso corre?”). La responderás en su nivel.
  4. Comprométete con la regla de la VM antes de escribir tu primer módulo.