Memoria virtual — ejercicios tipo examen con fallos de página, trazas de FIFO, LRU y óptimo y conjuntos de trabajo (y los tres fallos que no conté en el simulacro)

En el simulacro de IC2 me tocó una traza de LRU con 3 marcos. La hice con cuidado, conté 6 fallos y me fui tan contento. Eran 9. ¿El motivo? Los tres primeros accesos los di por aciertos porque «los marcos estaban vacíos y la página entraba sin echar a nadie». Entrar sin víctima no quita que sea un fallo: la página no estaba en RAM y hubo que traerla del disco. Son los fallos obligatorios, y aquí los vas a contar siempre.

Este artículo es la práctica de la teoría de memoria virtual y reemplazo de páginas. Si vienes del Tema 9, gestión de memoria, aquí cerramos el bloque de memoria: fallo de página, algoritmos de reemplazo, anomalía de Belady, conjunto de trabajo e hiperpaginación, con preguntas en todos los formatos del examen. Antes de lanzarte, en la práctica guiada de memoria virtual tienes las trazas resueltas paso a paso.

Cómo usar este artículo

  1. Haz el cuestionario sin mirar la teoría. Cada pregunta tiene su botón «Comprobar» y una explicación: léela también cuando aciertes, porque a veces explica por qué fallan las otras opciones.
  2. Las trazas, con papel. Dibuja la tabla (una columna por referencia, una fila por marco) antes de rellenar las casillas. Si te equivocas, compara tu tabla con la traza de la explicación.
  3. Las de desarrollo, por escrito. Escribe tu respuesta y después compárala con la respuesta modelo y con la lista «lo que se valora».
  4. Repasa con el chuletario del final antes del examen.

Las preguntas de múltiple respuesta penalizan como en el examen: cada casilla marcada mal resta. Si no estás seguro de una opción, mejor no marcarla.

Para comprobar una traza con otra cadena o con más marcos, el simulador de reemplazo de páginas la hace paso a paso con FIFO, LRU y el óptimo.

Cuestionario tipo test

31 preguntas: única, múltiple, verdadero o falso, huecos, relacionar, ordenar y respuesta corta. Van desde la definición de memoria virtual hasta el PFF, pasando por todos los algoritmos de reemplazo.

Pregunta 1Única

¿Qué permite, sobre todo, la memoria virtual?

  1. Ejecutar un proceso aunque solo una parte de sus páginas esté en la memoria principal
  2. Que cada proceso tenga para él solo toda la RAM del ordenador
  3. Que el programador decida qué partes van a la RAM y cuáles al disco
  4. Acceder al disco igual de rápido que a la RAM
Solución

Respuesta: Ejecutar un proceso aunque solo una parte de sus páginas esté en la memoria principal

Con memoria virtual el espacio lógico del proceso puede ser mayor que la RAM que tiene: el almacenamiento secundario hace de extensión de la memoria principal y el SO mueve páginas entre los dos sin que el programa se entere.

Pregunta 2Verdadero o falso

Sobre la memoria virtual, indica si es verdadero o falso:

  1. Un proceso puede tener unas páginas en la RAM y otras en el disco a la vez.
  2. Para empezar a ejecutarse, un proceso tiene que estar cargado entero en la RAM.
  3. La memoria principal se reparte entre los procesos que están en ejecución.
  4. El SO intenta dar siempre a cada proceso toda la RAM libre que haya.
  5. Es el programador quien marca en el código qué páginas se quedan en el disco.
Solución
  • V — Un proceso puede tener unas páginas en la RAM y otras en el disco a la vez.
  • F — Para empezar a ejecutarse, un proceso tiene que estar cargado entero en la RAM.
  • V — La memoria principal se reparte entre los procesos que están en ejecución.
  • F — El SO intenta dar siempre a cada proceso toda la RAM libre que haya.
  • F — Es el programador quien marca en el código qué páginas se quedan en el disco.

La memoria virtual existe justo para que el proceso no tenga que estar entero en RAM. El SO reparte los marcos entre todos los procesos (no le da toda la RAM a uno) y decide él qué páginas están dentro y cuáles fuera; el programador no se ocupa de eso.

Pregunta 3Única

En la paginación por demanda, ¿cuándo se lee una página del disco?

  1. Cuando el proceso la referencia y no está en RAM (fallo de página)
  2. Al crear el proceso, todas de golpe
  3. Cuando falla la TLB
  4. Cada cierto tiempo, en el orden en que la CPU va a pedirlas
Solución

Respuesta: Cuando el proceso la referencia y no está en RAM (fallo de página)

Por demanda = no se carga una página hasta que hace falta. La primera referencia a cada página produce un fallo de página y es entonces cuando el SO la trae del disco. En la cadena de gcc del artículo, las páginas 0 y 6 no se leen nunca.

Pregunta 4Respuesta corta

¿Qué bit de la entrada de la tabla de páginas indica si la página está en la memoria principal?

Solución

Respuesta: Bit de validez

El bit de validez (v/i, o bit de presencia): con v (1) la página está en un marco; con i (0) está en el disco y acceder a ella provoca un fallo de página.

Pregunta 5Ordenar

Ordena lo que pasa cuando gcc pide una página que no está en RAM y sí hay un marco libre:

  1. Se repite la instrucción que provocó el fallo
  2. El SO toma un marco libre
  3. El SO comprueba que la referencia es válida y localiza la página en el disco
  4. Se lee la página del disco a ese marco
  5. La MMU ve el bit i en la tabla de páginas y lanza un trap
  6. Se actualiza la entrada: número de marco y bit de validez a v
