Gestión de memoria — ejercicios tipo examen con direcciones que traducir, una TLB que acierta y huecos que no alcanzan (y el medio nanosegundo que perdí por no sumar la TLB)

En un examen de prueba me pusieron el cálculo más famoso del tema: TLB de 5 ns, RAM de 60 ns y un 90 % de aciertos. Escribí 0,9 · 65 + 0,1 · 120 = 70,5 ns y pasé a la siguiente tan contento. El profesor lo tachó: en un fallo también se mira la TLB antes de ir a la tabla, así que el fallo cuesta 5 + 60 + 60 = 125 ns, y el resultado es 71 ns. Medio nanosegundo de diferencia y la pregunta entera mal.

Aquí tienes todo el tema de gestión de memoria en formato examen: un test con todos los tipos de pregunta, cinco cálculos con casillas que se corrigen solas y cuatro preguntas de desarrollo con su respuesta modelo. Las preguntas son originales: cubren lo mismo que el examen de IC2, con otros datos y otra redacción. Si antes quieres ver los cálculos resueltos paso a paso, tienes la práctica guiada de gestión de memoria.

Cómo usar este artículo

  1. Haz el test sin mirar la teoría. Cada pregunta tiene su botón «Comprobar» y, al final, verás tu nota sobre 10.
  2. En las preguntas múltiples, cada opción mal marcada resta, como en el examen. Si dudas, mejor no marques.
  3. Los cálculos se hacen con papel y calculadora: escribe los números en las casillas (vale coma o punto).
  4. Lee siempre la explicación, también cuando aciertes: muchas traen el truco para ir más rápido.

Antes de empezar, ten a mano tres cuentas: 4 KiB = 4096 = 2^12, el fallo de TLB es TLB + tabla + dato, y los accesos con jerarquía son niveles + 1. Con eso sale la mitad de los cálculos.

Test: gestión de memoria

31 preguntas de todos los formatos del examen: única, múltiple que penaliza, verdadero o falso, huecos, relacionar, ordenar y respuesta corta.

Pregunta 1Única

Mientras ejecuta gcc, la CPU pide leer la posición 1500 de su memoria. ¿Qué tipo de dirección es esa 1500?

  1. Una dirección lógica (o virtual)
  2. Una dirección física
  3. Una dirección de marco
  4. Una dirección simbólica
Solución

Respuesta: Una dirección lógica (o virtual)

Dirección lógica o virtual: la que genera la CPU. Dirección física: la que recibe el chip de memoria. Entre las dos está la MMU.

Pregunta 2Única

¿Qué hace la MMU?

  1. Traduce las direcciones lógicas que genera la CPU a direcciones físicas
  2. Decide qué proceso entra en la CPU
  3. Copia a disco los procesos bloqueados
  4. Compila las direcciones simbólicas a binario
Solución

Respuesta: Traduce las direcciones lógicas que genera la CPU a direcciones físicas

La MMU (unidad de manejo de memoria) es un dispositivo hardware: si la traducción la hiciera el SO por software en cada acceso, el ordenador sería lentísimo.

Pregunta 3Múltiple · penaliza

¿Cuáles de estos son problemas que tiene que resolver la gestión de memoria en un sistema multitarea?

  1. Que la RAM no tenga sitio para todos los procesos que quieren ejecutarse
  2. Que un proceso lea o escriba en la zona de otro proceso o del SO
  3. Que los procesos solo accedan a las zonas que el SO les ha permitido
  4. Que el disco duro se llene de archivos temporales
  5. Que la CPU ejecute instrucciones demasiado rápido
Solución

Respuesta: Que la RAM no tenga sitio para todos los procesos que quieren ejecutarse · Que un proceso lea o escriba en la zona de otro proceso o del SO · Que los procesos solo accedan a las zonas que el SO les ha permitido

Los dos grandes problemas son la falta de capacidad (no cabe todo) y la protección (cada proceso, en su zona). La tercera opción es la misma idea vista desde el SO.

Pregunta 4Múltiple · penaliza

¿Cuáles son objetivos de rendimiento de la gestión de memoria (no de protección)?

  1. Aprovechar al máximo la memoria principal
  2. Tener varios procesos cargados sin que el sistema se venga abajo
  3. Que un programa pueda ejecutarse sin estar entero en la memoria principal
  4. Aprovechar al máximo la memoria secundaria
  5. Que varios procesos compartan una biblioteca
Solución

Respuesta: Aprovechar al máximo la memoria principal · Tener varios procesos cargados sin que el sistema se venga abajo · Que un programa pueda ejecutarse sin estar entero en la memoria principal

Rendimiento = sacar partido a la RAM. Proteger al SO y a cada proceso, y permitir compartir zonas, es el otro bloque de objetivos: protección y compartición.

Pregunta 5Relacionar

Relaciona cada concepto clave con lo que significa:

Reubicación
Fragmentación
Tiempo de acceso

Definiciones:

  • Huecos libres que quedan entre zonas asignadas y que acaban sin servir
  • Que un programa pueda vivir en cualquier zona de la memoria física
  • Que cada proceso tenga su propia copia del núcleo
  • La gestión de memoria no debe hacer mucho más lento cada acceso
