Ir al contenido principal

Kernel

Cuando se enciende una computadora, después de la BIOS y del cargador de arranque se carga un solo programa que no se cierra nunca: el kernel, o núcleo del sistema operativo. Es la parte del sistema operativo que habla directamente con el hardware y a través de la cual pasan todas las órdenes que los programas le dan a la máquina.

La palabra kernel viene del inglés y significa núcleo, en el mismo sentido que el carozo de una fruta: es la parte de adentro, la que sostiene todo lo demás. En español se traduce como núcleo, y por eso en las páginas de Linux o DOS se lee "núcleo" y "kernel" como sinónimos.

Un programa común, como un editor de texto, no puede leer el disco ni dibujar en la pantalla por su cuenta. Le pide al kernel que lo haga, y el kernel lo hace en su nombre. Esa es toda su razón de ser: ser el intermediario obligatorio entre el software y el hardware.

Qué hace, concretamente

El kernel es el que reparte lo que hay: un procesador, cierta cantidad de memoria, algunos discos y varios dispositivos. Sus tareas se agrupan en cinco grandes áreas:

Tarea En qué consiste
Procesos Decide qué programa usa el procesador y por cuánto tiempo. Como hay un solo procesador (o unos pocos) y muchos programas abiertos, va alternándolos miles de veces por segundo. Cada programa cree que la máquina es suya.
Memoria Entrega a cada programa un espacio de memoria propio y se asegura de que no pueda tocar el de otro. Cuando la memoria no alcanza, manda una parte al disco (memoria virtual).
Archivos Traduce "guardá esto en tp1.docx" a las operaciones concretas sobre el disco, y organiza carpetas, permisos y fechas.
Dispositivos Los controladores (drivers) son la parte del kernel que sabe cómo se le habla a cada placa: la placa de video, la de red, la impresora, el teclado.
Seguridad y comunicación Controla quién puede hacer qué, y administra la comunicación entre programas y con la red.

Modo usuario y modo kernel

La clave para entender todo lo demás es esta: los procesadores modernos tienen dos niveles de privilegio, y el kernel vive en el nivel alto.

  • En modo usuario corre todo lo demás: el navegador, el editor, los juegos. Un programa en modo usuario no puede dar órdenes directas al hardware ni ver la memoria de otros programas. Si intenta algo prohibido, el procesador lo detiene y el programa se cierra con un error.
  • En modo kernel corre únicamente el núcleo. Ahí sí se puede leer y escribir en cualquier parte de la memoria, apagar las interrupciones y hablar con los dispositivos.

El paso de un modo al otro se hace siempre igual: el programa pide, y el kernel decide si le concede. Esas puertas de entrada se llaman llamadas al sistema (en inglés, system calls o syscalls). Cuando un programa quiere abrir un archivo, no lo abre: hace la llamada open() y espera la respuesta del kernel.

Esa frontera es lo que hace que una computadora moderna sea estable y segura: un programa común no puede romper el sistema porque no tiene los permisos para hacerlo.

Las capas de un sistema operativo: las aplicaciones y las bibliotecas corren en modo usuario, el kernel corre en modo kernel y el hardware está abajo; las llamadas al sistema cruzan la frontera Aplicaciones navegador, editor, planilla, juegos Bibliotecas y servicios las funciones que usan los programas KERNEL procesos · memoria · archivos dispositivos y controladores · red · seguridad es el único que corre con todos los privilegios Hardware procesador, memoria, discos, dispositivos MODO USUARIO MODO KERNEL llamadas al sistema (ida y vuelta)
Arriba de la línea punteada corre todo en modo usuario: sin permisos sobre el hardware. Abajo corre el kernel, con todos los privilegios. Las llamadas al sistema son las puertas que cruzan esa frontera.

Los tipos de kernel

No todos los sistemas operativos reparten el trabajo igual. La pregunta que los divide es muy simple:

¿Cuánto código corre en modo kernel?

