¿Qué es la Gestión de Memoria?
Concepto Fundamental
La gestión de memoria es el proceso mediante el cual el sistema operativo controla y coordina el uso de la memoria principal (RAM) del computador, optimizando la asignación y liberación de espacios de memoria para los programas en ejecución.
Importancia
Una gestión eficiente de memoria permite ejecutar múltiples programas simultáneamente, maximiza el rendimiento del sistema, previene conflictos entre procesos y garantiza la estabilidad del sistema operativo.
Jerarquía de Memoria
Registros de CPU
Los registros más rápidos del procesador, acceso instantáneo
Memoria Caché
Memoria ultra-rápida que almacena datos frecuentemente utilizados
Memoria Principal (RAM)
Memoria principal donde se cargan los programas en ejecución
Almacenamiento Secundario
Discos duros, SSD y otros dispositivos de almacenamiento permanente
Tipos de Gestión de Memoria
Memoria Física
Memoria Virtual
Protección
Optimización
Sistema de Paginación
La paginación es una técnica de gestión de memoria que divide tanto la memoria física como la virtual en bloques de tamaño fijo llamados páginas, permitiendo una asignación más eficiente y flexible.
Tabla de Páginas
Estructura que mapea páginas virtuales a marcos de página físicos
Número de Página Virtual
Índice que identifica cada página en el espacio virtual del proceso
Marco de Página Físico
Dirección real en memoria física donde se encuentra la página
Bit de Validez
Indica si la página está actualmente en memoria física
Bits de Protección
Definen permisos de lectura, escritura y ejecución
Algoritmos de Reemplazo de Páginas
Cuando la memoria física se llena, el sistema debe decidir qué páginas reemplazar para hacer espacio a nuevas páginas. Los algoritmos de reemplazo determinan esta selección.
| Algoritmo | Descripción | Complejidad | Eficiencia |
|---|---|---|---|
| FIFO | Reemplaza la página que llegó primero (First In, First Out) | O(1) | Baja |
| LRU | Reemplaza la página usada menos recientemente | O(1) con hardware | Alta |
| Óptimo | Reemplaza la página que no se usará por más tiempo | Teórico | Máxima |
| Clock | Aproximación de LRU usando bit de referencia | O(n) | Media-Alta |
| LFU | Reemplaza la página usada con menor frecuencia | O(log n) | Media |
| MFU | Reemplaza la página usada con mayor frecuencia | O(log n) | Baja |
| Random | Selecciona una página aleatoriamente para reemplazar | O(1) | Variable |
| Second Chance | FIFO modificado que da una segunda oportunidad | O(n) | Media |
Fragmentación de Memoria
Fragmentación Externa
Definición: Espacios libres de memoria que no pueden utilizarse porque están divididos en fragmentos demasiado pequeños.
Características:
- Ocurre en asignación variable
- Memoria total disponible pero no contigua
- Reduce eficiencia del sistema
Soluciones:
Fragmentación Interna
Definición: Memoria desperdiciada dentro de una unidad de asignación porque el proceso no utiliza todo el espacio asignado.
Características:
- Ocurre en asignación fija
- Espacio asignado pero no utilizado
- Promedio: 50% del bloque
Soluciones:
Técnicas Modernas de Gestión
Copy-on-Write (COW)
Técnica que permite compartir páginas entre procesos hasta que uno de ellos modifica el contenido, momento en el que se crea una copia.
fork() + COW = eficiencia
Beneficio: Reduce uso de memoria y mejora rendimiento en creación de procesos.
Memoria Compartida
Permite que múltiples procesos accedan a la misma región de memoria física, facilitando la comunicación entre procesos.
shm_open() + mmap()
Beneficio: Comunicación rápida y eficiente entre procesos relacionados.
NUMA (Non-Uniform Memory Access)
Arquitectura donde el tiempo de acceso a memoria depende de la ubicación relativa del procesador y la memoria.
numactl --cpubind=0
Beneficio: Optimiza rendimiento en sistemas multiprocesador.
Ballooning
Técnica de virtualización que permite al hipervisor reclamar memoria de máquinas virtuales cuando es necesario.
VMware Tools + ballooning
Beneficio: Gestión dinámica de memoria en entornos virtualizados.
Huge Pages
Uso de páginas de mayor tamaño (2MB, 1GB) para reducir la sobrecarga de la tabla de páginas en aplicaciones que manejan grandes cantidades de memoria.
echo 20 > /proc/sys/vm/nr_hugepages
Beneficio: Mejora rendimiento en aplicaciones intensivas en memoria.
Memory Compression
Compresión de páginas en memoria antes de intercambiarlas al disco, reduciendo la necesidad de I/O.
zswap + lz4
Beneficio: Reduce latencia y mejora responsividad del sistema.