flowchart LR
P["Programa<br/>dirección virtual"] --> MMU["MMU<br/>traducción"]
MMU --> T["Tabla de páginas"]
T --> Q{"¿Página<br/>en RAM?"}
Q -->|Sí| R["RAM<br/>marco físico"]
Q -->|No| F["Fallo de página<br/>interviene el SO"]
F --> D[("Disco o archivo")]
D --> R
10 Unidad 7: Memoria Virtual
Fundamentos y Conceptos Clave
10.1 Introducción
La memoria virtual constituye una de las abstracciones fundamentales en los sistemas operativos modernos. Su estudio es crucial para comprender cómo se optimiza el uso de la memoria principal y se preserva la integridad de los procesos en entornos multitarea.
A lo largo de esta unidad se analizarán sus principios de funcionamiento, los componentes involucrados y el mecanismo que permite la traducción entre direcciones virtuales y físicas. Al finalizar, el estudiante será capaz de definir la memoria virtual, identificar sus elementos estructurales y describir el proceso de traducción de direcciones.
10.2 1. Concepto de Memoria Virtual
La memoria virtual es un método de gestión que ofrece a cada proceso la ilusión de disponer de un espacio de direcciones propio, continuo y exclusivo, denominado espacio de direcciones virtual. Este es independiente de la memoria física real (RAM) y de su organización.
En términos operativos, las direcciones que maneja un programa (virtuales) se desacoplan de las direcciones reales en la memoria física (físicas).
Esta separación es administrada por el sistema operativo en coordinación con la Unidad de Gestión de Memoria (MMU), un componente especializado de hardware. El resultado es un uso más seguro y eficiente de la RAM, favoreciendo la concurrencia de procesos.
10.2.1 1.1. ¿Qué es la memoria RAM?
La RAM (Random Access Memory) es un componente físico de la computadora. Está formada por los módulos de memoria instalados en el equipo y almacena temporalmente las instrucciones y los datos que la CPU necesita mientras ejecuta los programas.
La RAM posee tres características importantes:
- Es física y limitada: si una computadora tiene 8 GiB de RAM, esa es la cantidad real de memoria principal disponible para el sistema operativo y los procesos.
- Es volátil: su contenido se pierde cuando el equipo se apaga.
- Es rápida: acceder a la RAM es mucho más veloz que recuperar datos desde un SSD o un disco rígido.
Por ejemplo, cuando se abre un navegador, parte de su código, las pestañas y las imágenes que se están utilizando deben encontrarse en la RAM para que la CPU pueda trabajar con ellas.
10.2.2 1.2. ¿Qué es entonces la memoria virtual?
La memoria virtual no es otro módulo ni un segundo tipo de RAM. Es una abstracción creada por el sistema operativo con apoyo del hardware. En lugar de permitir que un programa use directamente las posiciones de la RAM, el sistema le entrega un mapa privado de direcciones.
El programa trabaja como si dispusiera de una memoria continua y exclusivamente suya. Sin embargo, el sistema operativo puede ubicar sus datos en marcos dispersos de la RAM, compartir algunas páginas de forma controlada o mantener temporalmente ciertas páginas fuera de la RAM.
| Aspecto | Memoria RAM | Memoria virtual |
|---|---|---|
| Naturaleza | Componente físico | Abstracción administrada por el SO y la MMU |
| Contenido | Datos e instrucciones activos | Direcciones del espacio de cada proceso |
| Capacidad | Fijada por los módulos instalados | Puede superar la RAM disponible |
| Velocidad | Acceso directo y rápido | Depende de dónde esté la página |
| Organización | Marcos compartidos por el sistema | Espacio privado y continuo por proceso |
| Persistencia | Volátil | No es almacenamiento permanente |
Tabla 1: Diferencias entre la memoria RAM y la memoria virtual.
La memoria virtual no aumenta físicamente la RAM. Puede ampliar el espacio utilizable mediante el almacenamiento secundario, pero acceder a una página que está fuera de la RAM es mucho más lento. El área de intercambio (swap) es un apoyo de la memoria virtual, no un reemplazo equivalente de la RAM.
10.2.3 1.3. ¿Cómo funciona?
El funcionamiento puede comprenderse siguiendo un acceso sencillo:
- Un programa solicita leer o escribir una dirección virtual.
- La CPU entrega esa dirección a la MMU.
- La MMU consulta la tabla de páginas configurada por el sistema operativo.
- Si la página está en RAM, la MMU traduce la dirección virtual al marco físico y la CPU accede al dato.
- Si la página no está en RAM, ocurre un fallo de página. El sistema operativo localiza el contenido, consigue un marco, carga la página y reanuda el programa.
- Si la dirección no pertenece al proceso o el acceso viola sus permisos, el sistema operativo rechaza la operación.
Ejemplo didáctico. Un navegador intenta acceder a una imagen usando una dirección virtual. El navegador no sabe en qué chip ni en qué posición física se encuentra. La MMU consulta el mapa del proceso: si la página está en el marco 12, dirige allí el acceso. Si la página fue retirada de la RAM, el sistema operativo la recupera antes de permitir que el navegador continúe.
Puede pensarse en la RAM como el espacio real disponible sobre una mesa y en la memoria virtual como el sistema de numeración y el catálogo que indica dónde está cada documento. El catálogo puede mencionar más documentos de los que caben simultáneamente en la mesa; solo los que se necesitan ahora deben estar sobre ella.
10.3 2. Problemas que resuelve
La memoria virtual surge como respuesta a las limitaciones inherentes de la gestión directa de memoria física en sistemas multitarea:
Protección: Impide que un proceso acceda a regiones de memoria de otros procesos o del propio sistema operativo, evitando corrupción de datos y fallos críticos.
Eficiencia en el uso de memoria: No es necesario cargar un programa completo en RAM. Esto evita ocupar espacio con código poco utilizado.
Fragmentación: La asignación y liberación dinámica de memoria genera fragmentos no utilizables. La memoria virtual reduce este problema.
Independencia de ubicación: Los programas no necesitan saber dónde residen físicamente sus datos o instrucciones, lo que facilita su carga en cualquier área disponible.
10.4 3. Implementación: Paginación y traducción de direcciones
El método más común para implementar memoria virtual es la paginación.
En este modelo, tanto el espacio de direcciones virtual como la memoria física se dividen en bloques de tamaño fijo.
10.4.1 3.1. Páginas y marcos
Página (Page): Bloque de tamaño fijo de memoria virtual.
Marco (Frame): Bloque de tamaño fijo de memoria física.
El tamaño de página y marco es idéntico (por ejemplo, 4 KB en arquitecturas de 32/64 bits). Cualquier página puede ubicarse en cualquier marco libre, sin necesidad de que estén contiguos en memoria física.
flowchart TB
subgraph Virtual ["Espacio de Direcciones Virtual"]
P0[Página 0<br/>4KB]
P1[Página 1<br/>4KB]
P2[Página 2<br/>4KB]
P3[Página 3<br/>4KB]
end
subgraph Physical ["Memoria Física (RAM)"]
F0[Marco 0<br/>4KB]
F1[Marco 1<br/>4KB]
F2[Marco 2<br/>4KB]
F3[Marco 3<br/>4KB]
F4[Marco 4<br/>4KB]
F5[Marco 5<br/>4KB]
end
P0 -.->|Mapeo| F2
P1 -.->|Mapeo| F5
P2 -.->|Mapeo| F1
P3 -.->|Mapeo| F4
style Virtual fill:#e1f5fe
style Physical fill:#f3e5f5
10.4.2 3.2. Tabla de páginas
El sistema operativo mantiene, para cada proceso, una tabla de páginas que indica en qué marco físico se encuentra cada página virtual.
Cada entrada (PTE, Page Table Entry) contiene información como:
- Número de marco físico.
- Bit de presencia (indica si la página está en RAM o en disco).
- Bits de protección (permisos de lectura, escritura, ejecución).
flowchart TB
subgraph PT ["Tabla de Páginas - Proceso A"]
PTE0["Entrada 0<br/>Marco: 2 | Presente: 1 | R/W/X: 111"]
PTE1["Entrada 1<br/>Marco: 5 | Presente: 1 | R/W/X: 101"]
PTE2["Entrada 2<br/>Marco: - | Presente: 0 | R/W/X: 110"]
PTE3["Entrada 3<br/>Marco: 1 | Presente: 1 | R/W/X: 100"]
end
subgraph Campos ["Campos de PTE"]
Marco["Número de Marco<br/>(Frame Number)"]
Presente["Bit de Presencia<br/>(Present Bit)"]
Permisos["Bits de Protección<br/>R: Read | W: Write | X: Execute"]
end
subgraph RAM ["Memoria Física"]
M0["Marco 0"]
M1["Marco 1"]
M2["Marco 2"]
M3["Marco 3"]
M4["Marco 4"]
M5["Marco 5"]
end
PTE0 -.-> M2
PTE1 -.-> M5
PTE2 -.->|Page Fault| Disco[("Disco<br/>(Swap)")]
PTE3 -.-> M1
style PTE2 fill:#ffcdd2
style Disco fill:#fff3e0
10.4.3 3.3. Unidad de Gestión de Memoria (MMU)
La MMU traduce de manera automática y veloz las direcciones virtuales en físicas:
- La CPU genera una dirección virtual.
- La MMU la divide en número de página virtual y desplazamiento.
- Busca el número de página en la tabla de páginas del proceso activo.
- Obtiene el número de marco correspondiente.
- Concatena el número de marco y el desplazamiento para obtener la dirección física.
flowchart TD
CPU["CPU genera<br/>Dirección Virtual<br/>0x1004"]
subgraph MMU_Process ["Proceso MMU"]
Split["Dividir dirección:<br/>Página: 0x1 (1)<br/>Offset: 0x004 (4)"]
Lookup["Buscar en tabla<br/>de páginas:<br/>Página 1 → Marco ?"]
subgraph PT ["Tabla de Páginas"]
PTE1["Página 1<br/>Marco: 5<br/>Presente: 1"]
end
Found["Marco encontrado: 5<br/>Construir dirección física:<br/>Marco 5 + Offset 4"]
end
Physical["Dirección Física<br/>0x5004"]
Memory["Acceso a<br/>Memoria Física<br/>Marco 5, Offset 4"]
CPU --> Split
Split --> Lookup
Lookup --> PT
PT --> Found
Found --> Physical
Physical --> Memory
style CPU fill:#e3f2fd
style Physical fill:#e8f5e8
style PT fill:#fff3e0
style Memory fill:#f3e5f5
10.5 4. El mecanismo en acción: Fallo de página (Page Fault)
Durante la traducción de direcciones, es posible que la MMU encuentre que el bit de presencia en la entrada de la tabla de páginas está en 0. Esto indica que la página solicitada no está cargada en la memoria física (RAM).
A este evento se le denomina fallo de página y, lejos de ser un error fatal, es un elemento normal y esperado dentro de la gestión de memoria virtual.
El manejo del fallo de página sigue una secuencia bien definida:
Interrupción de hardware: La MMU genera una señal (trap) al detectar la ausencia de la página, transfiriendo el control al sistema operativo.
Suspensión del proceso: El sistema operativo detiene temporalmente la ejecución del proceso que causó el fallo.
Verificación de acceso: - Si el acceso es inválido (por ejemplo, escritura en una página de solo lectura), el sistema operativo termina el proceso. - Si es válido, se procede a localizar la página en el almacenamiento secundario.
Asignación de marco libre: Se busca un marco disponible en la RAM. - Si no hay marcos libres, se aplica un algoritmo de reemplazo de página (tema que se desarrollará en la próxima unidad).
Carga de la página: El sistema operativo emite una operación de entrada/salida (E/S) para traer la página desde disco al marco libre. Este es el paso más costoso en tiempo.
Actualización de la tabla de páginas: Se marca el bit de presencia en 1 y se registra el número de marco físico asignado.
Reanudación del proceso: El control regresa al proceso, que vuelve a ejecutar la instrucción que provocó el fallo. Esta vez, la traducción será exitosa.
10.5.1 Clasificación de fallos de página:
Fallo mayor (Major Fault): Requiere acceso a disco para cargar la página.
Fallo menor (Minor Fault): La página ya está en memoria, pero debe asignarse o actualizarse la referencia en la tabla.
flowchart TD
Start["MMU detecta<br/>Bit Presente = 0<br/>🚨 PAGE FAULT"]
Trap["Interrupción de Hardware<br/>Control → SO"]
Suspend["Suspender Proceso<br/>Guardar contexto"]
Check{"¿Acceso válido?"}
Invalid["Acceso inválido<br/>❌ TERMINAR PROCESO"]
FindFrame{"¿Marco libre<br/>disponible?"}
Replace["Aplicar algoritmo<br/>de reemplazo<br/>(LRU, FIFO, etc.)"]
LoadPage["Cargar página<br/>desde disco<br/>⏳ Operación E/S"]
UpdateTable["Actualizar tabla:<br/>• Presente = 1<br/>• Marco = N<br/>• Permisos"]
Resume["Reanudar proceso<br/>Reintentar instrucción"]
Success["✅ Acceso exitoso<br/>Traducción completa"]
Start --> Trap
Trap --> Suspend
Suspend --> Check
Check -->|Inválido| Invalid
Check -->|Válido| FindFrame
FindFrame -->|No hay marco| Replace
FindFrame -->|Marco libre| LoadPage
Replace --> LoadPage
LoadPage --> UpdateTable
UpdateTable --> Resume
Resume --> Success
style Start fill:#ffcdd2
style Invalid fill:#f44336,color:#fff
style LoadPage fill:#fff3e0
style Success fill:#c8e6c9
style Replace fill:#ffe0b2
10.6 5. Analogía: La biblioteca
Para reforzar el concepto, se propone una analogía:
Imagine que la memoria virtual es el índice de una gran enciclopedia.
La memoria física es la cantidad limitada de escritorios en la sala de lectura.
La tabla de páginas es la libreta del bibliotecario, donde se registra qué página de la enciclopedia está en qué escritorio.
Un fallo de página ocurre cuando el lector solicita una página que no está sobre ningún escritorio, obligando al bibliotecario a ir a buscarla a las estanterías (disco).
Esta comparación, aunque simplificada, permite visualizar la relación entre el espacio virtual, la RAM y el almacenamiento secundario.