Solución
  • Reubicación → Que un programa pueda vivir en cualquier zona de la memoria física
  • Fragmentación → Huecos libres que quedan entre zonas asignadas y que acaban sin servir
  • Tiempo de acceso → La gestión de memoria no debe hacer mucho más lento cada acceso

Son los tres conceptos clave del tema. La opción sobrante es falsa: el núcleo está una sola vez en la RAM.

Pregunta 6Ordenar

Ordena el ciclo de vida de practica.c hasta que se ejecuta:

  1. Programa fuente
  2. Enlazado
  3. Programa ejecutable
  4. Módulo objeto
  5. Ejecución
  6. Compilación
  7. Carga en memoria
Solución

Orden correcto:

  1. Programa fuente
  2. Compilación
  3. Módulo objeto
  4. Enlazado
  5. Programa ejecutable
  6. Carga en memoria
  7. Ejecución

El compilador produce el objeto, el enlazador lo junta con otros objetos y bibliotecas en un ejecutable, y el cargador lo pone en memoria para que se ejecute.

Pregunta 7Rellenar huecos

Completa:

Para que un programa pueda colocarse en cualquier parte de la RAM, el compilador genera direcciones ____, que no son ____. Si el cargador las convierte al cargar el programa, la reubicación es ____; si las traduce el hardware mientras se ejecuta, es ____.

Palabras:

  • definitivas
  • dinámica
  • simbólicas
  • estática
  • reubicables
  • absolutas
Solución

Para que un programa pueda colocarse en cualquier parte de la RAM, el compilador genera direcciones reubicables, que no son definitivas. Si el cargador las convierte al cargar el programa, la reubicación es estática; si las traduce el hardware mientras se ejecuta, es dinámica.

Con direcciones absolutas el programa solo podría ir a una zona fija: no sería reubicable. La reubicación dinámica es la que hace la MMU en cada acceso.

Pregunta 8Verdadero o falso

Sobre los registros base y límite:

  1. Delimitan la zona de memoria en la que el proceso puede trabajar.
  2. Si la dirección está fuera de la zona, la petición sale al bus y la memoria la rechaza.
  3. Un acceso ilegal provoca una excepción.
  4. La comprobación solo se hace en modo usuario: el núcleo puede tocar toda la memoria.
Solución
  • V — Delimitan la zona de memoria en la que el proceso puede trabajar.
  • F — Si la dirección está fuera de la zona, la petición sale al bus y la memoria la rechaza.
  • V — Un acceso ilegal provoca una excepción.
  • V — La comprobación solo se hace en modo usuario: el núcleo puede tocar toda la memoria.

El acceso indebido no llega al bus: lo corta el circuito de comprobación antes y salta una excepción. En modo núcleo no hay comprobación.

Pregunta 9Respuesta corta

Spotify está cargado con registro base 52000. La CPU emite la dirección lógica 730. ¿Qué dirección física sale de la MMU?

Solución

Respuesta: 52730

Física = base + lógica = 52000 + 730 = 52730 (suponiendo que 730 es menor que el límite).

Pregunta 10Rellenar huecos

Completa sobre las bibliotecas compartidas:

Una biblioteca compartida se carga la primera vez que algún proceso llama a una de sus funciones; por eso se habla de ____. En Windows se llaman ____. Las llamadas pasan por una tabla ____ que gestiona el SO, y aunque la usen diez procesos solo hay ____ en memoria.

Palabras:

  • una copia
  • DLL
  • indirecta
  • diez copias
  • enlace dinámico
  • enlace estático
  • directa
Solución

Una biblioteca compartida se carga la primera vez que algún proceso llama a una de sus funciones; por eso se habla de enlace dinámico. En Windows se llaman DLL. Las llamadas pasan por una tabla indirecta que gestiona el SO, y aunque la usen diez procesos solo hay una copia en memoria.

En Unix y GNU/Linux se llaman shared libraries (.so). Si la memoria está muy llena, el SO puede sacar las que nadie referencia.

Pregunta 11Única

Tienes gcc ejecutándose, spotify sonando y onedrive lleva 20 minutos bloqueado esperando a la red. Si hay que hacer sitio con intercambio (swapping), ¿qué se lleva a disco?

  1. La imagen de onedrive, porque lleva mucho tiempo bloqueado
  2. La de gcc, porque es el que más CPU gasta
  3. El núcleo del SO, que es lo más grande
  4. Ninguna: el swapping solo existe en sistemas sin multiprogramación
Solución

Respuesta: La imagen de onedrive, porque lleva mucho tiempo bloqueado

Swap out = volcar a disco la imagen de un proceso bloqueado; swap in = traerla de vuelta cuando vuelve a hacer falta. Su coste es el tiempo de esas copias.

Pregunta 12Respuesta corta

¿Qué siglas tiene la técnica de memoria contigua con particiones de tamaño fijo, decididas al arrancar el SO?

Solución

Respuesta: MFT

MFT: particiones fijas, rígida pero muy eficiente. Su evolución, MVT, crea particiones de tamaño variable con una lista dinámica de huecos.