Solución

Orden correcto:

  1. La MMU ve el bit i en la tabla de páginas y lanza un trap
  2. El SO comprueba que la referencia es válida y localiza la página en el disco
  3. El SO toma un marco libre
  4. Se lee la página del disco a ese marco
  5. Se actualiza la entrada: número de marco y bit de validez a v
  6. Se repite la instrucción que provocó el fallo

Primero salta el trap (la MMU no puede traducir), el SO busca la página, la mete en un marco libre, apunta el marco con v = 1 y vuelve a ejecutar la instrucción, que ahora sí encuentra la página. Si no hubiera marco libre, antes de leer habría que elegir víctima.

Pregunta 6Ordenar

Ahora no hay marcos libres. Ordena los pasos para atender el fallo:

  1. Se lee la página nueva en el marco que ha quedado libre
  2. Si la víctima tiene M = 1, se escribe en el disco
  3. El algoritmo de reemplazo elige una página víctima
  4. Se actualiza la entrada de la página nueva y se repite la instrucción
  5. Se marca la víctima como inválida en su tabla de páginas
  6. Se produce el fallo de página
  7. El SO ve que no queda ningún marco libre
Solución

Orden correcto:

  1. Se produce el fallo de página
  2. El SO ve que no queda ningún marco libre
  3. El algoritmo de reemplazo elige una página víctima
  4. Si la víctima tiene M = 1, se escribe en el disco
  5. Se marca la víctima como inválida en su tabla de páginas
  6. Se lee la página nueva en el marco que ha quedado libre
  7. Se actualiza la entrada de la página nueva y se repite la instrucción

La diferencia con el caso anterior está en el medio: elegir víctima, guardarla si está sucia y marcarla como i (para que su dueño falle si vuelve a pedirla). Después se sigue igual: leer, actualizar y repetir.

Pregunta 7Única

El SO va a echar una página de un marco. ¿Qué le dice si tiene que escribirla antes en el disco?

  1. El bit de modificación (M)
  2. El bit de referencia (R)
  3. El bit de validez
  4. Los bits de protección
Solución

Respuesta: El bit de modificación (M)

El hardware pone M = 1 en cuanto se escribe en la página («página sucia»). Una víctima limpia (M = 0) se puede pisar sin más porque el disco ya tiene la misma copia; una sucia cuesta una escritura más.

Pregunta 8Respuesta corta

¿Cómo se llama la técnica en la que el SO, cuando no tiene nada que hacer, escribe en el disco las páginas sucias y les pone M = 0?

Solución

Respuesta: Precleaning

Precleaning (prelimpieza): aprovecha los ratos ociosos para que, cuando haga falta una víctima, sea más probable encontrarla limpia y el fallo cueste un solo acceso a disco.

Pregunta 9Múltiple · penaliza

Marca los que son algoritmos de reemplazo de páginas:

  1. LRU
  2. Segunda oportunidad
  3. NFU
  4. Óptimo (OPT)
  5. Round Robin
  6. SRTF
  7. Mejor ajuste
  8. TLB
Solución

Respuesta: LRU · Segunda oportunidad · NFU · Óptimo (OPT)

Reemplazo de páginas: FIFO, óptimo, LRU y sus aproximaciones (segunda oportunidad o reloj, NRU, NFU, LFU, aging, WSClock). Cuidado con mezclarlos con los de la CPU (FCFS, SJF, SRTF, RR) o con los ajustes del Tema 9.

Pregunta 10Relacionar

Relaciona cada algoritmo con la página que elige como víctima:

FIFO
Óptimo
LRU
LFU

Definiciones:

  • La que tiene el contador de usos más alto
  • La que lleva más tiempo sin usarse
  • La que se usó más recientemente
  • La que tiene el contador de usos más bajo
  • La que más tarde se va a volver a usar
  • La que lleva más tiempo cargada en memoria
Solución
  • FIFO → La que lleva más tiempo cargada en memoria
  • Óptimo → La que más tarde se va a volver a usar
  • LRU → La que lleva más tiempo sin usarse
  • LFU → La que tiene el contador de usos más bajo

FIFO mira la llegada, LRU el último uso, el óptimo el próximo uso y LFU cuántas veces se ha usado (echa a la menos usada, no a la más).

Pregunta 11Única

¿Por qué ningún SO real implementa el algoritmo óptimo?

  1. Necesita saber qué páginas se van a pedir en el futuro
  2. Porque produce más fallos que LRU
  3. Porque sufre la anomalía de Belady
  4. Porque necesita un bit de modificación por página
Solución

Respuesta: Necesita saber qué páginas se van a pedir en el futuro

El óptimo echa la página que más tarde se volverá a referenciar, y eso exige conocer la cadena de referencias futura. Se usa como referencia para medir lo cerca que se queda un algoritmo real.

Pregunta 12Verdadero o falso

Sobre la anomalía de Belady:

  1. Consiste en que, con más marcos, un algoritmo puede dar más fallos de página.
  2. FIFO puede sufrirla.
  3. LRU puede sufrirla si la cadena es suficientemente larga.
  4. El algoritmo óptimo la sufre con 4 marcos o más.
Solución
  • V — Consiste en que, con más marcos, un algoritmo puede dar más fallos de página.
  • V — FIFO puede sufrirla.
  • F — LRU puede sufrirla si la cadena es suficientemente larga.
  • F — El algoritmo óptimo la sufre con 4 marcos o más.

La anomalía aparece en FIFO. LRU y el óptimo son algoritmos de pila: lo que tienen en memoria con n marcos está siempre contenido en lo que tendrían con n + 1, así que un marco más nunca empeora. En el artículo, FIFO pasa de 9 a 10 fallos al pasar de 3 a 4 marcos.

