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
16 Unidad 7: Memoria Virtual
Fundamentos y Conceptos Clave
16.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.
16.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.
16.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.
16.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.
16.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.
16.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
16.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
16.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.
16.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
16.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.