Pregunta 13Relacionar

Relaciona cada política de asignación con el hueco que elige (entre los que son suficientemente grandes):

Primer ajuste
Mejor ajuste
Peor ajuste

Definiciones:

  • El primero que encuentra al recorrer la lista
  • El más grande de todos
  • El que está más cerca del núcleo
  • El que deja el resto libre más pequeño
Solución
  • Primer ajuste → El primero que encuentra al recorrer la lista
  • Mejor ajuste → El que deja el resto libre más pequeño
  • Peor ajuste → El más grande de todos

En inglés: first-fit, best-fit y worst-fit. El mejor ajuste tiene un riesgo: va dejando restos diminutos que no sirven.

Pregunta 14Única

¿Qué se sabe del rendimiento de las tres políticas?

  1. Primer y mejor ajuste rinden parecido, y mejor que peor ajuste
  2. Peor ajuste es la mejor, porque deja restos grandes
  3. Mejor ajuste es siempre la más rápida
  4. Las tres dan siempre el mismo resultado
Solución

Respuesta: Primer y mejor ajuste rinden parecido, y mejor que peor ajuste

Los sistemas reales usan algoritmos más elaborados; Linux, por ejemplo, el sistema buddy (de parejas).

Pregunta 15Verdadero o falso

Sobre fragmentación y compactación:

  1. Puede haber más memoria libre en total de la que pide un proceso y aun así no poder dárselo.
  2. La compactación funciona igual con reubicación estática que con dinámica.
  3. Compactar consume tiempo, porque hay que copiar bloques de memoria.
  4. Trocear el proceso (segmentación o paginación) es otra forma de atacar la fragmentación.
Solución
  • V — Puede haber más memoria libre en total de la que pide un proceso y aun así no poder dárselo.
  • F — La compactación funciona igual con reubicación estática que con dinámica.
  • V — Compactar consume tiempo, porque hay que copiar bloques de memoria.
  • V — Trocear el proceso (segmentación o paginación) es otra forma de atacar la fragmentación.

Compactar mueve los procesos de sitio, así que solo es posible si sus direcciones se traducen al ejecutarse: reubicación dinámica.

Pregunta 16Múltiple · penaliza

¿Qué ventajas tiene la segmentación?

  1. Reduce la fragmentación frente a la memoria contigua
  2. Permite compartir un segmento entre procesos, como el código de una DLL
  3. Permite proteger segmentos, por ejemplo marcarlos de solo lectura o de código
  4. Elimina del todo la fragmentación
  5. No necesita ayuda del hardware
Solución

Respuesta: Reduce la fragmentación frente a la memoria contigua · Permite compartir un segmento entre procesos, como el código de una DLL · Permite proteger segmentos, por ejemplo marcarlos de solo lectura o de código

Inconvenientes: el compilador trabaja con direcciones de dos dimensiones, hace falta hardware, cada acceso es más lento y su eficacia depende de cómo se trocee el programa.

Pregunta 17Única

Con segmentación, ¿cómo es una dirección que genera la CPU?

  1. Un par ⟨segmento, desplazamiento⟩
  2. Un par ⟨página, desplazamiento⟩
  3. Un único número lineal
  4. Un par ⟨pid, marco⟩
Solución

Respuesta: Un par ⟨segmento, desplazamiento⟩

El compilador identifica los segmentos, el cargador coloca cada uno en una zona y la MMU traduce con la tabla de segmentos (una pareja base y límite por segmento).

Pregunta 18Respuesta corta

En paginación, ¿cómo se llaman los trozos de la memoria física, del mismo tamaño que las páginas?

Solución

Respuesta: Marcos

Página = trozo de la memoria lógica; marco = trozo de la memoria física. Al tener el mismo tamaño, cualquier marco libre sirve para cualquier página.

Pregunta 19Rellenar huecos

Completa:

Traducir en paginación es averiguar qué ____ guarda cada página del proceso. Lo hace la ____ consultando la ____ del proceso, que está en la memoria ____. Por eso, sin ayuda, cada acceso a memoria cuesta ____ accesos a la RAM.

Palabras:

  • tres
  • dos
  • principal
  • secundaria
  • tabla de páginas
  • MMU
  • segmento
  • marco
Solución

Traducir en paginación es averiguar qué marco guarda cada página del proceso. Lo hace la MMU consultando la tabla de páginas del proceso, que está en la memoria principal. Por eso, sin ayuda, cada acceso a memoria cuesta dos accesos a la RAM.

Un acceso para leer la entrada de la tabla y otro para el dato. La TLB existe precisamente para ahorrarse el primero.

Pregunta 20Única

¿Qué pasa con la fragmentación en la paginación?

  1. Desaparece la externa, pero hay interna en la última página de cada proceso
  2. Desaparece la interna, pero sigue la externa
  3. Desaparecen las dos
  4. Siguen las dos igual que en memoria contigua
Solución

Respuesta: Desaparece la externa, pero hay interna en la última página de cada proceso

Un proceso de 13000 bytes con páginas de 4 KiB ocupa 4 páginas (16384 bytes): 3384 bytes asignados que no usa nadie. Eso es fragmentación interna.