Pregunta 13Única

Para implementar LRU de forma exacta, ¿qué hace falta?

  1. Apuntar en cada acceso cuándo se usó cada página (contador o pila), y eso cuesta mucho
  2. Solo el bit de modificación
  3. Una cola con el orden de llegada
  4. Conocer las referencias futuras
Solución

Respuesta: Apuntar en cada acceso cuándo se usó cada página (contador o pila), y eso cuesta mucho

LRU exacto necesita, en cada acceso, guardar un instante (contador) o mover la página a la cima de una pila. Hacerlo por software sería lentísimo y por hardware es caro: por eso se usan aproximaciones con el bit R.

Pregunta 14Única

En el algoritmo de la segunda oportunidad, la aguja llega a una página con R = 1. ¿Qué pasa?

  1. Se le pone R = 0 y la aguja pasa a la siguiente
  2. Se elige como víctima porque es la más antigua
  3. Se escribe en el disco y se queda en memoria
  4. Se le pone M = 0
Solución

Respuesta: Se le pone R = 0 y la aguja pasa a la siguiente

Es FIFO con una pregunta extra: «¿te han usado desde la última vez?». Si R = 1, se le perdona (R pasa a 0) y se sigue; la víctima es la primera página que encuentra con R = 0.

Pregunta 15Única

En NRU, ¿de qué clase se prefiere sacar la víctima?

  1. R = 0 y M = 0
  2. R = 0 y M = 1
  3. R = 1 y M = 0
  4. R = 1 y M = 1
Solución

Respuesta: R = 0 y M = 0

NRU agrupa las páginas en cuatro clases por (R, M) y elige al azar dentro de la clase no vacía más baja: 0 (0, 0), 1 (0, 1), 2 (1, 0), 3 (1, 1).

Pregunta 16Relacionar

Relaciona cada aproximación de LRU con lo que guarda por página:

NFU
Aging
LFU
Reloj

Definiciones:

  • La hora exacta de cada acceso
  • Un registro que se desplaza y recibe el bit R por la izquierda
  • Solo el bit R y una aguja que recorre los marcos en círculo
  • Un contador que suma el bit R a intervalos regulares
  • Un contador del número de referencias
Solución
  • NFU → Un contador que suma el bit R a intervalos regulares
  • Aging → Un registro que se desplaza y recibe el bit R por la izquierda
  • LFU → Un contador del número de referencias
  • Reloj → Solo el bit R y una aguja que recorre los marcos en círculo

NFU suma R a un contador cada tic (nunca olvida). Aging desplaza el registro a la derecha y mete R por la izquierda, así lo reciente pesa más. LFU cuenta referencias. El reloj solo necesita R. Guardar la hora exacta de cada acceso sería LRU exacto, no una aproximación.

Pregunta 17Única

Con aging y registros de 4 bits, tras un tic las páginas valen A = 0110, B = 1001 y C = 0011. ¿Cuál es la víctima?

  1. C
  2. B
  3. A
  4. Cualquiera de las tres: empatan
Solución

Respuesta: C

El bit de la izquierda es el tic más reciente, así que el registro se lee como un número: A = 6, B = 9, C = 3. Se echa a la de menor valor: C.

Pregunta 18Múltiple · penaliza

¿Qué necesita WSClock para cada página o en total?

  1. El bit de referencia
  2. El instante del último uso (U)
  3. La ventana de tiempo Δ
  4. El número de veces que se ha escrito
  5. Un contador de referencias
  6. El orden de llegada de todas las páginas
Solución

Respuesta: El bit de referencia · El instante del último uso (U) · La ventana de tiempo Δ

WSClock combina el reloj (lista circular y bit R) con el conjunto de trabajo: para cada página guarda cuándo se usó por última vez (U) y la compara con la ventana Δ.

Pregunta 19Respuesta corta

¿Cómo se llama la tendencia de los procesos a concentrar sus accesos en unas pocas zonas de código y datos durante un tiempo?

Solución

Respuesta: Localidad

Localidad (de referencia). Gracias a ella la memoria virtual funciona: en cada momento un proceso solo necesita unas pocas páginas. Ojo, no es «segmentación».

Pregunta 20Rellenar huecos

Completa:

Un proceso pasa por distintas ____ mientras se ejecuta. Si la actual está entera en RAM, casi no tendrá ____. Las páginas de su localidad actual forman su ____.

Palabras:

  • localidades
  • marcos libres
  • conjunto de trabajo
  • fallos de página
  • segmentos
  • aciertos de TLB
Solución

Un proceso pasa por distintas localidades mientras se ejecuta. Si la actual está entera en RAM, casi no tendrá fallos de página. Las páginas de su localidad actual forman su conjunto de trabajo.

El conjunto de trabajo (working set) es la forma de medir la localidad actual: las páginas distintas referenciadas en la última ventana Δ.

Pregunta 21Única

El reloj virtual vale ahora 50, la ventana es Δ = 8 y una página se usó por última vez en U = 41. ¿Está en el conjunto de trabajo?

  1. No: 50 − 41 = 9 y 9 > 8
  2. Sí: 41 < 50
  3. Sí: 50 − 41 = 9 ≤ 8
  4. No se puede saber sin el bit M
Solución

Respuesta: No: 50 − 41 = 9 y 9 > 8

Una página está en el WS si reloj − U ≤ Δ. Aquí 50 − 41 = 9 > 8, así que se ha quedado fuera de la ventana.

Pregunta 22Rellenar huecos

