Qué página echar cuando la memoria se llena
El reemplazo de páginas es la decisión que toma el sistema operativo cuando necesita un marco libre y no queda ninguno. Tiene que echar una página de la memoria para hacer sitio a otra.
Una mala elección provoca muchos fallos de página. Cada uno obliga a leer del disco, que es miles de veces más lento que la memoria.
Hoy simulas dos reglas y cuentas sus fallos.
Al final de esta lección
Nota
Puedo simular el reemplazo de páginas FIFO y LRU y contar los fallos de página.
Palabras clave
| Palabra | Qué significa | Ejemplo |
|---|---|---|
| Fallo de página | se pide una página que no está en memoria | |
| Acierto | se pide una página que ya está en memoria | |
| Cadena de referencias | la lista de páginas que pide un programa, en orden | 1, 2, 3, 1 |
| FIFO | se echa la página que lleva más tiempo en memoria | |
| LRU | se echa la página que hace más tiempo que no se usa |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
Un fallo de página cuesta una lectura
Un programa pide páginas una tras otra. Esa lista es la cadena de referencias. Si la página pedida ya está en un marco, es un acierto y no cuesta casi nada.
Si no está, es un fallo de página. El sistema la trae del disco. Si no hay marcos libres, antes debe echar otra página.
Los contadores de fallos de esta máquina
grep -E '^(pgfault|pgmajfault)' /proc/vmstat | cut -d' ' -f1Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Linux cuenta los fallos leves y los graves
La orden imprime pgfault y pgmajfault. Linux apunta, junto a cada nombre, cuántos fallos van desde que arrancó la máquina. Esas cifras no se muestran aquí porque cambian siempre.
Un fallo leve se resuelve sin tocar el disco. Un fallo grave sí lee del disco, y es el caro.
FIFO echa la página más antigua
En FIFO (first in, first out) se echa la página que lleva más tiempo en memoria, aunque se esté usando. Basta una cola con el orden de llegada.
En LRU (least recently used) se echa la que hace más tiempo que nadie usa. Cada acierto la pone de nuevo como la más reciente. LRU supone que lo usado hace poco se volverá a usar.
Ejemplo: FIFO y LRU con tres marcos
| Pide | FIFO: marcos | FIFO | LRU: marcos | LRU |
|---|---|---|---|---|
| 1 | 1 | fallo | 1 | fallo |
| 2 | 1, 2 | fallo | 1, 2 | fallo |
| 3 | 1, 2, 3 | fallo | 1, 2, 3 | fallo |
| 1 | 1, 2, 3 | acierto | 2, 3, 1 | acierto |
| 4 | 2, 3, 4 | fallo | 3, 1, 4 | fallo |
| 1 | 3, 4, 1 | fallo | 3, 4, 1 | acierto |
| Total | 5 fallos | 4 fallos |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
Por qué LRU ganó esta vez
Al pedir la página 4, FIFO echó la 1 porque entró la primera. Pero la 1 se acababa de usar y se pidió enseguida, así que FIFO falló otra vez.
LRU echó la 2, que nadie había tocado, y conservó la 1. En las columnas de LRU los marcos van del menos reciente al más reciente.
Cuántas páginas distintas hay en la cadena
python3 -c "print(len(set([1, 2, 3, 1, 4, 1])))"Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
El mínimo es un fallo por página
La Run imprime 4: la cadena usa cuatro páginas distintas. Cada una falla al menos la primera vez que se pide, porque nunca ha estado en memoria.
Por eso ninguna regla baja de 4 fallos en este ejemplo. LRU llegó a 4, el mínimo. FIFO tuvo uno de más.
Un error frecuente
Advertencia
Mucha gente cree que con más marcos nunca hay más fallos. En FIFO a veces ocurre al revés, y se llama anomalía de Belady. Con la cadena 1, 2, 3, 4, 1, 2, 5, 1, 2, 3, 4, 5, FIFO falla 9 veces con tres marcos. Con cuatro falla 10. LRU no sufre esa anomalía.