Memoria virtual: qué es y cómo funciona (paginación y swap)

Descubre qué es la memoria virtual, cómo funcionan la paginación y el swap, y su impacto en el rendimiento y tiempos de respuesta de sistemas operativos.

Autor: Leandro Alegsa

La memoria virtual es una técnica de gestión de la memoria que permite a un sistema operativo y al hardware ofrecer a cada proceso la ilusión de disponer de un bloque contiguo y exclusivo de direcciones de memoria. Aunque hoy se considera una técnica estándar en la tecnología usada en los ordenadores, su objetivo esencial sigue siendo sencillo: permitir que el software funcione sin preocuparse por la cantidad física de memoria del ordenador instalada ni por la fragmentación del espacio físico.

La mayoría de los ordenadores actuales ejecutan varias aplicaciones al mismo tiempo (lo que se asocia en el texto original con multiprocesamiento), por lo que los programas comparten los recursos físicos: procesador(s) y memoria principal (RAM). El sistema no necesita más procesadores o más memoria principal (RAM) cuando se ejecutan más programas; en su lugar, la memoria virtual hace posible que cada proceso «vea» su propio espacio de direcciones independiente.

¿Cómo funciona, en términos generales?

Cada proceso trabaja con direcciones virtuales: direcciones lógicas que el proceso cree que son reales y contiguas. El hardware y el sistema operativo traducen esas direcciones virtuales a direcciones físicas reales en la RAM o, si hace falta, a ubicaciones en el disco. Esta traducción la realiza principalmente la unidad de gestión de memoria (MMU, por sus siglas en inglés) del procesador, con la ayuda del sistema operativo, no la Unidad Lógica Aritmética (ALU). Los sistemas operativos modernos mantienen estructuras (tablas de páginas) que describen cómo mapear direcciones virtuales en marcos físicos o en disco.

Paginación: páginas y marcos

La paginación es la técnica más usada para implementar memoria virtual. El espacio virtual y el espacio físico se dividen en bloques de tamaño fijo:

  • Las unidades del espacio virtual se llaman páginas (page).
  • Las unidades del espacio físico (RAM) se llaman marcos o frames.

Cuando una página virtual está en memoria física, la MMU la mapea a un marco. Si el proceso intenta acceder a una página que no está cargada en RAM, ocurre un fallo de página (page fault): el sistema operativo decide cargar la página desde el disco a un marco libre, y si no hay marcos libres puede elegir una página residente para escribirla en el disco y liberar su marco (reemplazo de página).

Swap (intercambio) y archivos de intercambio

El término swap (intercambio) se refiere al espacio en disco usado para almacenar páginas que no están en RAM. Puede existir como una partición de intercambio dedicada o como un archivo (swapfile) dentro del sistema de ficheros. Cuando el sistema mueve páginas entre RAM y swap se dice que «intercambia» (swap in / swap out). Este mecanismo permite que la memoria virtual disponible sea mayor que la memoria física, pero leer/escribir en disco es mucho más lento que en RAM, por lo que el rendimiento se ve afectado si hay muchos intercambios.

Traducción rápida: TLB y cachés

La traducción de direcciones virtuales a físicas implica buscar la entrada adecuada en la tabla de páginas. Para acelerar esto, los procesadores usan una caché de traducción llamada TLB (Translation Lookaside Buffer). Si la entrada está en la TLB, la dirección se traduce rápidamente; si no (TLB miss), hay que consultar la tabla de páginas en memoria, lo que es más lento y puede generar más trabajo del sistema operativo.

Algoritmos de reemplazo de páginas

Cuando hace falta liberar marcos, el sistema operativo aplica un algoritmo para elegir qué página expulsar al disco. Entre los más conocidos:

  • FIFO (First-In, First-Out): expulsa la página más antigua.
  • LRU (Least Recently Used): expulsa la página que menos recientemente se ha usado (aproximación típica por hardware o software).
  • NRU (Not Recently Used) y variantes por bits de uso/ modificado.
  • Algoritmos más avanzados usan información de acceso o heurísticas específicas para la carga del sistema.

La elección del algoritmo influye notablemente en el rendimiento y en la frecuencia de intercambios.

Demand paging y prefetching

La paginación puede ser de demanda: solo se cargan páginas cuando el proceso las necesita (dando lugar a fallos de página iniciales). Alternativamente, el sistema puede precargar (prefetch) conjuntos de páginas que espera que el proceso utilice, reduciendo fallos a costa de usar más RAM.

Problemas: thrashing y latencias