Pregunta 21Respuesta corta

¿Qué significan las siglas RBTP?

Solución

Respuesta: Registro base de la tabla de páginas

El RBTP apunta a la tabla de páginas en la RAM. Su compañero, el RLTP (registro de longitud), dice cuántas entradas tiene y sirve para detectar páginas fuera de rango.

Pregunta 22Múltiple · penaliza

¿Qué mecanismos protegen el acceso a las páginas?

  1. Bits de lectura, escritura y ejecución en cada entrada
  2. El bit de validez
  3. El registro de longitud de la tabla de páginas (RLTP)
  4. La tabla de páginas invertida, en la que solo están las páginas válidas
  5. La TLB
  6. El bit de modificado
Solución

Respuesta: Bits de lectura, escritura y ejecución en cada entrada · El bit de validez · El registro de longitud de la tabla de páginas (RLTP) · La tabla de páginas invertida, en la que solo están las páginas válidas

Con bits de protección se puede tener, por ejemplo, el código de solo lectura y ejecución, y los datos de lectura y escritura.

Pregunta 23Múltiple · penaliza

Si se usan páginas más pequeñas, ¿qué pasa?

  1. Disminuye la fragmentación interna
  2. La tabla de páginas tiene más entradas
  3. Disminuye la fragmentación externa
  4. La tabla de páginas ocupa menos
  5. Aumenta la tasa de aciertos de la TLB
Solución

Respuesta: Disminuye la fragmentación interna · La tabla de páginas tiene más entradas

Página pequeña: menos desperdicio en la última página, pero tabla más grande. Página grande: lo contrario.

Pregunta 24Rellenar huecos

Completa la definición de la TLB:

La TLB es una pequeña ____ ____ dentro del procesador que guarda algunas entradas de la tabla de páginas. Se consulta casi tan rápido como los ____ de la CPU y sirve para traducir direcciones ____ a ____ sin leer la tabla de páginas.

Palabras:

  • lógicas
  • asociativa
  • simbólicas
  • físicas
  • registros
  • secundaria
  • directa
  • caché
Solución

La TLB es una pequeña caché asociativa dentro del procesador que guarda algunas entradas de la tabla de páginas. Se consulta casi tan rápido como los registros de la CPU y sirve para traducir direcciones lógicas a físicas sin leer la tabla de páginas.

Asociativa = busca la página en todas sus entradas a la vez. Por eso es tan rápida y por eso es pequeña (de 4 a 64 entradas en procesadores reales).

Pregunta 25Única

En cada entrada de la TLB, ¿qué hace de clave y qué de valor?

  1. Clave: número de página lógica. Valor: número de marco
  2. Clave: número de marco. Valor: número de página
  3. Clave: dirección física completa. Valor: el dato
  4. Clave: pid. Valor: tabla de páginas del proceso
Solución

Respuesta: Clave: número de página lógica. Valor: número de marco

Acierto de TLB: la página lógica está entre las claves y sale su marco. Fallo de TLB: no está; se lee la tabla de páginas y se guarda el par en la TLB.

Pregunta 26Verdadero o falso

Sobre la TLB:

  1. En un cambio de contexto hay que vaciarla o cargarla con las entradas del proceso que entra.
  2. En sistemas reales es normal acertar entre el 80 % y el 98 % de las veces.
  3. Si la TLB está llena, un fallo obliga a vaciarla entera.
  4. Con un acierto de TLB no hace falta acceder a la RAM.
Solución
  • V — En un cambio de contexto hay que vaciarla o cargarla con las entradas del proceso que entra.
  • V — En sistemas reales es normal acertar entre el 80 % y el 98 % de las veces.
  • F — Si la TLB está llena, un fallo obliga a vaciarla entera.
  • F — Con un acierto de TLB no hace falta acceder a la RAM.

Si está llena se reemplaza una entrada (la más vieja, la menos usada, una al azar…). Y con acierto se ahorra el acceso a la tabla, pero el dato sigue estando en la RAM: un acceso.

Pregunta 27Respuesta corta

Una TLB responde en 4 ns, la RAM en 50 ns y se acierta el 80 % de las veces (tabla de un nivel). ¿Cuál es el tiempo efectivo medio de acceso, en ns?

Solución

Respuesta: 64

Acierto: 4 + 50 = 54 ns. Fallo: 4 + 50 + 50 = 104 ns. Efectivo: 0,8·54 + 0,2·104 = 43,2 + 20,8 = 64 ns.

Pregunta 28Ordenar

Ordena lo que pasa en un fallo de TLB con paginación de un nivel:

  1. Se busca p en la TLB y no está
  2. Se accede al dato en la RAM
  3. Se guarda el par (p, marco) en la TLB
  4. Se forma la dirección física (marco, d)
  5. Se lee la entrada p de la tabla de páginas en la RAM
  6. La CPU genera la dirección lógica (p, d)
Solución

Orden correcto:

  1. La CPU genera la dirección lógica (p, d)
  2. Se busca p en la TLB y no está
  3. Se lee la entrada p de la tabla de páginas en la RAM
  4. Se guarda el par (p, marco) en la TLB
  5. Se forma la dirección física (marco, d)
  6. Se accede al dato en la RAM

