Políticas del SO: lectura, ubicación y reemplazo
🎯 Al terminar podrás
- Simular FIFO, LRU, OPT y Clock sobre una cadena de referencias y contar los fallos, declarando la convención.
- Aplicar el Clock mejorado (bits u y m) y decir en qué pasada aparece la víctima.
- Mostrar la anomalía de Belady con FIFO y justificar por qué LRU y OPT no la tienen.
- Elegir una política para un escenario y defenderla con su costo de implementación.
Antes necesitas: Page fault y bits P, u y m de la PTE · Localidad
- Simulador predice el estado antes de pulsar el paso siguiente
- Laboratorio sube la escalera: resuelto → completa → solo → variante
- Debate elige una alternativa para el escenario y defiéndela
- Examen cronométrate y no abras la solución hasta terminar
Stallings organiza el software de memoria virtual en seis decisiones de diseño. Esta página cubre las tres primeras; las otras tres están en conjunto residente, limpieza y carga.
| Política | Pregunta | Opciones |
|---|---|---|
| Fetch (lectura) | ¿cuándo traigo una página? | por demanda · prepaging |
| Placement (ubicación) | ¿dónde la pongo? | con paginación da igual; importa en segmentación pura (best/first/next-fit) |
| Reemplazo | ¿a quién expulso? | OPT · LRU · FIFO · Clock (+ page buffering) |
| Conjunto residente | ¿cuántos frames le doy a cada proceso, y de quién expulso? | fija/variable × local/global |
| Limpieza | ¿cuándo escribo al disco las páginas modificadas? | por demanda · precleaning |
| Control de carga | ¿cuántos procesos tengo en memoria? | nivel de multiprogramación, suspender procesos |
Fetch: ¿cuándo traer una página?
Sección titulada «Fetch: ¿cuándo traer una página?»- Paginación por demanda: se trae la página solo cuando se referencia. Al inicio hay muchos fallos y, gracias a la localidad, después se estabiliza.
- Prepaging: se traen más páginas que la pedida, aprovechando que en el disco suelen estar contiguas y que leer varias de una vez es más barato que una por una. Es eficaz si esas páginas se terminan usando; si no, es desperdicio. Se usa, por ejemplo, al arrancar un proceso o al traerlo de vuelta desde swap.
Ojo: prepaging no es lo mismo que swapping (sacar o meter un proceso entero).
Placement: ¿dónde ponerla?
Sección titulada «Placement: ¿dónde ponerla?»Con paginación (y con segmentación paginada) la ubicación es irrelevante: el hardware traduce cualquier frame igual de rápido. Importa con segmentación pura (best-fit, first-fit, next-fit; ver particiones) y en multiprocesadores NUMA, donde conviene poner la página cerca del procesador que la usa.
Reemplazo: ¿a quién expulsar?
Sección titulada «Reemplazo: ¿a quién expulsar?»El objetivo es expulsar la página con menos probabilidad de usarse pronto. Por la localidad, el pasado reciente predice bien el futuro cercano.
Bloqueo de frames (frame locking): algunos frames no pueden ser víctimas:
- el kernel y sus estructuras de control,
- los buffers de E/S que un dispositivo está usando (por DMA),
- otras áreas críticas en tiempo.
Se marcan con un bit de bloqueo en la tabla de frames o en la PTE.
Cómo leerlo: un fallo de página es cualquier referencia a una página que no está en RAM. Si queda un marco libre (típico al principio), se carga ahí y no corre ningún algoritmo. Solo cuando la memoria está llena hay que elegir una página víctima, que puede ser del mismo proceso o de otro (reemplazo local o global). Sacar un proceso entero es otra cosa: swapping.
Los cuatro algoritmos básicos
Sección titulada «Los cuatro algoritmos básicos»| Algoritmo | Expulsa… | Costo | Comentario |
|---|---|---|---|
| OPT (óptimo, Belady) | la página cuya próxima referencia está más lejos en el futuro | imposible de implementar | sirve de referencia para medir a los demás: produce el mínimo de fallos |
| LRU | la página no referenciada hace más tiempo | caro: hay que registrar cada acceso (marca de tiempo o pila) | casi tan bueno como OPT; la mejor aproximación práctica |
| FIFO | la página que lleva más tiempo en memoria | trivial: un buffer circular | malo: expulsa páginas muy usadas solo por ser «viejas»; sufre la anomalía de Belady |
| Clock (segunda oportunidad) | la primera página con bit de uso = 0 que encuentra el puntero | barato: un bit por frame | aproxima LRU |
Cómo funciona Clock (Stallings fig. 8.15):
- Los frames candidatos forman un círculo, con un puntero y un bit de uso u por frame.
- Al cargar una página o al referenciarla, u = 1.
- En un fallo, el puntero avanza:
- si encuentra u = 1, lo pone en 0 (la página «gasta su segunda oportunidad») y sigue;
- si encuentra u = 0, reemplaza esa página, pone su u = 1 y deja el puntero en el siguiente frame.
- Si todos tenían u = 1, el puntero da la vuelta completa, apaga todos los bits y reemplaza la página donde empezó. En ese caso Clock degenera en FIFO.
Cómo leerlo: a la izquierda, el estado cuando llega la página 4 y no está. El puntero empieza en la pág. 8 y avanza en sentido horario: a las que tienen u = 1 les apaga el bit y sigue; en la primera con u = 0 (la pág. 2) se detiene y la reemplaza. A la derecha, el resultado: en amarillo, los bits que cambiaron; en verde, la página nueva. Ejemplo propio.
Acierto contra fallo: quién sube y quién baja el bit. Es la duda más común con Clock:
- Acierto (la página ya está en RAM): el hardware pone su u en 1. Si ya era 1, queda en 1. El puntero no se mueve y ningún otro bit cambia.
- Fallo (la página no está): recién ahí se mueve el puntero. Baja a 0 solo los bits de las páginas por las que pasa, hasta encontrar la víctima. Las que quedan más adelante conservan su u.
El bit de uso es una segunda oportunidad: un acierto se la devuelve a la página; el paso del puntero en un fallo se la quita.
Cómo leerlo: los dos lados parten del mismo estado. A la izquierda llega B, que ya está: solo su bit pasa a 1 y el puntero sigue apuntando a C. A la derecha llega X, que no está: el puntero apaga el bit de C, encuentra a D con u = 0 y la reemplaza.
Reemplazo de páginas paso a paso
Escribe la cadena de referencias, elige cuántos frames hay y el algoritmo. «F» marca un fallo de página; en Clock, el * es el bit de uso y ▸ es la posición del puntero.
| ref | 2 | 3 | 2 | 1 | 5 | 2 | 4 | 5 | 3 | 2 | 5 | 2 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| f0 | 2 | 2 | 2 | 2 | 2 | 2 | 2 | 2 | 3 | 3 | 3 | 3 |
| f1 | · | 3 | 3 | 3 | 5 | 5 | 5 | 5 | 5 | 5 | 5 | 5 |
| f2 | · | · | · | 1 | 1 | 1 | 4 | 4 | 4 | 2 | 2 | 2 |
| fallo | F | F | F | F | F | F | F |
Fallos según el número de frames
| algoritmo | 1 fr | 2 fr | 3 fr | 4 fr | 5 fr | 6 fr | 7 fr |
|---|---|---|---|---|---|---|---|
| FIFO | 12 | 10 | 9 | 6 | 5 | 5 | 5 |
| OPT | 12 | 7 | 6 | 5 | 5 | 5 | 5 |
| LRU | 12 | 10 | 7 | 6 | 5 | 5 | 5 |
| Clock | 12 | 10 | 8 | 6 | 5 | 5 | 5 |
Peldaño 1 · Resueltolee cada paso y su porqué
Resuelto: la cadena de Stallings (fig. 8.14)
Cadena 2 3 2 1 5 2 4 5 3 2 5 2 con 3 marcos. En el simulador de arriba elige el preset «Stallings» y avanza paso a paso. Antes de cada paso, di qué página sale y por qué. El resultado está justo debajo: OPT 6, LRU 7, Clock 8 y FIFO 9, contando los fallos de arranque.
Peldaño 2 · Complétalofaltan pasos clave: llénalos tú
Complétalo: LRU con 3 marcos y la cadena 1 2 3 2 4 1 3 2 4 1
Las cinco primeras columnas ya están resueltas. Completa las otras cinco: escribe qué hay en los marcos y marca cada fallo con ✗.
| Ref. | 1 | 2 | 3 | 2 | 4 | 1 | 3 | 2 | 4 | 1 |
|---|---|---|---|---|---|---|---|---|---|---|
| Marcos | 1 | 1 2 | 1 2 3 | 1 2 3 | 4 2 3 | ? | ? | ? | ? | ? |
| ¿Fallo? | ✗ | ✗ | ✗ | ✓ | ✗ (sale 1) | ? | ? | ? | ? | ? |
Comparar con la solución (9 fallos)
| Ref. | 1 | 3 | 2 | 4 | 1 |
|---|---|---|---|---|---|
| Marcos | 4 2 1 | 4 3 1 | 2 3 1 | 2 3 4 | 2 1 4 |
| Sale | 3 | 2 | 4 | 1 | 3 |
En cada fallo sale la página cuyo último uso es el más antiguo. Por ejemplo, cuando llega el 1 (posición 6), el último uso del 4 fue en la posición 5, el del 2 en la 4 y el del 3 en la 3. Por eso sale el 3. En total son 9 fallos: solo acierta el segundo 2.
Peldaño 3 · Solosin ayuda; luego compara
Solo: la misma cadena con FIFO, OPT y Clock
Usa la misma cadena y 3 marcos. Cuenta los fallos de FIFO, de OPT y de Clock. En Clock, u = 1 al cargar una página y, después de reemplazar, el puntero pasa al marco siguiente.
Comparar (verificado con un script)
- FIFO = 6:
1 · 12 · 123 · ✓ · 423 · 413 · ✓ · 412 · ✓ · ✓. - OPT = 5: cuando llega el 4 sale el 2, porque de 1, 2 y 3 es el que se vuelve a usar más tarde (posición 8). Cuando llega el 2 sale el 3, que ya no se vuelve a usar.
- Clock = 6: coincide paso a paso con FIFO. En cada fallo todos los u están en 1, así que el puntero da la vuelta completa y reemplaza en orden de llegada.
Peldaño 4 · Variantecambia una condición: ¿sigue valiendo lo anterior?
Variante: ¿LRU siempre le gana a FIFO?
Con esta misma cadena, LRU da 9 fallos y FIFO 6. Antes de abrir la respuesta, explica cómo puede pasar.
Por qué aquí pierde LRU
La cadena repite un ciclo de 4 páginas (… 4 1 3 2 4 1), pero solo hay 3 marcos. En ese caso LRU siempre saca justo la página que se va a pedir a continuación: si el ciclo es más largo que la memoria, la que lleva más tiempo sin usarse es precisamente la próxima. Es el peor caso de LRU, el mismo de la segunda pasada sobre un arreglo grande.
Lección: que «LRU es casi tan bueno como OPT» es cierto en promedio y con buena localidad, no para cualquier cadena. En el examen, simula siempre y no supongas de antemano qué algoritmo saldrá mejor.
Ejemplo de Stallings (fig. 8.14). Cadena 2 3 2 1 5 2 4 5 3 2 5 2 con 3 frames. Contando también los 3 fallos iniciales: OPT 6, LRU 7, Clock 8, FIFO 9. Stallings cuenta solo los fallos después de llenar los frames: 3, 4, 5 y 6. Revisa en el examen cuál de las dos convenciones piden.
Clock con bit de modificado (Clock mejorado)
Sección titulada «Clock con bit de modificado (Clock mejorado)»Si además se considera el bit M, expulsar una página sin modificar es más barato, porque no hay que escribirla al disco. Hay cuatro clases:
| Clase | u | m | Significado | Preferencia |
|---|---|---|---|---|
| 1 | 0 | 0 | ni usada recientemente ni modificada | mejor víctima |
| 2 | 0 | 1 | no usada recientemente, pero modificada (hay que escribirla) | 2.ª |
| 3 | 1 | 0 | usada recientemente, sin modificar | 3.ª |
| 4 | 1 | 1 | usada y modificada | última |
Algoritmo (Stallings fig. 8.17):
- Recorre buscando (u = 0, m = 0) sin tocar los bits. Si encuentra uno, es la víctima.
- Si no, recorre buscando (u = 0, m = 1) y va poniendo u = 0 en los que pasa.
- Si tampoco encuentra, todos los u quedaron en 0: repite el paso 1 y, si hace falta, el 2. Seguro encuentra una víctima.
Cómo leerlo: las filas son el bit u y las columnas, el bit m. La mejor víctima está arriba a la izquierda: nadie la usó y no hay que escribirla. El paso 1 solo mira esa casilla; el paso 2, la de al lado. La flecha muestra por qué el algoritmo siempre termina: el paso 2 va apagando u, así que las páginas de abajo «suben» a la fila de arriba.
Lo usaba el Macintosh.
La anomalía de Belady
Sección titulada «La anomalía de Belady»Lo esperable es que con más frames haya menos o los mismos fallos. FIFO puede violar esto. Con la cadena del ejercicio P2 (A B C D A B E A B C D E):
| Frames | FIFO | Clock | LRU | OPT |
|---|---|---|---|---|
| 3 | 9 | 9 | 10 | 7 |
| 4 | 10 ⚠ | 10 ⚠ | 8 | 6 |
Cómo leerlo: en cada algoritmo, la barra izquierda es con 3 marcos y la derecha con 4. Lo normal es que la derecha sea más baja (LRU, OPT). En FIFO y Clock la derecha es más alta: más memoria, más fallos. Esa es la anomalía.
LRU y OPT son algoritmos de pila: el conjunto de páginas con n frames está siempre contenido en el de n + 1 frames, así que agregar memoria nunca empeora. FIFO y Clock no cumplen esa propiedad. En el simulador de arriba, elige «Belady (P2)» y mira la tabla de fallos por número de frames.
¿Por qué LRU no puede tener la anomalía? (argumento corto)
Con LRU, las páginas en memoria con n frames son siempre las n referenciadas más recientemente. Con n + 1 frames son las n + 1 más recientes, que incluyen a las n anteriores. Si una referencia acierta con n frames (está entre las n más recientes), también acierta con n + 1. Por lo tanto, los fallos con n + 1 frames ≤ fallos con n. FIFO no tiene esta propiedad de inclusión, porque el orden de llegada depende de los fallos previos, que son distintos para cada número de frames.
Page buffering
Sección titulada «Page buffering»Es una forma de compensar lo malo de FIFO sin pagar lo que cuesta LRU (la usaba VAX/VMS).
- La víctima elegida (por FIFO) no se borra de inmediato. Su PTE se marca como no presente, pero la página queda en RAM en una de dos listas:
- la lista de páginas libres, si no estaba modificada;
- la lista de páginas modificadas, si estaba modificada.
- Si el proceso la vuelve a referenciar pronto, se recupera de la lista sin leer del disco. Es un fallo baratísimo.
- Las páginas modificadas se escriben al disco en grupos, lo que reduce la E/S.
Cómo leerlo: la víctima no se borra: su PTE pasa a P = 0, pero la página sigue en RAM en una de las dos listas. Las modificadas se limpian en lote y pasan a la de libres. Desde ahí, o el proceso la vuelve a pedir y se recupera sin disco (verde), o nadie la pide y su frame se reutiliza. Desde la lista de modificadas también se puede recuperar.
Las listas funcionan como una caché de páginas. Linux hace algo parecido con su page cache y sus listas activa e inactiva (ver UNIX y Linux).
Reemplazo y caché: en un sistema con caché de datos, Stallings menciona políticas de ubicación según la caché (page coloring), que eligen frames para repartir las páginas entre los conjuntos de la caché y reducir los conflictos.
Autoevaluación
0/7 correctas · 0 respondidas📈 ¿Qué tan bien lo dominas?
Elige pensando en lo que hiciste, no en lo que leíste. Para marcar 3 tienes que haber resuelto un ejercicio nuevo sin pistas y haberlo justificado. Si solo lo leíste y sientes que «ya entendí», todavía es un 1.
Fuente ·Stallings 9e §8.2 (Fetch, Placement, Replacement Policy, Page Buffering) · sem_9/11-OSL-Ejercicios_Page_Replacement.pdf (P1, P2) · Simulador propio verificado contra un script independiente