El caso

La memoria se acabó en medio de un pedido. Y el kernel eligió quién moría.

El servidor de la tienda de Isaac tenía 8 GB de RAM. Un viernes, un informe consumió casi todo, y el sistema de pedidos empezó a ir lento. En pocos minutos, el proceso de la base de datos fue cerrado, y los pedidos en curso se detuvieron.

La decisión la tomó el kernel, no el programa del informe.

Este post parte de Kernel: el núcleo del sistema operativo y de Procesos e hilos: cómo el sistema ejecuta tus programas: el kernel es quien gestiona la memoria y los archivos que usan esos procesos.

El problema

La memoria y el disco son finitos

Cada programa necesita memoria para guardar lo que está haciendo, y varios corren al mismo tiempo. La RAM es rápida, pero pequeña. El disco es grande, pero lento. Y los archivos, que viven en el disco, necesitan nombres, permisos y una forma de encontrar cada pedazo después.

Sin una capa que organice todo eso, un programa podría leer la memoria de otro, o sobrescribir el archivo de un compañero.

La solución

Memoria virtual

Con la memoria virtual, cada proceso ve un espacio de direcciones que es solo suyo, como si tuviera toda la memoria para él. El kernel traduce esas direcciones a la memoria física (la RAM) mediante una tabla de páginas. Cada página tiene un tamaño fijo, en general 4 KB.

Por esa traducción, dos procesos pueden usar la misma dirección virtual, y aun así cada uno accede a su propia área de la RAM. Un proceso que intenta leer la memoria de otro es bloqueado por el kernel.

Aislamiento

Cada proceso ve solo su espacio de direcciones.

En la tienda: el informe no puede leer la memoria del sistema de pedidos.

Más memoria que la RAM

Las páginas que no están en uso pueden ir al disco, y volver cuando se necesitan.

En la tienda: el servidor ejecuta más procesos de los que caben en la RAM, solo que más lento.

Compartición

Cuando dos procesos usan el mismo código, el kernel puede guardar una sola copia en la RAM.

En la tienda: varias instancias del mismo programa comparten el código.

Por dentro

Páginas y fallas de página

Cuando un programa accede a una página que no está en la RAM, ocurre una falla de página (page fault). El kernel pausa el proceso, trae la página del disco y reanuda la ejecución. Eso pasa sin que el programa lo note, y lleva tiempo.

Si el sistema pasa todo el tiempo intercambiando páginas entre la RAM y el disco, y casi no ejecuta trabajo útil, tenemos el thrashing: el equipo está ocupado solo en mover memoria.

No los confundas

RAM × swap

La RAM es la memoria física, rápida, donde los procesos realmente corren. El swap es un área del disco que se usa como extensión de la memoria cuando la RAM se acaba. Evita que el sistema se detenga por completo, pero es mucho más lento.

RAM (memoria física)

“¿El dato tiene que estar accesible ahora, lo más rápido posible?”

Ejemplo
Las páginas de la base de datos que se están consultando.
Foco
Rápida y limitada. Es donde el proceso ejecuta.

Swap (área de intercambio)

“¿Se acabó la RAM, y el sistema necesita mantener vivo el proceso?”

Ejemplo
Las páginas de un informe que quedó parado durante la noche.
Foco
Lenta, pero más grande. Evita la falla total, a costa del rendimiento.

Almacenamiento

Sistemas de archivos

Un sistema de archivos (file system) es la forma en que el kernel organiza el disco en archivos y directorios. Responde a tres preguntas: dónde está cada pedazo del archivo, quién puede leerlo o escribirlo, y qué hacer después de un corte de energía.

  • Inodo (inode): la ficha de un archivo. Guarda el tamaño, los permisos, las fechas y dónde están los bloques del contenido. El nombre del archivo no se guarda en el inodo.
  • Directorio: una tabla que liga nombres a inodos. Por eso, renombrar un archivo no toca su contenido.
  • Permisos: quién es dueño del archivo y quién puede leerlo, escribirlo o ejecutarlo. El kernel verifica esa regla en cada acceso.
  • Journaling (registro de cambios): antes de cambiar el disco, el sistema anota la intención en un diario. Si la energía se corta en medio, al volver completa o deshace la operación, sin dejar el disco inconsistente.

Linux usa, por ejemplo, ext4. Windows usa NTFS, y macOS usa APFS. Los nombres cambian; la idea es la misma.

En la práctica

Mirar la memoria y el disco

En Linux, dos comandos muestran el estado del sistema:

bash
free -h
df -h

free -h muestra la RAM y el swap en uso. df -h muestra el espacio ocupado en cada sistema de archivos. Si el disco se llena, muchos servicios dejan de escribir, aunque haya memoria libre.

SituaciónDónde mirar
El servidor va lento y el disco hace mucho ruidofree -h y el uso de swap
Un servicio deja de escribir logsdf -h, espacio libre en el disco
Un proceso fue terminado sin avisoEl log del kernel, que registra el motivo

Términos clave

Seis términos para recordar

Toca la tarjeta para ver la definición.

Prueba rápida

Tres preguntas, estilo examen

01

Dos procesos usan la misma dirección virtual. ¿Por qué uno no lee los datos del otro?

02

Un programa accede a una página que no está en la RAM. ¿Qué hace el kernel?

03

Un archivo fue renombrado. ¿Qué cambió en el disco?


La memoria virtual y los sistemas de archivos son dos caras de la misma tarea del kernel: dar a cada programa un espacio seguro, y organizar el disco para que se pueda usar sin conflictos. Cuando la memoria se acaba, el kernel decide quién se queda. Cuando se corta la energía, el journaling decide qué sobrevive. Juntos son lo que mantiene funcionando una base de datos como la de la tienda de Isaac.