Si adentro del núcleo hay de todo —administración de archivos, red, controladores— el kernel es monolítico. Si adentro queda apenas lo indispensable y el resto se muda afuera, como programas comunes, el kernel es un microkernel. Y si se toma un camino intermedio, es un kernel híbrido.

La decisión no es caprichosa, y cada opción tiene su costo: cuanto más adentro del núcleo, más rápido pero más frágil. Eso es todo lo que hay que entender, y lo que explica el resto de la página.

Kernel monolítico

Es el diseño más antiguo y el más directo: todo va adentro del núcleo. El sistema de archivos, la pila de red, los controladores de cada dispositivo y la administración de memoria son partes del mismo programa que corre en modo kernel.

Los componentes se comunican llamándose entre sí, directamente, como funciones de un mismo programa. No hay mensajes que viajen de un lado a otro ni cambios de modo cada vez que el sistema de archivos necesita hablar con el disco.

A favor En contra
Velocidad. Cada pedido se resuelve con una llamada a función común y corriente, sin cruzar fronteras ni pasar por mensajes. Fragilidad. Como absolutamente todo corre con privilegios, un controlador con un error puede voltear el sistema entero, y se lleva puestos a todos los programas abiertos.
Simplicidad de diseño. Un solo programa, con acceso a todo, es más fácil de escribir que un conjunto de procesos que se hablan por mensajes. Tamaño. Es grande y está siempre entero en memoria. Y para cambiar una pieza hay que recompilarlo (o usar módulos, como se explica más abajo).

Ejemplos: Linux y los Unix clásicos. También el MS-DOS era monolítico, aunque sin ninguna protección: ahí no existían los dos modos, así que cualquier programa podía escribir donde quisiera. Un concepto clave de esa página es que DOS no protegía nada, y esto es exactamente lo que después vino a resolver la idea de los dos modos.

Microkernel

Es la reacción al problema anterior. La idea es dejar adentro del núcleo solo lo indispensable: la comunicación entre procesos, la planificación básica y la administración de memoria. Todo lo demás —los controladores, el sistema de archivos, la red, los servicios gráficos— se muda afuera y corre como programas comunes, en modo usuario.

Y si están afuera, ¿cómo hacen para hablar con el hardware? Pidiéndoselo al núcleo, y hablándose entre ellos por mensajes. Ese es el corazón del diseño: todo se resuelve con mensajes que el microkernel se encarga de entregar.

A favor En contra
Estabilidad. Si el controlador de la placa de red tiene un error, se cae ese proceso, no el sistema. El núcleo puede reiniciarlo y todo sigue funcionando. Rendimiento. Cada operación implica varios mensajes y cambios de modo, y eso cuesta tiempo. Es el precio que se paga por la estabilidad.
Seguridad. Un controlador comprometido no puede tocar la memoria del núcleo ni la de otros programas: corre sin privilegios, como cualquier otro proceso. Complejidad. Hay que diseñar bien toda la comunicación entre procesos, y eso es más difícil que escribir un programa único.
Portabilidad. Para llevar el sistema a otro procesador hay que adaptar muy poco: el núcleo es chico y los servicios están afuera. Madurez. Menos sistemas comerciales lo usan, así que hay menos controladores disponibles para hardware nuevo.

Ejemplos: MINIX 3, el sistema que Andrew Tanenbaum escribió para enseñar cómo se construye un sistema operativo; QNX, que se usa en tableros de autos, equipos médicos y sistemas industriales, donde fallar no es una opción; y L4, una familia de microkernels muy chicos que se usa como base de otros sistemas.

Kernel híbrido

En la práctica, la discusión entre monolítico y microkernel terminó en un punto medio. Un kernel híbrido es, en esencia, un monolito —tiene adentro el sistema de archivos, la red y los controladores— pero con algunas ideas del microkernel: ciertos servicios se sacan afuera y corren en modo usuario, y la comunicación interna se organiza de manera parecida a la de los mensajes.