Completa la definición de hiperpaginación:

La hiperpaginación aparece cuando hay ____ encadenados porque no hay suficientes ____ para todos los procesos; el sistema se arrastra porque se pasa el tiempo ____.

Palabras:

  • segmentando
  • procesos
  • marcos
  • paginando
  • aciertos
  • fallos de página
Solución

La hiperpaginación aparece cuando hay fallos de página encadenados porque no hay suficientes marcos para todos los procesos; el sistema se arrastra porque se pasa el tiempo paginando.

En inglés, thrashing. Cada proceso echa páginas que otro (o él mismo) necesita enseguida; la CPU se queda esperando al disco y su uso cae en picado.

Pregunta 23Única

Si se suma el tamaño del conjunto de trabajo de todos los procesos (D) y resulta mayor que el número de marcos disponibles, ¿qué debe hacer el SO?

  1. Suspender algún proceso y repartir sus marcos
  2. Admitir más procesos para aprovechar la CPU
  3. Cambiar FIFO por LRU
  4. Nada: es lo normal
Solución

Respuesta: Suspender algún proceso y repartir sus marcos

Con D > m la hiperpaginación está garantizada. La salida es bajar el grado de multiprogramación (el planificador a medio plazo suspende procesos) hasta que D quepa.

Pregunta 24Única

Con PFF (frecuencia de fallos de página), la tasa de fallos de un proceso baja por debajo del límite inferior. ¿Qué se hace?

  1. Se le quitan marcos
  2. Se le dan más marcos
  3. Se suspende el proceso
  4. Se cambia su algoritmo de reemplazo
Solución

Respuesta: Se le quitan marcos

PFF fija una banda: por encima del límite superior se le dan marcos; por debajo del inferior se le quitan. Si no hay marcos para dar, se suspende algún proceso.

Pregunta 25Múltiple · penaliza

¿Qué rasgos de un programa suelen aumentar los fallos de página?

  1. Estructuras enlazadas (listas, árboles) repartidas por la memoria
  2. Lenguajes interpretados con comprobación de tipos en tiempo de ejecución
  3. Funciones muy grandes
  4. Recorrer un array en el orden en que está guardado
  5. Usar la pila para las variables locales
  6. Lenguajes compilados con tipos estáticos
Solución

Respuesta: Estructuras enlazadas (listas, árboles) repartidas por la memoria · Lenguajes interpretados con comprobación de tipos en tiempo de ejecución · Funciones muy grandes

Lo que rompe la localidad dispara los fallos: saltar entre nodos enlazados, el código extra de un intérprete o funciones enormes que ocupan muchas páginas. Lo contiguo y lo que se recorre en orden ayuda.

Pregunta 26Única

Con la cadena 1, 2, 3, 4, 2, 1, 5 y 3 marcos, ¿cuántos fallos hay como mínimo, use el algoritmo que use?

  1. 5
  2. 3
  3. 7
  4. 4
Solución

Respuesta: 5

Los fallos obligatorios (primera referencia a cada página) no los evita nadie: aquí 1, 2, 3, 4 y 5 son 5 páginas distintas. Ningún algoritmo, ni el óptimo, baja de ahí.

Pregunta 27Única

En una traza con 3 marcos que contienen 4, 8 y 6, llega la página 9. Las próximas referencias son 6, 4, 6, 8. ¿Qué echa el algoritmo óptimo?

  1. 8
  2. 6
  3. 4
  4. 9
Solución

Respuesta: 8

Se mira hacia delante: 6 vuelve en la posición 1, 4 en la 2 y 8 en la 4. La víctima es la que más tarde vuelve: 8.

Pregunta 28Única

Mismos marcos (4, 8, 6). Los últimos usos fueron: 4 en t = 10, 8 en t = 12 y 6 en t = 7. Llega la 9. ¿Qué echa LRU?

  1. 6
  2. 8
  3. 4
  4. Depende de cuándo entró cada una
Solución

Respuesta: 6

LRU busca el último uso más antiguo: 7 < 10 < 12, así que sale la 6.

Pregunta 29Verdadero o falso

Sobre el coste de un fallo de página:

  1. Leer una página del disco es miles de veces más lento que un acceso a RAM.
  2. Con una víctima sucia, atender el fallo cuesta dos operaciones de disco.
  3. Un 1 % de fallos de página apenas se nota en el tiempo efectivo de acceso.
  4. Para que la memoria virtual no se note, la tasa de fallos tiene que ser diminuta.
Solución
  • V — Leer una página del disco es miles de veces más lento que un acceso a RAM.
  • V — Con una víctima sucia, atender el fallo cuesta dos operaciones de disco.
  • F — Un 1 % de fallos de página apenas se nota en el tiempo efectivo de acceso.
  • V — Para que la memoria virtual no se note, la tasa de fallos tiene que ser diminuta.

Con 100 ns por acceso y 8 ms por fallo, un fallo cada 1.000 accesos (0,1 %) ya hace la memoria 81 veces más lenta; un 1 % sería desastroso. Por eso p tiene que ser del orden de uno por millón.

Pregunta 30Respuesta corta

¿Cómo se llama la zona del disco donde el SO guarda las páginas que no caben en la RAM?

Solución

Respuesta: Área de intercambio

El área de intercambio (swap): una partición o un archivo del disco que el SO usa como respaldo de la memoria virtual.

Pregunta 31Única

Un proceso tiene 3 marcos y su conjunto de trabajo, en esta fase, tiene 5 páginas. ¿Qué es lo más probable?

  1. Que falle muchas veces: su localidad no cabe
  2. Que no falle nunca: LRU lo resuelve
  3. Que la anomalía de Belady le dé menos fallos
  4. Que el SO le quite marcos
