Ir al contenido

Políticas del SO: lectura, ubicación y reemplazo

🎯 Al terminar podrás

  1. Simular FIFO, LRU, OPT y Clock sobre una cadena de referencias y contar los fallos, declarando la convención.
  2. Aplicar el Clock mejorado (bits u y m) y decir en qué pasada aparece la víctima.
  3. Mostrar la anomalía de Belady con FIFO y justificar por qué LRU y OPT no la tienen.
  4. 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íticaPreguntaOpciones
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
  • 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).

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.

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.

referencia a X¿X estáen RAM?síaciertono hay fallo; en Clock, u = 1no¿hay marcolibre?sífallo «de arranque»se carga en el libreno (memoria llena)fallo con reemplazoel algoritmo elige víctima;si M = 1, se escribe a discoLas dos cajas de la derecha abajoson fallos de página: los dos se cuentan.FIFO, LRU, Clock y OPT solo deciden en la caja de abajo a la derecha.

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.

AlgoritmoExpulsa…CostoComentario
OPT (óptimo, Belady)la página cuya próxima referencia está más lejos en el futuroimposible de implementarsirve de referencia para medir a los demás: produce el mínimo de fallos
LRUla página no referenciada hace más tiempocaro: hay que registrar cada acceso (marca de tiempo o pila)casi tan bueno como OPT; la mejor aproximación práctica
FIFOla página que lleva más tiempo en memoriatrivial: un buffer circularmalo: 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 punterobarato: un bit por frameaproxima LRU

Cómo funciona Clock (Stallings fig. 8.15):

  1. Los frames candidatos forman un círculo, con un puntero y un bit de uso u por frame.
  2. Al cargar una página o al referenciarla, u = 1.
  3. 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.
  4. 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.
antes: llega la página 4 (fallo)despuéspág. 3u = 0pág. 8u = 1pág. 5u = 1pág. 2u = 0pág. 9u = 1pág. 6u = 0pág. 3u = 0pág. 8u = 0pág. 5u = 0pág. 4u = 1pág. 9u = 1pág. 6u = 0busca víctimapág. 8 y pág. 5 tenían u = 1: gastan su segunda oportunidad (u = 0) y se salvan.pág. 2 tenía u = 0: sale, entra la 4 con u = 1, y el puntero queda en el marco siguiente.

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.

acierto: llega B (ya está)fallo: llega X (no está)pág. Au = 1pág. Bu = 0 → 1pág. Cu = 1pág. Du = 0pág. Au = 1pág. Bu = 0pág. Cu = 1 → 0pág. X (era D)u = 1solo cambia el bit de B: u = 1el puntero se queda en Cnadie baja a 0el puntero sale de C: u = 1 → 0, saltaD tiene u = 0: sale D, entra X con u = 1el puntero queda en el siguiente (A)Mismo estado inicial en los dos lados: A u=1, B u=0, C u=1, D u=0, puntero en C. Ejemplo propio.

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.

ref232152453252
f0222222223333
f1·33355555555
f2···111444222
falloFFFFFFF
Paso 12: 2 ya está en el frame 2: acierto.
Fallos7
Aciertos5
Tasa de fallos58 %

Fallos según el número de frames

algoritmo1 fr2 fr3 fr4 fr5 fr6 fr7 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
Con esta cadena ningún algoritmo empeora al agregar frames.

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.1232413241
Marcos11 21 2 31 2 34 2 3?????
¿Fallo?✗✗✗✓✗ (sale 1)?????
Comparar con la solución (9 fallos)
Ref.13241
Marcos4 2 14 3 12 3 12 3 42 1 4
Sale32413

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:

ClaseumSignificadoPreferencia
100ni usada recientemente ni modificadamejor víctima
201no usada recientemente, pero modificada (hay que escribirla)2.ª
310usada recientemente, sin modificar3.ª
411usada y modificadaúltima

Algoritmo (Stallings fig. 8.17):

  1. Recorre buscando (u = 0, m = 0) sin tocar los bits. Si encuentra uno, es la víctima.
  2. Si no, recorre buscando (u = 0, m = 1) y va poniendo u = 0 en los que pasa.
  3. Si tampoco encuentra, todos los u quedaron en 0: repite el paso 1 y, si hace falta, el 2. Seguro encuentra una víctima.
m = 0 (limpia)m = 1 (sucia)u = 0no usada hace pocou = 1usada hace pococlase 1 · mejor víctimapaso 1: se busca sin tocar bitsclase 2paso 2 (hay que escribirla)clase 3clase 4 · últimau = 0Mientras el paso 2 recorre, pone u = 0 en cada página que pasa: las clases 3 y 4 bajan a 1 y 2 para la vuelta siguiente.

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.

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):

FramesFIFOClockLRUOPT
399107
410 ⚠10 ⚠86
910FIFO⚠ sube910Clock⚠ sube108LRU76OPT3 marcos4 marcosCadena A B C D A B E A B C D E, contando los fallos de arranque (valores de la tabla).

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.

Es una forma de compensar lo malo de FIFO sin pagar lo que cuesta LRU (la usaba VAX/VMS).

  1. 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.
  2. Si el proceso la vuelve a referenciar pronto, se recupera de la lista sin leer del disco. Es un fallo baratísimo.
  3. Las páginas modificadas se escriben al disco en grupos, lo que reduce la E/S.
víctima elegidaP = 0, sigue en RAM¿M = 1?sílista de modificadasnolista de libresdiscoescritura en loteya limpiala vuelven a pedirse recupera sin ir al discofallo baratísimosi no la piden:su frame se reutiliza

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
1. Con paginación, la política de placement…
2. ¿Qué algoritmo produce el mínimo de fallos posible?
3. En Clock, el puntero encuentra un frame con u = 1. ¿Qué hace?
4. ¿Cuál puede presentar la anomalía de Belady?
5. En Clock mejorado, la mejor víctima es…
6. Page buffering mejora a FIFO porque…
7. ¿Qué frames NO pueden ser víctimas?

📈 ¿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