← Gestión de Memoria Bloque 8 · Reemplazo de páginas · Tema 36 de 52

Tema 36

El algoritmo óptimo

El algoritmo óptimo (OPT) es la cota teórica del reemplazo de páginas: mira al futuro y reemplaza la página que se usará más tarde (o nunca). Es imposible de implementar en la práctica (no se puede ver el futuro), pero sirve como referencia para evaluar otros algoritmos. En este tema verás cómo funciona, cómo calcularlo y por qué es importante.

1. El algoritmo óptimo

El algoritmo óptimo (OPT, también llamado MIN o Bélády) reemplaza la página que no se usará por más tiempo en el futuro (o que no se usará nunca). Es la estrategia que minimiza el número de fallos de página.

Algoritmo óptimo (OPT): en cada fallo de página, reemplaza la página cuyo próximo uso está más lejos en el futuro (o que no se usará).

Es imposible de implementar en la práctica porque requiere conocer el futuro (la secuencia completa de referencias). Pero se usa como referencia (cota inferior) para evaluar otros algoritmos.

2. Cómo funciona

Para cada fallo de página:

  1. Identificar las páginas en memoria.
  2. Para cada página, buscar su próximo uso en la secuencia restante.
  3. Reemplazar la página cuyo próximo uso es más lejano (o que no se usará).

Si una página no se usará nunca más, es la mejor candidata (se reemplaza primero).

3. Por qué es óptimo

OPT es óptimo porque reemplaza la página que menos se necesitará en el futuro. Cualquier otro algoritmo que reemplace una página que se usará antes generará al menos el mismo número de fallos. Esto se demuestra por intercambio (exchange argument): si un algoritmo reemplaza una página que se usará antes que otra, se puede intercambiar las decisiones y no aumentar los fallos.

4. Cómo calcularlo

Para cada fallo:

El cálculo requiere conocer toda la secuencia de referencias por adelantado.

5. Ejemplo paso a paso

Cadena: 1, 2, 3, 4, 1, 2, 5, 1, 2, 3, 4, 5. Marcos: 3.

AccesoMemoria (antes)Próximo usoVíctimaMemoria (después)Fallo?
1———1Sí
21——1, 2Sí
31, 2——1, 2, 3Sí
41, 2, 31→pos4, 2→pos5, 3→pos93 (más lejano)1, 2, 4Sí
11, 2, 4——1, 2, 4No
21, 2, 4——1, 2, 4No
51, 2, 41→pos7, 2→pos8, 4→∞4 (nunca)1, 2, 5Sí
11, 2, 5——1, 2, 5No
21, 2, 5——1, 2, 5No
31, 2, 51→∞, 2→∞, 5→∞1 (o cualquiera)3, 2, 5Sí
43, 2, 52→∞, 5→∞, 3→∞2 (o cualquiera)3, 4, 5Sí
53, 4, 5——3, 4, 5No

Total: 7 fallos (el mínimo posible para esta cadena con 3 marcos).

6. Implementación en C

El programa siguiente implementa OPT sobre una cadena de referencias:

optimal.c
#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    int marcos = 3;
    int seq[] = {1, 2, 3, 4, 1, 2, 5, 1, 2, 3, 4, 5};
    int nseq = 12;
    int mem[16]; int n = 0;
    int fallos = 0;

    for (int i = 0; i < nseq; i++) {
        int p = seq[i];
        int found = 0;
        for (int j = 0; j < n; j++)
            if (mem[j] == p) { found = 1; break; }
        if (found) {
            printf("pág %d: HIT\\n", p);
        } else {
            fallos++;
            if (n < marcos) {
                mem[n++] = p;
                printf("pág %d: MISS (marco libre)\\n", p);
            } else {
                /* encontrar la víctima: la que se usa más lejos */
                int victim = 0, farthest = -1;
                for (int j = 0; j < marcos; j++) {
                    int nextUse = 999999;
                    for (int k = i + 1; k < nseq; k++) {
                        if (seq[k] == mem[j]) { nextUse = k; break; }
                    }
                    if (nextUse > farthest) { farthest = nextUse; victim = j; }
                }
                printf("pág %d: MISS (reemplaza %d, próximo uso en %d)\\n", p, mem[victim], farthest);
                mem[victim] = p;
            }
        }
    }
    printf("\\nFallos: %d de %d (%.1f%%)\\n", fallos, nseq, 100.0 * fallos / nseq);
    return 0;
}
terminal · algoritmo óptimo
$ gcc -std=c17 -Wall -Wextra -o optimal optimal.c
$ ./optimal$ ./optimalpág 1: MISS (marco libre)
pág 2: MISS (marco libre)
pág 3: MISS (marco libre)
pág 4: MISS (reemplaza 3, próximo uso en 9)
pág 1: HIT
pág 2: HIT
pág 5: MISS (reemplaza 4, próximo uso en 10)
pág 1: HIT
pág 2: HIT
pág 3: MISS (reemplaza 5, próximo uso en 999999)
pág 4: MISS (reemplaza 2, próximo uso en 999999)
pág 5: HIT

Fallos: 7 de 12 (58,3%)

7. Propiedades

8. Probar con un simulador

Este simulador ejecuta FIFO, LRU y Óptimo sobre la misma cadena y compara los resultados.

Simulador · algoritmo óptimo

AlgoritmoFallosTasa
FIFO
LRU
Óptimo

9. En Linux

Linux no usa OPT (es imposible), pero se usa como referencia en la investigación y el diseño de algoritmos. Los algoritmos reales (reloj, LRU aproximado) se comparan con OPT para medir su eficiencia.

terminal · algoritmos en Linux
$ grep -E 'pgpgin|pgpgout|pswpin|pswpout' /proc/vmstat

10. Resumen

11. Preguntas de repaso

Intenta responder cada una antes de abrir la respuesta.

1. ¿Qué es el algoritmo óptimo (OPT)?

El algoritmo que reemplaza la página cuyo próximo uso es más lejano en el futuro.

2. ¿Por qué OPT es óptimo?

Porque reemplaza la página que menos se necesitará, minimizando los fallos futuros.

3. ¿Se puede implementar OPT en la práctica?

No, porque requiere conocer el futuro (la secuencia completa de referencias).

4. ¿Para qué sirve OPT?

Como referencia (cota inferior) para evaluar otros algoritmos.

5. ¿Sufre OPT la anomalía de Belady?

No: más marcos nunca aumentan los fallos.

6. ¿Qué hace OPT si una página no se usará nunca más?

La reemplaza primero (próximo uso = infinito).

7. ¿Cuántos fallos produce OPT en la cadena clásica con 3 marcos?

7 fallos (el mínimo posible).

8. ¿Qué algoritmo real se acerca más a OPT?

LRU, que usa el pasado como aproximación del futuro.

Para practicar

  1. Calcula a mano el OPT para la cadena 1, 2, 3, 4, 1, 2, 5, 1, 2, 3, 4, 5 con 3 marcos.
  2. Modifica optimal.c para aceptar la cadena y el número de marcos como argumentos.
  3. Compara OPT con FIFO y LRU para 5 cadenas diferentes.
  4. Explica por qué OPT es la cota inferior.
  5. Investiga qué algoritmos se aproximan a OPT en la práctica.
  6. Dibuja el estado de la memoria tras cada acceso del ejemplo.
  7. Explica por qué LRU es una buena aproximación a OPT.