Solución

Respuesta: Que falle muchas veces: su localidad no cabe

Si |WS| > marcos asignados, el proceso no puede tener su localidad dentro y falla sin parar: es la semilla de la hiperpaginación. Lo razonable sería darle al menos 5 marcos (o suspenderlo).

En las de relacionar, confundir LRU con LFU. LRU mira cuándo se usó por última vez (recently); LFU, cuántas veces se ha usado (frequently).

Trazas y cálculos

Antes de rellenar las tablas, el método que mejor me funciona para no perderme en una traza:

  1. Escribe la cadena en una fila y debajo una fila por marco.
  2. En cada referencia, pregúntate primero: ¿está ya en algún marco? Si está, es acierto: copia la columna anterior (y, en LRU, apunta que se acaba de usar).
  3. Si no está, es fallo. Si queda un marco vacío, va ahí. Si no, aplica la regla del algoritmo: FIFO mira quién entró antes, LRU quién lleva más tiempo sin usarse y el óptimo quién tardará más en volver (mirando hacia delante en la cadena).
  4. Apunta la víctima debajo de la columna. Al final, cuenta las F: tienen que ser al menos tantas como páginas distintas.

En LRU, ayuda escribir al lado de cada marco el instante de su último uso y tacharlo cada vez que se vuelve a usar. En el óptimo, subraya en la cadena la siguiente aparición de cada página que hay en memoria.

Cinco ejercicios: una cadena con los tres algoritmos, una anomalía de Belady, el tiempo efectivo de acceso con fallos de página y dos de conjunto de trabajo.

Pregunta 1Cálculo

onedrive pide sus páginas en este orden: 0, 3, 0, 1, 4, 0, 3, 2, 0, 4, 1, 3, y tiene 3 marcos (vacíos al principio). Para cada algoritmo, calcula los fallos, los aciertos y qué página sale en el primer reemplazo:

AlgoritmoFallosAciertosPrimera víctima
FIFO
LRU
Óptimo
Solución
AlgoritmoFallosAciertosPrimera víctima
FIFO1020
LRU933
Óptimo751

Traza (F = fallo, · = acierto, entre paréntesis la víctima):

FIFO: 0F 3F 0· 1F 4F(0) 0F(3) 3F(1) 2F(4) 0· 4F(0) 1F(3) 3F(2)

LRU: 0F 3F 0· 1F 4F(3) 0· 3F(1) 2F(4) 0· 4F(3) 1F(2) 3F(0)

Óptimo: 0F 3F 0· 1F 4F(1) 0· 3· 2F(3) 0· 4· 1F(0) 3F(1)

El primer reemplazo llega en t = 4 (página 4) con 0, 3 y 1 en memoria. FIFO echa la 0 porque entró la primera, aunque se acaba de usar en t = 2; LRU echa la 3, la que lleva más tiempo sin usarse (t = 1); el óptimo echa la 1, que no vuelve hasta t = 10 (la 0 vuelve en t = 5 y la 3 en t = 6). Los 5 fallos obligatorios (páginas 0, 1, 2, 3 y 4) los tienen los tres.

Pregunta 2Cálculo

Con FIFO y la cadena 2, 6, 1, 4, 2, 6, 0, 2, 6, 1, 4, 0, calcula los fallos con 3 y con 4 marcos y di si aparece la anomalía de Belady (escribe sí o no):

MarcosFallosAciertos
3
4
¿Anomalía de Belady?
Solución
MarcosFallosAciertos
393
4102
¿Anomalía de Belady?sí

Marcas de fallo (F) y acierto (·):

3 marcos: F F F F F F F . . F F . → 9 fallos

4 marcos: F F F F . . F F F F F F → 10 fallos

Con un marco más hay un fallo más: es la anomalía de Belady. Con 4 marcos, FIFO aún tiene dentro 2 y 6 en t = 6 y echa la 2 al llegar la 0 justo antes de que se vuelva a pedir; con 3 marcos ese orden de salidas cambia y acierta la 2 y la 6 en t = 7 y t = 8.

Pregunta 3Cálculo

Un acceso a memoria cuesta 100 ns. Atender un fallo cuesta 5 ms si la víctima está limpia y 10 ms si está sucia. Calcula el tiempo efectivo de acceso (en ns) en cada caso y, en el último, cada cuántos accesos puede haber como mucho un fallo para que el TEA no pase de 110 ns (víctimas limpias):

CasoResultado
p = 0,001, víctimas limpias (ns)
p = 0,001, la mitad sucias (ns)
p = 0,000001, víctimas limpias (ns)
Accesos por fallo, como mínimo
Solución
CasoResultado
p = 0,001, víctimas limpias (ns)5099.9
p = 0,001, la mitad sucias (ns)7599.9
p = 0,000001, víctimas limpias (ns)105
Accesos por fallo, como mínimo499990

TEA = (1 − p) · 100 + p · servicio, con todo en ns (5 ms = 5.000.000 ns).

Caso 1: 0,999 · 100 + 0,001 · 5.000.000 = 99,9 + 5.000 = 5.099,9 ns.

Caso 2: si la mitad de las víctimas están sucias, el servicio medio es (5 + 10) / 2 = 7,5 ms: 99,9 + 7.500 = 7.599,9 ns.

Caso 3: 0,999999 · 100 + 0,000001 · 5.000.000 = 99,9999 + 5 ≈ 105 ns.