Dos accesos a la RAM: el de la tabla y el del dato. La próxima vez que se use esa página, si sigue en la TLB, será un acierto.

Pregunta 29Relacionar

Relaciona cada solución al tamaño de la tabla de páginas con su idea:

Paginación jerárquica
Tabla invertida
Tabla hash de páginas

Definiciones:

  • Una sola tabla global con una entrada por cada marco de la RAM
  • Una tabla por segmento con base y límite
  • La propia tabla de páginas se divide en páginas, en varios niveles
  • La entrada se localiza con una función hash del número de página
Solución
  • Paginación jerárquica → La propia tabla de páginas se divide en páginas, en varios niveles
  • Tabla invertida → Una sola tabla global con una entrada por cada marco de la RAM
  • Tabla hash de páginas → La entrada se localiza con una función hash del número de página

La solución «fácil» sería agrandar la página, pero aumenta la fragmentación interna.

Pregunta 30Respuesta corta

Con paginación jerárquica de 4 niveles, ¿cuántos accesos a la memoria principal hacen falta para leer un dato si la traducción no está en la TLB?

Solución

Respuesta: 5

Uno por cada nivel de tabla más el del dato: 4 + 1 = 5. Con dos niveles (x86 de 32 bits) son 3; con tres niveles, 4.

Pregunta 31Única

En una tabla de páginas invertida, ¿qué guarda la entrada número 9?

  1. Qué proceso (pid) y qué página lógica están en el marco 9
  2. Qué marco tiene la página 9 del proceso actual
  3. La base y el límite del segmento 9
  4. Las 9 páginas más usadas del sistema
Solución

Respuesta: Qué proceso (pid) y qué página lógica están en el marco 9

Hay una entrada por cada marco real. Ahorra mucha memoria, pero buscar el par (pid, página) es lento: se usa una función hash y se confía en la TLB. La han usado PowerPC, UltraSPARC e IA-64.

En las preguntas de objetivos y problemas, marcar las opciones que hablan de la memoria secundaria. La gestión de memoria de este tema es la de la principal, la RAM.

Cálculos paso a paso

Cinco ejercicios del estilo de los del examen. Haz las cuentas en papel antes de escribir: la explicación de cada uno tiene todos los pasos.

Pregunta 1Cálculo

Direcciones lógicas de 16 bits y páginas de 4 KiB. La tabla de páginas de spotify es 0 → 7, 1 → 3, 2 → 11, 3 → 14. Traduce cada dirección (desplazamiento y física, en decimal):

DirecciónPáginaDesplazamientoMarcoFísica
0x2B10
0x0044
0x1FFF
0x3800
Solución
DirecciónPáginaDesplazamientoMarcoFísica
0x2B10228321147888
0x0044068728740
0x1FFF14095316383
0x3800320481459392

Con 4 KiB = 2^12, los 12 bits bajos son el desplazamiento y los 4 altos la página; en hexadecimal, el primer dígito es la página. Por ejemplo, 0x2B10 = 11024 = 2·4096 + 2832: página 2, desplazamiento 2832. La tabla dice marco 11, así que la física es 11·4096 + 2832 = 47888 (0xBB10).

El desplazamiento nunca cambia al traducir: solo se cambia la página por el marco. 0x1FFF es el último byte de la página 1 (desplazamiento 4095).

Pregunta 2Cálculo

Calcula el tiempo de un acierto de TLB, el de un fallo y el tiempo efectivo medio (en ns) de cada sistema. El D tiene paginación de dos niveles:

SistemaTLB (ns)RAM (ns)AciertosNiveles
A1010080 %1
B25095 %1
C48075 %1
D56090 %2
SistemaAciertoFalloEfectivo
A
B
C
D
Solución
SistemaAciertoFalloEfectivo
A110210130
B5210254.5
C84164104
D6518577

Acierto = TLB + RAM (el dato). Fallo = TLB + un acceso por cada nivel de tabla + el dato. Efectivo = h·acierto + (1 − h)·fallo.

A: 0,8·110 + 0,2·210 = 88 + 42 = 130. B: 0,95·52 + 0,05·102 = 49,4 + 5,1 = 54,5. C: 0,75·84 + 0,25·164 = 63 + 41 = 104.

D: con dos niveles, un fallo cuesta 5 + 60 + 60 + 60 = 185 ns, así que 0,9·65 + 0,1·185 = 58,5 + 18,5 = 77 ns: 6 ns más que con un nivel (71).

Pregunta 3Cálculo

Huecos libres, en este orden: 150, 600, 250, 350 y 520 KiB. Llegan A (240), B (500), C (140) y D (370). Para cada política, escribe el tamaño del hueco que elige en ese momento (0 si no cabe):

ProcesoPrimerMejorPeor
A (240)
B (500)
C (140)
D (370)
Solución
ProcesoPrimerMejorPeor
A (240)600250600
B (500)520520520
C (140)150150360
D (370)06000