A favor En contra
Lo mejor de los dos. Mantiene la velocidad del monolito para las tareas críticas y gana estabilidad en los servicios que se sacan afuera. No es ninguna de las dos cosas puras. Un microkernel de verdad es más chico y más ordenado; un monolito es más simple de entender. El híbrido mezcla y eso lo vuelve difícil de describir.

Ejemplos: es el diseño de los dos sistemas de escritorio más usados del mundo. Windows NT —el núcleo de Windows 8, 10 y 11— es un híbrido: el subsistema gráfico y algunos servicios corren en modo usuario. Y macOS (también iOS) usa XNU, que combina el microkernel Mach con el sistema de archivos y la red de BSD, todo en el mismo núcleo.

Otras variantes

Más allá de los tres grandes hay otros diseños, menos comunes, que conviene al menos saber nombrar:

Tipo En qué consiste Dónde aparece
Nanokernel Un núcleo todavía más chico que un microkernel: casi no ofrece abstracciones y deja lo demás a otros programas. Suele ser una pieza dentro de un núcleo más grande. La parte de virtualización del hipervisor Xen, por ejemplo.
Exokernel No intenta dar una vista cómoda del hardware: reparte los recursos directamente a las aplicaciones, que se arreglan como pueden. Es una idea experimental, muy útil para investigar. Proyectos de investigación (MIT, década de 1990). No se usa en equipos de escritorio.
Unikernel Se compila el núcleo junto con una sola aplicación en una única imagen que arranca directo, sin procesos separados. Muy liviano y rápido, pero hace una sola cosa. Servicios en la nube que necesitan arrancar en milisegundos.
Kernel de tiempo real No es un tipo de arquitectura sino una exigencia: el sistema garantiza cuánto va a tardar en responder. Eso es imprescindible cuando una demora significa un accidente. FreeRTOS en microcontroladores (como los que se ven en la Unidad 3), VxWorks, QNX.

De todos estos, el que más va a aparecer en la vida diaria es el último. Un microcontrolador de un robot o de un horno no tiene un Windows adentro: tiene un kernel de tiempo real diminuto, que hace tres o cuatro cosas sin equivocarse nunca.

Los módulos: monolítico pero flexible

Al monolítico se le critica que hay que recompilarlo cada vez que se agrega un controlador. Linux resolvió eso con los módulos cargables, y es una de las razones de su éxito.

Un módulo es un pedazo de código del kernel que no viene cargado al arrancar, sino que se enchufa al núcleo en pleno funcionamiento. Cuando se conecta una impresora o una placa de red nueva, el sistema carga el módulo correspondiente, y ese código pasa a correr en modo kernel como si siempre hubiera estado ahí.

El resultado es un monolítico modular: sigue siendo un solo programa con todo adentro, como cualquier monolito —y por lo tanto tiene los mismos riesgos—, pero se puede ampliar sin recompilar y sin reiniciar. En una terminal de Linux, lsmod muestra los módulos cargados y modprobe carga uno nuevo.

Qué usa cada sistema operativo

Este es el resumen que conviene llevarse. Cuando en clase aparezca cualquiera de estos sistemas, ya se sabe qué hay adentro:

Sistema operativo Tipo de kernel Detalle
Linux (y las distribuciones) Monolítico modular Todo adentro del núcleo, pero con módulos que se cargan y se descargan en caliente.
Android Monolítico modular Usa el mismo kernel Linux, adaptado a los teléfonos.
Windows (NT, 2000, XP, 7, 8, 10 y 11) Híbrido Núcleo NT: la administración del sistema adentro, y el subsistema gráfico y otros servicios como procesos de usuario.
macOS y iOS Híbrido El núcleo se llama XNU y combina Mach (microkernel) con BSD (archivos y red).
Unix clásico Monolítico El diseño original de los laboratorios Bell, sin módulos.
MS-DOS Monolítico, sin protección Un solo nivel de privilegio: cualquier programa podía escribir en cualquier parte de la memoria.
QNX Microkernel Está en tableros de autos, equipos médicos y sistemas ferroviarios, donde el sistema no puede caerse.
MINIX 3 Microkernel El sistema con el que se enseña la materia en muchas universidades.
FreeRTOS Kernel de tiempo real Diminuto, para microcontroladores. Garantiza el tiempo de respuesta.
Routers, televisores, cajeros Monolítico modular (Linux embebido) Una versión recortada del kernel Linux metida dentro de un aparato que no parece una computadora.
Comparación de los tres tipos de kernel: en el monolítico todo lo que está debajo de las aplicaciones corre en modo kernel; en el híbrido, los servicios y controladores corren en modo usuario y el núcleo en modo kernel; en el microkernel, solo el núcleo mínimo corre en modo kernel Monolítico Híbrido Microkernel Aplicaciones Aplicaciones Aplicaciones servicios y controladores (archivos, red, drivers) servicios y controladores (archivos, red, drivers) servicios y controladores (archivos, red, drivers) NÚCLEO NÚCLEO NÚCLEO planificador · memoria · archivos red · controladores planificador · memoria · archivos red · controladores (en parte) planificador · memoria y mensajes entre procesos Hardware Hardware Hardware Linux, Unix Windows, macOS QNX, MINIX 3
Lo oscuro corre con privilegios (modo kernel); lo claro, en modo usuario. La línea punteada marca dónde está la frontera en cada diseño: cuanto más arriba, más cosas adentro del núcleo. Los tamaños son esquemáticos: el núcleo de un microkernel real es muchísimo más chico.

El debate: Tanenbaum contra Torvalds

En enero de 1992, en los foros de Internet, se armó una discusión que hoy se sigue citando en las universidades. Andrew Tanenbaum, profesor y autor de MINIX, abrió un tema con un título provocador:

"LINUX está obsoleto"

Asunto del mensaje que Andrew Tanenbaum publicó en el grupo comp.os.minix, enero de 1992

Su argumento era técnico: Linux había elegido un diseño monolítico, justo cuando la investigación apuntaba a los microkernels. Sostenía que en pocos años tener todo adentro del núcleo sería un problema, y que el enfoque de MINIX era el camino correcto. Linus Torvalds le respondió defendiendo su diseño: lo importante era que el sistema funcionara bien en la práctica, y un monolito bien hecho era más rápido y más simple de desarrollar.

Visto a la distancia, los dos tenían razón en algo. Linux ganó por goleada en adopción: está en servidores, teléfonos y supercomputadoras. Pero los microkernels se quedaron con el terreno donde un error es inaceptable —autos, aviones, equipos médicos— y los sistemas de escritorio más usados terminaron en un punto medio, el híbrido. En ingeniería no siempre hay un ganador: hay decisiones con costos y beneficios distintos según el problema.

Resumen

Concepto Idea central
Kernel El núcleo del sistema operativo: el único programa que corre con todos los privilegios y por el que pasa toda orden dirigida al hardware.
Sus tareas Procesos, memoria, archivos, dispositivos y seguridad.
Los dos modos Modo usuario para los programas y modo kernel para el núcleo. Las llamadas al sistema (syscalls) son la única puerta entre los dos.
Monolítico Todo adentro, comunicación directa. Rápido, pero un controlador con errores puede tumbar el sistema. Linux y Unix.
Microkernel Adentro solo lo mínimo; el resto son procesos que se hablan por mensajes. Más estable y seguro, más lento. QNX y MINIX 3.
Híbrido Un monolito con partes afuera. Windows (NT) y macOS (XNU).
Módulos La solución de Linux para ampliar el núcleo sin recompilar ni reiniciar.
La idea de fondo Cuanto más código corre con privilegios, más rápido pero más frágil. Cada sistema elige dónde poner la frontera según para qué se usa.