Caso 4: 100 + p · (5.000.000 − 100) ≤ 110 → p ≤ 10 / 4.999.900, es decir, como mucho un fallo cada 499.990 accesos.

Pregunta 4Cálculo

El campus virtual referencia 5, 2, 5, 7, 2, 5, 1, 3, 1, 3, 5, 1 (t = 0, 1, 2…). Con una ventana Δ = 3, calcula |WS| en cada instante. Los demás procesos necesitan entre todos 6 marcos y hay 8 libres: ¿hay hiperpaginación en ese instante? (sí/no)

tReferencias en la ventana|WS|¿Hiperpaginación?
25, 2, 5
45, 7, 2
75, 1, 3
113, 5, 1
Solución
tReferencias en la ventana|WS|¿Hiperpaginación?
25, 2, 52no
45, 7, 23sí
75, 1, 33sí
113, 5, 13sí

El conjunto de trabajo son las páginas distintas de las últimas 3 referencias:

WS(t = 2) = {2, 5} → |WS| = 2; D = 2 + 6 = 8 ≤ 8

WS(t = 4) = {2, 5, 7} → |WS| = 3; D = 3 + 6 = 9 > 8

WS(t = 7) = {1, 3, 5} → |WS| = 3; D = 3 + 6 = 9 > 8

WS(t = 11) = {1, 3, 5} → |WS| = 3; D = 3 + 6 = 9 > 8

En t = 2 la página 5 se repite en la ventana (5, 2, 5) y solo cuenta una vez: caben. En los demás instantes D = 9 > 8: no caben todos y hay hiperpaginación.

Pregunta 5Cálculo

El reloj virtual de un proceso vale 60 y la ventana es Δ = 10. Para cada página, calcula reloj − U y di si está en el conjunto de trabajo (sí/no):

PáginaÚltimo uso (U)reloj − U¿En el WS?
A55
B49
C50
D38
E60
Solución
PáginaÚltimo uso (U)reloj − U¿En el WS?
A555sí
B4911no
C5010sí
D3822no
E600sí

Una página está en el WS si reloj − U ≤ Δ:

A: 60 − 55 = 5 ≤ 10 → dentro

B: 60 − 49 = 11 > 10 → fuera

C: 60 − 50 = 10 ≤ 10 → dentro

D: 60 − 38 = 22 > 10 → fuera

E: 60 − 60 = 0 ≤ 10 → dentro

La C está justo en el borde (10 ≤ 10) y sí cuenta. B y D son las candidatas a víctima en WSClock.

En el tiempo efectivo de acceso, mezclar unidades. Pasa los milisegundos a nanosegundos (5 ms = 5.000.000 ns) antes de multiplicar por p; si no, el resultado sale mil o un millón de veces más pequeño.

En las tablas de conjunto de trabajo, tacha en la ventana las páginas repetidas antes de contar. |WS| es el número de páginas distintas.

Preguntas de desarrollo

Cuatro preguntas como las que caen en la parte escrita. Escribe tu respuesta en la caja y después despliega la respuesta modelo.

Pregunta 1Desarrollo

Explica qué es la memoria virtual y en qué consiste la paginación por demanda. ¿Qué gana el sistema con ellas y qué precio paga?

Solución

Respuesta modelo:

La memoria virtual es la técnica que permite ejecutar un proceso aunque no esté entero en la memoria principal: el almacenamiento secundario (el área de intercambio del disco) hace de extensión de la RAM y el SO mueve páginas entre los dos de forma transparente para el programador. Así el espacio lógico de un proceso puede ser mayor que la RAM física y en la memoria caben más procesos a la vez.

La paginación por demanda es la forma habitual de conseguirlo: una página no se lee del disco hasta que el proceso la referencia. La tabla de páginas lleva un bit de validez; si vale i, la MMU lanza un trap (fallo de página) y el SO trae la página en ese momento. Las páginas que nunca se usan no llegan a cargarse.

Lo que se gana: más grado de multiprogramación, arranques más rápidos y programas más grandes que la RAM. El precio: cada fallo de página cuesta milisegundos (miles de veces más que un acceso a RAM), así que la tasa de fallos tiene que ser muy baja, y hace falta un algoritmo de reemplazo cuando no quedan marcos libres.

Lo que se valora:

  • Definición: el proceso no tiene que estar entero en RAM y el disco hace de extensión
  • Transparente para el programador; espacio lógico mayor que la RAM
  • Paginación por demanda: carga perezosa, bit de validez y fallo de página
  • Ventajas: más procesos en memoria, arranque rápido
  • Coste: el fallo de página es carísimo y obliga a reemplazar páginas

Lo fundamental es separar las dos ideas: la memoria virtual es el objetivo (no tener que caber entero) y la paginación por demanda, el mecanismo (cargar al primer uso).

Pregunta 2Desarrollo

Describe los pasos que sigue el SO para atender un fallo de página cuando no hay marcos libres. Explica el papel de los bits de validez, de referencia y de modificación.

Solución

Respuesta modelo:

1) El proceso referencia una página cuya entrada tiene el bit de validez a i; la MMU no puede traducir y lanza un trap al núcleo. 2) El SO comprueba que la dirección es legal y localiza la página en el área de intercambio. 3) Como no hay marcos libres, el algoritmo de reemplazo elige una víctima. 4) Si la víctima tiene el bit de modificación a 1, se escribe en el disco; si está a 0, la copia del disco ya vale y no se escribe. 5) Se marca la víctima como inválida en la tabla de páginas de su dueño. 6) Se lee la página nueva en el marco liberado. 7) Se actualiza su entrada (número de marco y bit de validez a v) y se repite la instrucción que falló.

