Administración de memoria

Clase 2 — ¿Qué ocurre cuando no alcanza la RAM?

Sistemas Operativos

...de la clase anterior

Un proceso utiliza direcciones virtuales.

La MMU traduce páginas virtuales a marcos físicos.

¿Qué pasa con la página virtual 8 del ejemplo de Tanenbaum?

Hoy veremos hoy:

  1. Cuando una página no está en RAM
  2. Memoria virtual observada en Linux
  3. Reemplazo de páginas
  4. Localidad, conjunto de trabajo y rendimiento

Sistemas Operativos

1. Cuando una página no está en RAM

¿Cómo continúa ejecutándose el proceso?

Dirección virtual 32780

Recordemos el ejemplo de Tanenbaum:

  • Tamaño de página: 4096 bytes
  • Página virtual: 8
  • Desplazamiento: 12 bytes
  • Tabla de páginas: 8 → X

La página 8 no está presente en RAM.

¿Cómo puede continuar el proceso?

Un fallo de página

La CPU intenta acceder a una página que no está presente en RAM.

  • La MMU detecta que no puede completar el acceso.
  • La CPU genera una excepción: Page Fault.
  • El control se transfiere al sistema operativo.

¿Significa que el programa cometió un error?

¿Qué hace el sistema operativo?

Cuando recibe un fallo de página:

  1. Comprueba que el acceso sea válido.
  2. Consigue un marco físico disponible.
  3. Recupera o inicializa el contenido de la página.
  4. Actualiza la tabla de páginas.
  5. Reanuda la instrucción que provocó el fallo.

Si el fallo puede resolverse, el proceso continúa normalmente.

Volvamos a la página 8

En nuestro ejemplo, todos los marcos físicos están ocupados.

El sistema operativo necesita liberar uno.

Supongamos que decide desalojar la página virtual 1, que ocupa el marco físico 1.

Antes:

  • Página 1 → Marco 1
  • Página 8 → No presente

Después:

  • Página 1 → No presente
  • Página 8 → Marco 1

Nueva dirección física:

1 × 4096 + 12 = 4108

¿Cómo decide qué página desalojar?

¿De dónde sale el contenido de una página?

Cuando el sistema operativo necesita una página, puede:

  • Recuperarla del archivo ejecutable o de una biblioteca.
  • Obtenerla de un archivo mapeado.
  • Recuperarla del área de swap.
  • Crear una página nueva inicializada en cero.

No toda página ausente necesita leerse del disco.

Ausente no significa inválida

Caso A — Página válida, pero ausente

  • La dirección pertenece al espacio válido del proceso.
  • El sistema operativo puede resolver el fallo.
  • El programa continúa ejecutándose.

Caso B — Dirección inválida o acceso prohibido

  • El acceso no está autorizado.
  • El sistema operativo normalmente no puede satisfacerlo.
  • En Linux, puede producirse una señal SIGSEGV.

Un fallo de página no necesariamente es un error de programación.

Memoria virtual ≠ Swap

Memoria virtual

Es la abstracción que permite a cada proceso disponer de su propio espacio de direcciones.

Swap

Es un mecanismo que permite conservar fuera de RAM determinadas páginas de memoria.

La memoria virtual no requiere necesariamente swap.

¿Puede funcionar un sistema con memoria virtual y sin swap?

Sistemas Operativos

2. Mirar la memoria en Linux

¿Es lo mismo reservar memoria
que ocupar RAM?

Dudas antes del práctico

Un proceso solicita una región adicional de 64 MiB.

¿Qué esperamos que ocurra inmediatamente?

  • ¿Aumentará VmSize?
  • ¿Aumentará VmRSS en la misma cantidad?
  • ¿Será necesario leer datos del disco?

Práctico 1 — Memoria bajo demanda

En Linux, ejecutaremos:

python3 memoria_bajo_demanda.py --mib 64

Observaremos cuatro momentos:

  1. Antes de reservar memoria.
  2. Después de reservar, sin utilizar las páginas.
  3. Después de escribir en cada página.
  4. Después de liberar la región.

