Qué es un kernel
El rol del núcleo del sistema operativo, monolítico vs microkernel, la frontera entre espacio de usuario y espacio de kernel, y por qué Linux se comió el mundo.
Antes de escribir código de kernel, hay que entender qué es y dónde vive. Un kernel no es un programa más: es el árbitro con poder absoluto sobre la máquina, la capa que separa el caos del hardware del orden que ven tus programas. Entender su rol y sus fronteras es la base de todo.
- Qué hace exactamente un kernel.
- Espacio de usuario vs espacio de kernel.
- Monolítico vs microkernel.
- Por qué Linux domina.
El rol del kernel
El kernel es la primera capa de software sobre el hardware. Sus responsabilidades:
Arbitrar recursos
Decide qué proceso usa la CPU, cuánta memoria recibe cada uno, quién accede al disco. Reparte recursos finitos entre muchos.
Aislar y proteger
Impide que un programa lea la memoria de otro o tumbe el sistema. La estabilidad y la seguridad nacen aquí.
Abstraer el hardware
Ofrece una interfaz uniforme sobre miles de dispositivos distintos: tu programa lee “un archivo”, sin saber si es un SSD, un disco o la red.
Servir syscalls
Expone servicios a los programas mediante llamadas al sistema, la única puerta al hardware.
Espacio de usuario vs espacio de kernel
La distinción más importante. La CPU tiene niveles de privilegio (anillos). El kernel corre en el más privilegiado (anillo 0): puede ejecutar cualquier instrucción y tocar cualquier dirección. Los programas corren en espacio de usuario (anillo 3), restringidos: no pueden acceder al hardware ni a la memoria de otros directamente.
┌──────────────────────────────────────┐
│ ESPACIO DE USUARIO (anillo 3) │ tus programas: navegador, shell…
│ restringido, aislado │
├───────────── syscalls ────────────────┤ la única frontera
│ ESPACIO DE KERNEL (anillo 0) │ el kernel: acceso total
│ privilegio total sobre el hardware │
└──────────────────────────────────────┘
Toda la programación de kernel gira alrededor de esta frontera. Un programa de usuario que quiere algo del hardware cruza al kernel mediante una syscall, el kernel lo hace por él (comprobando permisos), y devuelve el resultado. Este cruce es controlado y costoso a propósito: es el punto donde el sistema verifica que tienes derecho a lo que pides. Cuando escribas código de kernel, estarás del otro lado de esa frontera — con poder total y, por tanto, con responsabilidad total. Un error en userspace afecta a un programa; un error aquí afecta a toda la máquina. Interiorizar en qué lado del muro estás en cada momento (niveles 12 y 22) es la esencia del oficio.
Monolítico vs microkernel
Hay dos filosofías de diseño de kernels:
Monolítico (Linux)
Todo —drivers, sistemas de archivos, red— corre en el espacio de kernel, en un solo gran programa. Rápido (sin cruzar fronteras internas), pero un bug en un driver puede tumbar todo.
Microkernel
El kernel mínimo; drivers y servicios corren como procesos de usuario aislados. Más robusto (un driver que falla no tumba el sistema) pero más lento (mucho cruce de fronteras).
Linux es monolítico (con módulos cargables, que dan algo de la flexibilidad de los micro sin el coste). Esta decisión —debatida famosamente entre Torvalds y Tanenbaum— explica por qué escribirás drivers que corren dentro del kernel, con acceso total y riesgo total.
Por qué Linux
Linux corre en la mayoría de los servidores del mundo, todos los superordenadores del top 500, miles de millones de dispositivos Android, coches, routers, satélites y neveras. Es libre, abierto y desarrollado por miles de personas y empresas. Aprender su kernel no es un ejercicio académico: es aprender la pieza de software más desplegada de la historia, con una comunidad y un proceso (nivel 30) que llevan más de tres décadas. Y desde 2026, además de C y ensamblador, acepta Rust como lenguaje central — una de las mayores noticias de la programación de sistemas moderna, que verás en el nivel 28.
- Ejecuta
uname -aycat /proc/versionpara ver tu kernel actual. - Usa
strace lsy observa las syscalls: cada una es un cruce de la frontera al kernel. - Explica con tus palabras la diferencia entre espacio de usuario y de kernel.
- Investiga un caso real: ¿qué pasa cuando un driver falla en un kernel monolítico?