El bit de validez dice si la página está en RAM (es el que provoca el fallo). El de referencia lo pone a 1 el hardware en cada acceso y lo usan las aproximaciones de LRU (reloj, NRU, aging) para saber qué se ha usado hace poco. El de modificación indica si la página se escribió: una víctima sucia cuesta dos operaciones de disco y una limpia, una, por eso los algoritmos prefieren las limpias y el SO practica el precleaning.

Lo que se valora:

  • Trap por el bit de validez y comprobación de la referencia
  • Elección de víctima por el algoritmo de reemplazo
  • Escritura de la víctima solo si M = 1
  • Invalidar la víctima, leer la nueva, actualizar la tabla y repetir la instrucción
  • Papel de R en las aproximaciones de LRU y de M en el coste

El orden importa: la víctima se guarda (si está sucia) antes de leer la página nueva en su marco, y la instrucción se repite al final, no se continúa.

Pregunta 3Desarrollo

Compara los algoritmos FIFO, óptimo y LRU. ¿Qué es la anomalía de Belady y a cuál afecta? Explica cómo aproxima el algoritmo del reloj a LRU (puedes usar pseudocódigo).

Solución

Respuesta modelo:

FIFO echa la página que lleva más tiempo en memoria: es fácil (una cola) pero no tiene en cuenta el uso, así que puede echar una página muy usada. El óptimo echa la que más tarde se volverá a referenciar: da el mínimo de fallos posible, pero necesita conocer el futuro y solo sirve como referencia. LRU echa la que hace más tiempo que no se usa: se basa en la localidad (el pasado reciente predice el futuro cercano) y se acerca al óptimo, pero implementarlo exacto exige apuntar algo en cada acceso (contadores o una pila).

La anomalía de Belady es que, al dar más marcos a un proceso, el número de fallos aumente. Le pasa a FIFO; LRU y el óptimo son algoritmos de pila (lo que hay con n marcos está contenido en lo que habría con n + 1) y no la sufren.

El reloj (segunda oportunidad) es FIFO más el bit de referencia. Los marcos forman una lista circular y una aguja los recorre:

mientras true: si R[aguja] == 1 entonces R[aguja] = 0 y aguja = siguiente; si no, víctima = aguja, aguja = siguiente y terminar

Una página usada desde la última pasada se libra una vez; si sigue sin usarse, a la siguiente vuelta cae. Así se parece a LRU usando un solo bit por página.

Lo que se valora:

  • Criterio de cada algoritmo (llegada, próximo uso, último uso)
  • El óptimo no es implementable; sirve de referencia
  • LRU exacto es caro: contadores o pila
  • Anomalía de Belady: más marcos, más fallos; afecta a FIFO, no a LRU ni al óptimo
  • Reloj: lista circular, bit R, se pone a 0 y se avanza; víctima con R = 0

Un ejemplo numérico ayuda mucho: con la cadena de gcc del artículo y 3 marcos, FIFO da 11 fallos, LRU 9 y el óptimo 7.

Pregunta 4Desarrollo

Define localidad y conjunto de trabajo. ¿Qué es la hiperpaginación, por qué se produce y cómo puede evitarla el SO?

Solución

Respuesta modelo:

La localidad es la tendencia de un proceso a concentrar, durante un tiempo, sus accesos en unas pocas páginas de código y datos (un bucle, una función, una estructura). El conjunto de trabajo WS(t, Δ) es el conjunto de páginas distintas referenciadas en las últimas Δ referencias: una forma de medir la localidad actual. Con un campo de último uso U, una página está en el WS si reloj − U ≤ Δ.

La hiperpaginación (thrashing) ocurre cuando los procesos no tienen marcos suficientes para su conjunto de trabajo: cada fallo echa una página que se va a necesitar enseguida, los fallos se encadenan, todos esperan al disco y el uso de la CPU se desploma. Suele aparecer al subir demasiado el grado de multiprogramación: si la suma de los |WS| de todos los procesos (D) supera los marcos disponibles, la hiperpaginación es segura.

Para evitarla, el SO puede usar el modelo del conjunto de trabajo (dar a cada proceso al menos |WS| marcos y suspender procesos si D no cabe) o la frecuencia de fallos de página (PFF): si la tasa de fallos de un proceso supera un límite superior se le dan marcos, si baja de un límite inferior se le quitan y, si no hay marcos que dar, se suspende algún proceso.

Lo que se valora:

  • Localidad bien definida
  • Conjunto de trabajo con la ventana Δ (y reloj − U ≤ Δ)
  • Hiperpaginación: fallos encadenados por falta de marcos y CPU ociosa
  • Causa: grado de multiprogramación alto, D > marcos
  • Soluciones: modelo del WS, PFF con sus dos límites, suspender procesos

La clave es la relación: localidad → conjunto de trabajo → si no cabe, hiperpaginación. Con eso, las soluciones salen solas.

Todo el tema en un dibujo

Si solo tienes un minuto antes de entrar al examen, mira esto:

Resumen del temaSeis tarjetas: memoria virtual, fallo de página, algoritmos de reemplazo, aproximaciones de LRU, conjunto de trabajo e hiperpaginación, con sus ideas clave.Memoria virtual en un dibujoMemoria virtualsolo parte del proceso en RAMel resto, en el disco (swap)bit v/i en la tabla de páginasFallo de páginav = 0 → trap al SOmarco libre o víctima (M = 1: escribir)leer, v = 1, repetir instrucciónReemplazo (11 / 9 / 7 fallos)FIFO: la que entró antes (Belady)LRU: la menos usada recientementeOPT: la que más tarde se usaráAproximaciones de LRUreloj / 2ª oportunidad: bit RNRU: clases por R y Maging, NFU y LFU: contadoresConjunto de trabajopáginas de las últimas Δ referenciasen el WS si reloj − U ≤ Δlocalidad: pocas páginas a la vezHiperpaginaciónΣ |WS| > marcos → fallos en cadenala CPU espera al discoPFF o suspender procesos
Las seis ideas del tema, con los fallos de la cadena de gcc: FIFO 11, LRU 9 y óptimo 7.