¿En qué momento se ocupa realmente la RAM?

Práctico 1 — Registramos los resultados

Memoria reservada: _____ MiB

Tamaño de página: _____ bytes

Indicador Antes Reservada Utilizada
VmSize (kB) _____ _____ _____
VmRSS (kB) _____ _____ _____
Fallos menores _____ _____ _____

¿Qué cambió al reservar? ¿Y al escribir?

Práctico 1 — Hagamos las cuentas

1. ¿Cuántas páginas reservamos?

(_____ MiB × 1024 × 1024) / _____ bytes = _____ páginas

2. ¿Cuánto aumentó la memoria residente?

VmRSS utilizada − VmRSS reservada = _____ kB

3. ¿Cuántos fallos menores nuevos ocurrieron?

Fallos utilizada − Fallos reservada = _____

¿Qué relación encontramos entre las páginas utilizadas y los fallos menores?

¿Qué significan las mediciones?

  • VmSize: tamaño del espacio virtual mapeado.
  • VmRSS: memoria residente en RAM.
  • Fallos menores: se resuelven sin recuperar contenido mediante E/S.
  • Fallos mayores: requieren E/S para recuperar contenido.

Los contadores de fallos se acumulan desde el inicio del proceso.

¿Reservar memoria produce necesariamente fallos de página?

¿Qué acabamos de observar?

  • Reservar espacio virtual no obliga a ocupar inmediatamente toda esa RAM.
  • Al escribir, las páginas pueden materializarse bajo demanda.
  • Muchos fallos de página son normales y recuperables.

¿Cómo se relaciona esto con la diferencia entre VmSize y VmRSS?

¿Para qué sirve el swap?

  • Permite desplazar fuera de RAM ciertas páginas cuando es necesario.
  • Recuperarlas puede ser mucho más costoso que acceder a RAM.
  • No es obligatorio para que exista memoria virtual.
  • No garantiza que un sistema pueda ejecutar cualquier carga.

¿Qué precio pagamos cuando tenemos que recuperar páginas desde almacenamiento?

Swap — Agregamos espacio de intercambio

En Linux, creamos y activamos un archivo swap de 512 MiB:

fallocate -l 512M /swapfile
chmod 600 /swapfile
mkswap /swapfile
swapon /swapfile

Verificamos:

free -h
swapon --show

¿Aumentó la memoria RAM del sistema?

Swap
De RAM a almacenamiento

Utilizamos un programa que:

  1. Reserva y escribe 64 MiB de memoria.
  2. Solicita al kernel desalojar esas páginas con MADV_PAGEOUT.
  3. Vuelve a leerlas.
python3 demo_swap.py

¿Dónde se encuentran las páginas cuando dejan de estar residentes en RAM?

Swap — Observamos el movimiento

En otra terminal:

watch -n 1 'free -h; swapon --show'

Para observar el proceso:

PID=12345  # Sustituir por el PID mostrado
grep -E 'VmRSS|VmSwap' /proc/$PID/status

Y la actividad del sistema:

vmstat 1

¿Qué ocurre cuando el programa vuelve a necesitar las páginas?

Sistemas Operativos

3. Reemplazo de páginas

Si todos los marcos están ocupados, ¿quién debe salir?

El problema de los marcos ocupados

Tenemos tres marcos físicos, ocupados por las páginas:

[1] [2] [3]

El proceso solicita ahora la página 4.

¿Cuál desalojaríamos y por qué?

Tres criterios posibles

FIFO: sale la página que ingresó primero.

LRU: sale la que lleva más tiempo sin usarse.

Reloj (segunda oportunidad): usa un bit de referencia antes de elegir una víctima.

¿Cuál de estas políticas conoce el futuro? (algoritmo OPT)

Ejercicio 2 — FIFO contra LRU

Tres marcos, inicialmente vacíos.

Referencias a páginas:

1 → 2 → 3 → 1 → 4 → 1 → 2 → 5