Primer ajuste: A entra en el primero que cabe (600 → quedan 360), B en 520, C en 150 y D (370) ya no cabe, porque el mayor hueco es de 360: los huecos son 0, 360, 250, 350 y 20.

Mejor ajuste: A elige el más justo, 250 (resto 10); B, 520; C, 150; D, 600 (quedan 230): todos caben, porque el hueco grande seguía entero.

Peor ajuste: A coge el mayor, 600 (quedan 360); B, 520; C, el mayor que queda, 360 (quedan 220); D no cabe: los huecos son 150, 220, 250, 350 y 20.

Fíjate en que el peor ajuste rompe el hueco grande primero y luego no le queda ninguno para D.

Pregunta 4Cálculo

Calcula los bits de página, el número de entradas y lo que ocupa la tabla de páginas de un proceso (en KiB) con una tabla de un nivel:

CasoDirecciónPáginaEntrada
132 bits4 KiB4 B
232 bits16 KiB4 B
324 bits1 KiB2 B
420 bits512 B4 B
CasoBits de páginaEntradasTabla (KiB)
1
2
3
4
Solución
CasoBits de páginaEntradasTabla (KiB)
12010485764096
2182621441024
3141638432
41120488

Bits de desplazamiento = log2 del tamaño de página (4 KiB → 12, 16 KiB → 14, 1 KiB → 10, 512 B → 9). Bits de página = bits de la dirección − bits de desplazamiento. Entradas = 2^bits de página. Tamaño = entradas × bytes por entrada.

Fila 1: 32 − 12 = 20 bits, 2^20 = 1 048 576 entradas × 4 B = 4 MiB = 4096 KiB. Fila 2: cuadruplicar la página (de 4 a 16 KiB) quita 2 bits y divide la tabla entre 4: 1024 KiB. Fila 3: 2^14 × 2 B = 32 KiB. Fila 4: 2^11 × 4 B = 8 KiB.

Pregunta 5Cálculo

Tabla de segmentos de campus: 0 (base 6000, límite 2500), 1 (1200, 800), 2 (15000, 4000) y 3 (9500, 1000). Traduce cada dirección ⟨segmento, desplazamiento⟩. Si el acceso es ilegal, escribe «excepción»:

DirecciónLímiteFísica
⟨0, 1200⟩2500
⟨1, 900⟩800
⟨2, 3999⟩4000
⟨3, 1000⟩1000
⟨1, 50⟩800
Solución
DirecciónLímiteFísica
⟨0, 1200⟩25007200
⟨1, 900⟩800excepción
⟨2, 3999⟩400018999
⟨3, 1000⟩1000excepción
⟨1, 50⟩8001250

Primero se compara el desplazamiento con el límite de su segmento; solo si es menor se suma la base.

⟨0, 1200⟩: 1200 < 2500 → 6000 + 1200 = 7200. ⟨1, 900⟩: 900 ≥ 800 → excepción. ⟨2, 3999⟩: el último byte válido, 15000 + 3999 = 18999. ⟨3, 1000⟩: 1000 no es menor que 1000 → excepción (el límite es el tamaño: los desplazamientos válidos van de 0 a 999). ⟨1, 50⟩: 1200 + 50 = 1250.

Para traducir con páginas de 4 KiB, pasa la dirección a hexadecimal: el primer dígito (de 16 bits) es la página y los tres últimos, el desplazamiento. 0x2B10 → página 2, desplazamiento 0xB10. Si el marco es 11 (0xB), la física es 0xBB10, y en decimal 11 · 4096 + 2832 = 47888.

En segmentación, aceptar el desplazamiento igual al límite. Con límite 1000 los válidos van de 0 a 999: ⟨3, 1000⟩ es una excepción.

Preguntas de desarrollo

Escribe tu respuesta en la caja y después compárala con la respuesta modelo y con la lista de lo que se valora. No tiene nota automática: la nota te la pones tú.

Pregunta 1Desarrollo

Explica la diferencia entre reubicación estática y dinámica. ¿Por qué solo la dinámica permite compactar la memoria?

Solución

Respuesta modelo:

El compilador genera direcciones reubicables, que no son definitivas. La reubicación consiste en convertirlas en direcciones físicas, y la diferencia está en cuándo se hace.

En la reubicación estática la conversión la hace el cargador, una sola vez, al cargar el programa en memoria. A partir de ahí las direcciones del proceso son físicas y fijas: si el proceso se moviera, apuntarían a la zona antigua.

En la reubicación dinámica el proceso conserva sus direcciones lógicas y es el hardware (la MMU) quien las traduce en cada acceso, por ejemplo sumando un registro base: física = base + lógica.

Compactar significa mover procesos para juntar los huecos libres. Con reubicación dinámica basta con copiar el proceso y cambiar su registro base; con reubicación estática habría que corregir todas sus direcciones, cosa que no se puede hacer.

Lo que se valora:

  • Reubicación = convertir direcciones lógicas en físicas
  • Estática: la hace el cargador, una vez, al cargar
  • Dinámica: la hace la MMU en cada acceso (registro base)
  • Compactar mueve procesos: solo funciona si basta con cambiar la base
Pregunta 2Desarrollo

