RedNotes
Toggle sidebar
Iniciar sesión
Sistemas Operativos/Memoria virtual
Inicia sesión para editar

La memoria es un recurso que el Sistemas Operativos debe administrar. La jerarquía de memoria va de registros y caché (rápidos, pequeños, caros) a memoria principal y disco (lentos, grandes, baratos).

Sin abstracción

Los primeros sistemas exponían la memoria física directamente: un programa podía sobrescribir al SO y era difícil ejecutar varios a la vez. Se usaron registros base y límite para dar a cada proceso su propio espacio de direcciones — la abstracción de memoria que equivale al proceso para la CPU.

Intercambio (swapping)

Llevar procesos completos a disco y traerlos de vuelta. Genera huecos en memoria (fragmentación externa), que pueden compactarse. El espacio libre se administra con mapas de bits o listas ligadas usando algoritmos como first fit, next fit, best fit, worst fit y quick fit.

Memoria virtual

Idea (Fotheringham, 1961): cada programa tiene su propio espacio de direcciones, dividido en páginas, que no necesitan estar todas en memoria física. Cuando se accede a una página ausente ocurre un fallo de página y el SO la trae de disco.

Paginación

  • Direcciones virtuales → la MMU (Memory Management Unit) → direcciones físicas.
  • El espacio virtual se divide en páginas; la memoria física en marcos de página del mismo tamaño (típicamente 4 KB).
  • La dirección virtual se divide en número de página y desplazamiento.

Entrada de la tabla de páginas

Campo Uso
Número de marco Dónde está la página en memoria física
Bit presente/ausente ¿Está en memoria?
Protección Lectura/escritura/ejecución
Bit modificado (dirty) Si se escribió, debe guardarse en disco antes de desalojarla
Bit referenciado Si se accedió recientemente
Caché deshabilitada Para páginas mapeadas a dispositivos

Acelerar la paginación

  • TLB (Translation Lookaside Buffer): una caché asociativa en la MMU que guarda traducciones recientes; la mayoría de los accesos aciertan.
  • Tablas de páginas multinivel: evitan tener en memoria la tabla completa (x86-64 usa 4 o 5 niveles).
  • Tablas de páginas invertidas: una entrada por marco físico en lugar de por página virtual.

Algoritmos de reemplazo de páginas

Cuando hay un fallo de página y no hay marcos libres, hay que desalojar una página:

Algoritmo Idea Comentario
Óptimo (Belady) Desalojar la página que se usará más tarde No implementable; sirve de referencia
NRU Clases según bits R y M; desalojar de la clase más baja Simple, aceptable
FIFO Desalojar la página más antigua Puede quitar páginas muy usadas; sufre la anomalía de Belady
Segunda oportunidad FIFO, pero si R = 1 se limpia y se mueve al final Mejora a FIFO
Reloj Segunda oportunidad con una lista circular Muy usado en la práctica
LRU Desalojar la menos usada recientemente Excelente pero costoso de implementar exactamente
NFU / Envejecimiento Aproxima LRU con contadores desplazados Buena aproximación eficiente
Conjunto de trabajo Desalojar páginas fuera del conjunto de trabajo Costoso
WSClock Conjunto de trabajo + reloj Buena opción en la práctica

Conceptos clave

  • Conjunto de trabajo (working set): las páginas que un proceso usa en un intervalo reciente. Si no cabe en memoria, ocurre hiperpaginación (thrashing).
  • Localidad de referencia: los programas tienden a acceder a regiones cercanas.
  • Paginación por demanda vs prepaginación.
  • Políticas locales vs globales de asignación de marcos; algoritmo PFF (frecuencia de fallos de página).
  • Páginas compartidas y copy-on-write, clave para que fork sea barato (ver Sistemas Operativos/Llamadas al sistema).

Segmentación

Varios espacios de direcciones independientes (segmentos) por proceso, de tamaño variable: código, datos, pila. Facilita compartir y proteger. MULTICS y el Intel x86 (modo protegido) combinaban segmentación con paginación.

#sistemas-operativos #tanenbaum #memoria