El thrashing ocurre cuando el sistema pasa mucho tiempo intercambiando páginas y poco tiempo ejecutando trabajo útil; la CPU está ocupada gestionando fallos de página y el rendimiento cae drásticamente. Además, las latencias se vuelven impredecibles: una aplicación que accede a una página en disco sufrirá una demora (ordena de milisegundos) frente al acceso en RAM (nanosegundos), lo que complica sistemas con requisitos de tiempo real.

Ventajas de la memoria virtual

  • Cada proceso tiene su propio espacio de direcciones, lo que mejora la seguridad y el aislamiento.
  • Permite ejecutar programas cuya necesidad total de memoria supera la memoria física disponible.
  • Simplifica la gestión de memoria y evita la fragmentación externa al usar bloques de tamaño fijo.
  • Facilita la implementación de características como memoria compartida, copia en escritura (copy-on-write) y protección de páginas (lectura/escritura/ejecución).

Cuándo no se usa memoria virtual

Algunos sistemas, especialmente los sistemas embebidos o sistemas de tiempo real, prescinden de memoria virtual porque necesitan una latencia constante y predecible. Con memoria virtual es difícil garantizar tiempos de respuesta deterministas: si una operación provoca un fallo de página y hay que leer desde disco, el tiempo de respuesta puede aumentar de forma significativa e impredecible, lo que suele ser inaceptable para ciertos controles industriales o sistemas críticos.

Detalles prácticos y parámetros

  • Tamaño de página: típicamente 4 KiB en arquitecturas comunes (aunque existen páginas grandes/hugepages de 2 MiB o más para mejorar rendimiento en cargas intensivas).
  • Swap vs archivo de intercambio: ambos permiten ampliar el espacio virtual, pero la administración y el comportamiento pueden variar según el sistema operativo.
  • Herramientas: sistemas Unix/Linux ofrecen utilidades para ver el uso de swap y memoria (por ejemplo, free, vmstat, top), y para ajustar políticas de swap.

En resumen, la memoria virtual es una pieza clave de los sistemas modernos: permite aislar procesos, aprovechar mejor la RAM disponible y ofrecer flexibilidad. Sin embargo, introduce complejidad y latencia cuando se recurre al disco, por lo que su diseño y ajuste (tamaños de página, políticas de reemplazo, uso de TLB, estrategias de prefetch) son críticos para obtener buen rendimiento.

El programa cree que tiene un gran rango de direcciones contiguas; pero en realidad las partes que está utilizando en ese momento están dispersas por la memoria principal, y las partes inactivas se guardan en un archivo de disco.Zoom
El programa cree que tiene un gran rango de direcciones contiguas; pero en realidad las partes que está utilizando en ese momento están dispersas por la memoria principal, y las partes inactivas se guardan en un archivo de disco.

Preguntas y respuestas

P: ¿Qué es la memoria virtual?


R: La memoria virtual es una forma de gestionar la memoria del ordenador que permite a las aplicaciones acceder a un bloque de memoria de un tamaño determinado. Este bloque de memoria puede proceder de diferentes partes, como la memoria principal o el disco.

P: ¿Cómo funciona la memoria virtual?


R: La memoria virtual funciona permitiendo que la Unidad Lógica Aritmética de la CPU realice las traducciones entre los recursos de la aplicación y los del sistema. Los sistemas operativos modernos también realizan parte de este trabajo. Cuando una aplicación intenta acceder a un bloque de memoria que no está en la memoria del sistema, se detendrá y el bloque se cargará en la memoria del sistema.

P: ¿Cuáles son algunos ejemplos de ordenadores que no utilizan Memoria virtual?


R: Los sistemas integrados son un ejemplo de ordenadores que no utilizan Memoria virtual porque necesitan tiempos de respuesta rápidos o que se mantengan siempre iguales. Es difícil predecir el tiempo de respuesta con la Memoria virtual, por lo que no se utiliza en los sistemas integrados.

P: ¿Qué es el multiprocesamiento?


R: El multiprocesamiento es cuando un ordenador puede hacer más de una cosa a la vez, ejecutando varias aplicaciones a la vez que comparten sus recursos.

P: ¿Qué ocurre cuando una aplicación intenta acceder a un bloque de Memoria que no está en la Memoria del sistema?


R: Cuando una aplicación intenta acceder a un bloque de Memoria que no está en la Memoria del sistema, se detendrá y el bloque se cargará en la Memoria del sistema.

P: ¿Qué es la paginación?


R: La paginación se refiere a lo que ocurre cuando lo que había en esa parte de la Memoria del sistema necesita escribirse de nuevo en el disco debido a que una aplicación accede a otra parte que no estaba almacenada allí originalmente.


Buscar dentro de la enciclopedia
AlegsaOnline.com - 2020 / 2025 - License CC3