Las seis tarjetas siguen el orden del tema: la memoria virtual provoca los fallos de página, los fallos obligan a reemplazar páginas, el reemplazo exacto (LRU) se aproxima con el bit R, y todo funciona mientras los conjuntos de trabajo quepan; cuando no caben, aparece la hiperpaginación.

Chuletario: memoria virtual

Lo esencial en 30 segundos

  • Memoria virtual: el proceso no tiene que estar entero en RAM; el resto, en el área de intercambio (swap).
  • Paginación por demanda: una página se lee la primera vez que se pide (bit de validez a i → fallo de página).
  • Fallo de página: trap → comprobar → (víctima, escribirla si M = 1) → leer → v = 1 → repetir la instrucción.
  • FIFO la más antigua · óptimo la que más tarde vuelve · LRU la que lleva más tiempo sin usarse.
  • Belady: con FIFO, más marcos pueden dar más fallos. LRU y el óptimo no la sufren.
  • WS(t, Δ): páginas distintas de las últimas Δ referencias; dentro si reloj − U ≤ Δ.
  • Hiperpaginación: Σ |WS| > marcos → fallos encadenados, CPU parada. Solución: WS, PFF o suspender procesos.

Quiero… / Cómo / Resultado

Quiero…CómoResultado
saber si una página está en RAMbit de validez de su entradav = en RAM; i = en disco (fallo)
saber si hay que escribir la víctimabit MM = 1 → 2 E/S; M = 0 → 1 E/S
el tiempo efectivo de acceso(1 − p) · acceso + p · servicio, todo en ns100 ns, 8 ms, p = 0,001 → 8.099,9 ns
el mínimo de fallos posiblenúmero de páginas distintas de la cadenafallos obligatorios
la víctima de FIFOla que entró antessale aunque se use mucho
la víctima de LRUel último uso más antiguose basa en el pasado reciente
la víctima del óptimola siguiente aparición más lejana (o ninguna)menos fallos que nadie; no implementable
la víctima del relojprimera con R = 0; a las de R = 1 se les pone 0segunda oportunidad
la víctima de NRUclase no vacía más baja: (R, M) = (0,0) < (0,1) < (1,0) < (1,1)al azar dentro de la clase
la víctima de agingregistro desplazado a la derecha con R por la izquierdala de menor valor
saber si una página está en el WSreloj − U ≤ Δsí / no
detectar hiperpaginaciónD = Σ |WS| frente a marcos libresD > marcos → hiperpaginación
ajustar marcos con PFFtasa de fallos frente a los dos límitespor encima: dar marcos; por debajo: quitar

Plantillas de los ejercicios

Traza (FIFO, 3 marcos) — la primera parte de la cadena de onedrive del cuestionario:

ref030140
marco A000044
marco B33330
marco C111
¿fallo?FF·FFF
sale03

Tiempo efectivo: TEA = 0,999 · 100 + 0,001 · 5.000.000 = 99,9 + 5.000 = 5.099,9 ns.

Conjunto de trabajo (Δ = 3): ventana 5, 2, 5 → WS = {2, 5} → |WS| = 2 (el 5 cuenta una vez).

Reloj − U: reloj = 60, Δ = 10, U = 50 → 60 − 50 = 10 ≤ 10 → dentro (el borde cuenta).

Síntoma / Causa probable

SíntomaCausa probable
Me salen menos fallos que páginas distintasno has contado los fallos obligatorios (marcos vacíos)
Mi FIFO y mi LRU dan lo mismo en todoen LRU no estás actualizando el último uso en los aciertos
El TEA me sale de pocos nanosegundos con p = 0,001no pasaste los ms a ns
Con más marcos me salen más fallossi es FIFO, puede ser la anomalía de Belady (no es un error)
Mi |WS| es mayor que Δestás contando páginas repetidas: el WS es un conjunto
En el óptimo dudo entre dos víctimaslas dos no vuelven: empate, vale cualquiera (dilo en el examen)
Todo va lento con la CPU casi paradahiperpaginación: Σ |WS| no cabe en la RAM

Antes de entregar, pregúntate

  1. ¿He contado como fallo cada primera referencia, aunque hubiera marcos vacíos?
  2. ¿He aplicado la regla del algoritmo que pide el enunciado (llegada, último uso o próximo uso) y no otra?
  3. ¿Están todas las unidades en lo mismo (ns o ms) antes de calcular el TEA?
  4. En el conjunto de trabajo, ¿he contado páginas distintas y he usado ≤ (no <) con Δ?

Con esto cierras el Tema 5 de IC2, la memoria. El siguiente, y último de la teoría de IC2, son los archivos: cómo se organizan, cómo se accede a ellos y cómo se reparte el espacio del disco. ¡Nos vemos allí!

Sigue aprendiendoTodos los artículos de Sistemas operativos

¿Te ha servido este artículo? Así puedes apoyar SergioLearns →

¿Listo para el examen?Simulacro del examen de teoría de IC2 — primer parcial, segundo parcial o convocatoria, con tu nota real y el repaso de cada fallo (como si estuvieras en el aula)