Pixelaula.
Linux por dentro · Lección 2 de 5

La puerta del kernel

Ningún programa toca el hardware: todo lo pide al kernel. Al terminar sabrás espiar esos pedidos y extender el kernel en marcha.

⏱ 25–35 min▶ Video de 90 s🧪 Laboratorio con 4 misiones
00 · En 90 segundos

Primero, la idea completa

Mira el video entero o salta a la parte que quieras repasar. Después, cada idea tiene su propia escena para tocarla.

    01 · Dos niveles de privilegio

    Modo usuario y modo kernel

    ampliación La CPU tiene niveles de privilegio. Los programas corren en modo usuario: no pueden tocar el hardware ni la memoria de otros. El kernel corre en modo kernel, con acceso a todo. Para pedirle algo al kernel, un programa ejecuta una instrucción especial que provoca un trap: la CPU pasa a modo kernel, el kernel atiende el pedido y devuelve el control y el resultado.

    • Un trap es síncrono: lo provoca la instrucción que se está ejecutando, sea una llamada al sistema o un error como dividir entre cero.
    • Una interrupción es asíncrona: la provoca el hardware en cualquier momento, como el disco al terminar una lectura o el reloj al acabarse un quantum.

    Según cuánto corre en modo kernel, hay kernels monolíticos (todo el kernel en un solo espacio, como Linux), microkernels (lo mínimo en el kernel y el resto como servicios aparte, como el Hurd de GNU) e híbridos.

    Escena 1

    Un programa lee un archivo con read(). Avanza paso a paso y mira en qué modo está la CPU.

    02 · La API del kernel

    Llamadas al sistema

    Las llamadas al sistema (syscalls) son la API que los programas usan para comunicarse con el kernel. Linux tiene más de 300, y varían un poco según la arquitectura. Casi nunca se invocan directamente: se usan a través de la biblioteca estándar de C, que funciona como envoltorio y se encarga de todo el ciclo de la llamada. Algunas comunes, por categoría:

    • Procesos: clone, execve, exit, wait4, kill.
    • Archivos: openat, read, write, close, stat.
    • Memoria: brk, mmap, munmap.
    • Red: socket, connect, sendto, recvfrom.
    • Información: uname, getpid.

    Con el comando strace se ven todas las llamadas que hace un programa, con sus argumentos y lo que devolvieron.

    Escena 2

    Elige una función de la biblioteca de C y mira qué llamadas al sistema hace por dentro.

    03 · Extender en marcha

    Módulos del kernel

    Como el kernel de Linux es monolítico pero modular, se puede extender con módulos: programas, normalmente escritos en C como el kernel, que se cargan bajo demanda sin reiniciar. Casi siempre son controladores. Los módulos cargados se ven con lsmod y los disponibles están en /lib/modules.

    ampliación insmod carga un archivo .ko tal cual y falla si le faltan las piezas de las que depende. modprobe busca el módulo por su nombre y carga primero sus dependencias (las lee de modules.dep). rmmod lo descarga, pero no si otro módulo o el sistema lo está usando.

    04 · Programas dentro del kernel

    eBPF

    Una forma moderna de extender el kernel es eBPF (extended BPF). Nació como el Berkeley Packet Filter, para filtrar paquetes de red; hoy permite ejecutar pequeños programas en una máquina virtual dentro del kernel, de forma segura y eficiente. Se usa sobre todo para monitorear el sistema: contar llamadas, medir latencias o seguir paquetes sin cambiar el kernel ni cargar un módulo. Está disponible desde la versión 3.15.

    Escena 3

    Tres formas de que el kernel haga algo nuevo. Compara.

    05 · Predice

    Antes de leer la respuesta

    En la terminal
    strace cat notas.txt muestra cada llamada al sistema de cat. Las líneas en verde son las que tocan tu archivo; las de arriba son el programa cargando la biblioteca de C.
    Laboratorio

    Tu turno: espía y extiende

    Espía las llamadas al sistema de un programa, identifica el controlador de la tarjeta de red y extiende el kernel cargando módulos. Uno de ellos no se deja cargar a mano: averigua por qué.

    Repaso

    Comprueba lo que entendiste

    Cada respuesta incorrecta explica por qué parece correcta y en qué falla.