En parejas:

  1. Simulen FIFO.
  2. Simulen LRU.
  3. Cuenten los fallos de página, incluidos los iniciales.

Ejercicio 2 — Contrastemos resultados

Política Fallos de página
FIFO 7
LRU 6

¿Por qué FIFO puede expulsar una página que se utilizó hace muy poco?

¿LRU ganará siempre, para cualquier secuencia?

¿Qué información necesita cada política?

  • FIFO recuerda cuándo ingresó una página.
  • LRU necesita saber cuándo fue utilizada por última vez.
  • Conocer el uso exacto puede resultar costoso.

El algoritmo óptimo necesitaría conocer las referencias futuras.

¿Cómo aproximamos LRU sin registrar cada acceso?

El algoritmo de Reloj

  • Los marcos se recorren circularmente.
  • Cada página tiene un bit de referencia R.
  • Si R = 1: se pone en 0 y se continúa.
  • Si R = 0: la página es candidata a reemplazo.

La página utilizada recientemente recibe una segunda oportunidad.

Ejercicio 3 — Una vuelta de Reloj

La manecilla apunta a A:

Marco A B C
Bit R 1 0 1

Llega la página D y hay que reemplazar una página.

¿Cuál sale? ¿Qué bits cambian? ¿Dónde queda la manecilla?

Sistemas Operativos

4. Cuando la memoria no alcanza

¿Por qué una computadora puede volverse muy lenta aunque tenga una CPU rápida?

Localidad de referencia

Los programas no utilizan toda su memoria por igual.

Localidad temporal

Tendemos a utilizar repetidamente los mismos datos e instrucciones.

Localidad espacial

Tendemos a acceder a posiciones de memoria cercanas.

Por ejemplo: un bucle que recorre un arreglo.

¿Necesitamos tener todas las páginas de un programa en RAM?

El conjunto de trabajo

Durante su ejecución, un programa utiliza principalmente un grupo de páginas.

A ese grupo de páginas activas lo llamamos conjunto de trabajo.

  • No todas las páginas se necesitan al mismo tiempo.
  • Las páginas activas cambian durante la ejecución.
  • Si podemos mantenerlas en RAM, el programa funciona con menos fallos de página.

¿Qué sucede cuando las páginas que necesitamos no caben en RAM?

Thrashing — Cuando mover páginas se vuelve el problema

Imaginemos que:

  1. Un programa necesita una página que no está en RAM.
  2. El sistema operativo la trae, expulsando otra.
  3. Poco después, el programa necesita la página expulsada.
  4. Esto se repite continuamente.

El sistema pasa demasiado tiempo trayendo y expulsando páginas, en lugar de ejecutar trabajo útil.

A esta situación la llamamos Thrashing.

¿De qué sirve una CPU rápida si pasa gran parte del tiempo esperando?

¿Cómo reconocemos este problema?

Cuando ocurre thrashing podemos observar:

  • El sistema responde con mucha lentitud.
  • Hay numerosos fallos de página costosos.
  • Aumenta la actividad de intercambio con almacenamiento.
  • Disminuye el trabajo útil de los procesos.

En Linux podemos observar:

free -h
vmstat 1 5

Importante: utilizar swap no significa necesariamente que exista thrashing.

¿Tener más memoria virtual significa tener mejor rendimiento?

Webasignatura — Práctico breve

Actividad de autoevaluación: reemplazo de páginas

  • Resolver otra secuencia con FIFO y LRU.
  • Justificar la página expulsada en un paso.
  • Explicar por qué más memoria virtual no significa más RAM residente.

Consigna disponible en Webasignatura. No es necesaria para seguir la clase.

Para cerrar

Hoy vimos cómo el sistema operativo:

  • atiende los fallos de página;
  • materializa páginas bajo demanda;
  • elige qué páginas mantener o reemplazar;
  • administra el rendimiento cuando la RAM es limitada.

Una última pregunta

¿Tener más espacio de direcciones significa tener más memoria física?

Administración de memoria 02/02

By Rodolfo Pilas

Administración de memoria 02/02

  • 116