Compara la segmentación y la paginación: cómo se trocea el proceso, cómo es la dirección lógica, qué tabla usa la MMU y qué fragmentación tiene cada una.

Solución

Respuesta modelo:

Las dos son técnicas de memoria no contigua: el proceso se trocea y cada trozo puede ir a una zona distinta de la RAM.

En la segmentación los trozos son lógicos y de tamaño variable (código, datos, pila…). La dirección es ⟨segmento, desplazamiento⟩ y la MMU usa una tabla de segmentos con una base y un límite por segmento: si el desplazamiento es menor que el límite, física = base + desplazamiento; si no, excepción. Reduce la fragmentación externa, pero no la elimina, y facilita compartir y proteger segmentos enteros.

En la paginación los trozos son de tamaño fijo (páginas) y la RAM se divide en marcos del mismo tamaño. La dirección es ⟨página, desplazamiento⟩ y la MMU usa una tabla de páginas que da el marco de cada página: física = marco · tamaño + desplazamiento. No hay fragmentación externa (cualquier marco libre vale), pero sí interna en la última página.

La segmentación respeta cómo ve el programador su programa; la paginación es invisible para él y mucho más fácil de gestionar.

Lo que se valora:

  • Tamaño variable (segmentos) frente a fijo (páginas)
  • ⟨segmento, desplazamiento⟩ y ⟨página, desplazamiento⟩
  • Tabla de segmentos (base y límite) frente a tabla de páginas (marco)
  • Segmentación: atenúa la externa. Paginación: sin externa, con interna
Pregunta 3Desarrollo

¿Qué es la TLB y por qué hace falta? Explica qué pasa en un acierto y en un fallo y calcula el tiempo efectivo con TLB de 5 ns, RAM de 60 ns y un 90 % de aciertos.

Solución

Respuesta modelo:

En los sistemas actuales la tabla de páginas está en la memoria principal, así que cada acceso de un programa costaría dos accesos a la RAM: uno para leer la entrada de la tabla y otro para el dato.

La TLB es una pequeña caché asociativa dentro del procesador que guarda pares ⟨página lógica, marco⟩. Al traducir, se busca la página en todas sus entradas a la vez. Si está (acierto), se obtiene el marco sin leer la tabla y solo se accede a la RAM para el dato. Si no está (fallo), se lee la tabla de páginas, se forma la dirección y se guarda la traducción en la TLB, reemplazando una entrada si está llena.

Acierto: 5 + 60 = 65 ns. Fallo: 5 + 60 + 60 = 125 ns. Tiempo efectivo: 0,9 · 65 + 0,1 · 125 = 58,5 + 12,5 = 71 ns, muy cerca de los 60 ns de un acceso directo.

En un cambio de contexto la TLB se vacía o se carga con las entradas del proceso que entra, porque las traducciones de un proceso no valen para otro.

Lo que se valora:

  • Problema: dos accesos a la RAM por cada acceso
  • TLB: caché asociativa de pares ⟨página, marco⟩
  • Acierto y fallo bien explicados (y actualización de la TLB)
  • Cálculo correcto: 71 ns
Pregunta 4Desarrollo

Con direcciones de 32 bits y páginas de 4 KiB, ¿cuánto puede ocupar la tabla de páginas de un proceso (entradas de 4 bytes)? Explica dos soluciones a ese problema y su inconveniente.

Solución

Respuesta modelo:

4 KiB = 2^12, así que hay 12 bits de desplazamiento y 32 − 12 = 20 bits de página: 2^20 = 1 048 576 entradas. A 4 bytes por entrada, la tabla ocupa 4 MiB por proceso, y con direcciones de 48 o 64 bits sería mucho peor.

Paginación jerárquica: la propia tabla se pagina. En x86 de 32 bits la dirección se parte en 10 + 10 + 12 bits: una tabla exterior apunta a tablas interiores, y solo existen las interiores que el proceso usa. Inconveniente: sin acierto de TLB hacen falta tres accesos a la RAM (niveles + 1), así que la TLB se vuelve aún más necesaria.

Tabla de páginas invertida: una sola tabla para todo el sistema, con una entrada por marco que dice qué proceso (pid) y qué página hay en él. Ahorra muchísima memoria, pero buscar el par ⟨pid, página⟩ es lento; se resuelve con una tabla hash y confiando en la TLB.

La solución fácil, agrandar la página, encoge la tabla pero aumenta la fragmentación interna.

Lo que se valora:

  • Cálculo: 20 bits de página, 2^20 entradas, 4 MiB
  • Paginación jerárquica y su coste en accesos
  • Tabla invertida (o hash) y su coste en búsqueda
  • Mención a agrandar la página y la fragmentación interna

En el examen, en las de desarrollo puntúa sobre todo usar el vocabulario exacto (reubicación dinámica, MMU, tabla de segmentos, marco, acierto y fallo de TLB, fragmentación interna) y acompañarlo de un ejemplo con números.

Todo el tema en un dibujo

Si te sabes contar este dibujo, te sabes el tema. Repásalo antes del examen:

Resumen del Tema 9La MMU traduce y protege; tres técnicas: contigua (base y límite, ajustes, fragmentación externa), segmentación (tabla de segmentos) y paginación (tabla de páginas, TLB, fragmentación interna).Todo el tema en un dibujoCPUdir. lógicaMMUtraduce y protege en cada accesoContigua· base + límite· MFT / MVT· primer/mejor/peor· frag. externa· → compactarSegmentación· ⟨s, d⟩· tabla de segmentos· d < límite[s]· física = base[s] + d· compartir, protegerPaginación· ⟨p, d⟩· tabla de páginas· física = marco·tam + d· TLB: 2 → 1 acceso· frag. internat = h·(T+M) + (1−h)·(T+2M)tabla = 2^bits_pág × entradaPara encoger la tabla: paginación jerárquica (niveles + 1 accesos), tabla invertida o hash.
Si sabes contar este dibujo de memoria, el test del tema no tiene secretos.

Chuletario: gestión de memoria

Lo esencial en 30 segundos

  • La CPU genera direcciones lógicas; la MMU las traduce a físicas en cada acceso, y de paso protege.
  • Reubicación estática: la hace el cargador al cargar. Dinámica: la hace el hardware al ejecutar (permite mover y compactar).
  • Contigua: un bloque por proceso, base y límite, MFT o MVT, ajustes y fragmentación externa.
  • Segmentación: ⟨s, d⟩, tabla de segmentos con base y límite; atenúa la externa.
  • Paginación: ⟨p, d⟩, páginas y marcos iguales, tabla de páginas; sin externa, con interna.
  • TLB: caché asociativa de ⟨página, marco⟩ que evita leer la tabla en la RAM.

Quiero… / Cómo / Resultado

Quiero…CómoEjemplo
Física con registro basebase + lógica (si lógica < límite)52000 + 730 = 52730
Página y desplazamientológica // tamaño, lógica % tamaño6700 → 1 y 2604 (páginas de 4096)
Física con paginaciónmarco · tamaño + desplazamiento9 · 4096 + 2604 = 39468
Física con segmentaciónbase[s] + d (si d < límite[s])⟨1, 600⟩ con base 4000 → 4600
Tiempo de acierto de TLBTLB + RAM5 + 60 = 65 ns
Tiempo de fallo de TLBTLB + RAM · (niveles + 1)5 + 60 + 60 = 125 ns
Tiempo efectivoh · acierto + (1 − h) · fallo0,9 · 65 + 0,1 · 125 = 71 ns
Bits de páginabits de dirección − log2(tamaño de página)32 − 12 = 20
Tamaño de la tabla2^bits de página × bytes por entrada2^20 × 4 B = 4 MiB
Accesos con jerarquíaniveles + 1 (sin acierto de TLB)4 niveles → 5

Plantillas de los cálculos

EjercicioDatosResultado
Traducción (páginas de 4 KiB)0x2B10, tabla 2 → 11página 2, desplazamiento 2832, física 47888 (0xBB10)
Tiempo efectivoTLB 4, RAM 50, 80 %0,8 · 54 + 0,2 · 104 = 64 ns
Tiempo efectivo, 2 nivelesTLB 5, RAM 60, 90 %0,9 · 65 + 0,1 · 185 = 77 ns
Ajusteshuecos 150, 600, 250, 350, 520; A 240, B 500, C 140, D 370primer y peor: D no cabe; mejor: todos caben
Tamaño de la tabla32 bits, 16 KiB, 4 B18 bits, 262144 entradas, 1024 KiB
Fragmentación interna13000 B en páginas de 4 KiB4 páginas, 3384 B perdidos

Comparativa rápida

ContiguaSegmentaciónPaginación
TrozosUnoVariables, lógicosFijos
Frag. externaSíMenosNo
Frag. internaNo (MVT)NoSí
TablaBase y límiteDe segmentosDe páginas

Síntoma / Causa probable

SíntomaCausa probable
La física no tiene los mismos tres últimos dígitos hex que la lógicaHas cambiado el desplazamiento: solo cambia la página por el marco
Te sale un desplazamiento como 2700 con páginas de 4 KiBHas dividido entre 4000 en vez de entre 4096
El tiempo efectivo te da medio ns menosNo has sumado la TLB en el fallo
Hay memoria libre de sobra y el proceso no cabeFragmentación externa: ningún hueco es lo bastante grande
⟨s, d⟩ con d igual al límite te da una direcciónEl límite es el tamaño: d tiene que ser estrictamente menor
Con 3 niveles cuentas 3 accesosFalta el del dato: son niveles + 1 = 4

Antes de entregar, pregúntate

  1. ¿He usado 1024 (y no 1000) al pasar de KiB a bytes?
  2. ¿He comparado con el límite antes de sumar la base?
  3. ¿El fallo de TLB incluye el tiempo de la TLB, el de cada nivel de tabla y el del dato?
  4. ¿Estoy hablando de fragmentación externa o interna, y encaja con la técnica (contigua, segmentación o paginación)?

¿Todo claro? Repasa la teoría de gestión de memoria si algo te ha fallado. En el próximo tema llega la memoria virtual: qué pasa cuando un proceso no cabe entero en la RAM y hay que decidir qué página sale.

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)