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.
Tabla de Contenidos
Cómo usar este artículo
- Haz el test sin mirar la teoría. Cada pregunta tiene su botón «Comprobar» y, al final, verás tu nota sobre 10.
- En las preguntas múltiples, cada opción mal marcada resta, como en el examen. Si dudas, mejor no marques.
- Los cálculos se hacen con papel y calculadora: escribe los números en las casillas (vale coma o punto).
- 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.
Mientras ejecuta gcc, la CPU pide leer la posición 1500 de su memoria. ¿Qué tipo de dirección es esa 1500?
- Una dirección lógica (o virtual)
- Una dirección física
- Una dirección de marco
- 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.
¿Qué hace la MMU?
- Traduce las direcciones lógicas que genera la CPU a direcciones físicas
- Decide qué proceso entra en la CPU
- Copia a disco los procesos bloqueados
- 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.
¿Cuáles de estos son problemas que tiene que resolver la gestión de memoria en un sistema multitarea?
- 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
- Que el disco duro se llene de archivos temporales
- 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.
¿Cuáles son objetivos de rendimiento de la gestión de memoria (no de protección)?
- 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
- Aprovechar al máximo la memoria secundaria
- 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.
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.
Ordena el ciclo de vida de practica.c hasta que se ejecuta:
- Programa fuente
- Enlazado
- Programa ejecutable
- Módulo objeto
- Ejecución
- Compilación
- Carga en memoria
Solución
Orden correcto:
- Programa fuente
- Compilación
- Módulo objeto
- Enlazado
- Programa ejecutable
- Carga en memoria
- 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.
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.
Sobre los registros base y límite:
- Delimitan la zona de memoria en la que el proceso puede trabajar.
- Si la dirección está fuera de la zona, la petición sale al bus y la memoria la rechaza.
- Un acceso ilegal provoca una excepción.
- 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.
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).
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.
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?
- La imagen de onedrive, porque lleva mucho tiempo bloqueado
- La de gcc, porque es el que más CPU gasta
- El núcleo del SO, que es lo más grande
- 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.
¿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.
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.
¿Qué se sabe del rendimiento de las tres políticas?
- Primer y mejor ajuste rinden parecido, y mejor que peor ajuste
- Peor ajuste es la mejor, porque deja restos grandes
- Mejor ajuste es siempre la más rápida
- 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).
Sobre fragmentación y compactación:
- Puede haber más memoria libre en total de la que pide un proceso y aun así no poder dárselo.
- La compactación funciona igual con reubicación estática que con dinámica.
- Compactar consume tiempo, porque hay que copiar bloques de memoria.
- 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.
¿Qué ventajas tiene la segmentación?
- 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
- Elimina del todo la fragmentación
- 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.
Con segmentación, ¿cómo es una dirección que genera la CPU?
- Un par ⟨segmento, desplazamiento⟩
- Un par ⟨página, desplazamiento⟩
- Un único número lineal
- 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).
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.
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.
¿Qué pasa con la fragmentación en la paginación?
- Desaparece la externa, pero hay interna en la última página de cada proceso
- Desaparece la interna, pero sigue la externa
- Desaparecen las dos
- 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.
¿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.
¿Qué mecanismos protegen el acceso a las páginas?
- 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
- La TLB
- 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.
Si se usan páginas más pequeñas, ¿qué pasa?
- Disminuye la fragmentación interna
- La tabla de páginas tiene más entradas
- Disminuye la fragmentación externa
- La tabla de páginas ocupa menos
- 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.
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).
En cada entrada de la TLB, ¿qué hace de clave y qué de valor?
- Clave: número de página lógica. Valor: número de marco
- Clave: número de marco. Valor: número de página
- Clave: dirección física completa. Valor: el dato
- 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.
Sobre la TLB:
- En un cambio de contexto hay que vaciarla o cargarla con las entradas del proceso que entra.
- En sistemas reales es normal acertar entre el 80 % y el 98 % de las veces.
- Si la TLB está llena, un fallo obliga a vaciarla entera.
- 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.
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.
Ordena lo que pasa en un fallo de TLB con paginación de un nivel:
- Se busca p en la TLB y no está
- Se accede al dato en la RAM
- Se guarda el par (p, marco) en la TLB
- Se forma la dirección física (marco, d)
- Se lee la entrada p de la tabla de páginas en la RAM
- La CPU genera la dirección lógica (p, d)
Solución
Orden correcto:
- La CPU genera la dirección lógica (p, d)
- Se busca p en la TLB y no está
- Se lee la entrada p de la tabla de páginas en la RAM
- Se guarda el par (p, marco) en la TLB
- Se forma la dirección física (marco, d)
- 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.
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.
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.
En una tabla de páginas invertida, ¿qué guarda la entrada número 9?
- Qué proceso (pid) y qué página lógica están en el marco 9
- Qué marco tiene la página 9 del proceso actual
- La base y el límite del segmento 9
- 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.
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ón | Página | Desplazamiento | Marco | Física |
|---|---|---|---|---|
| 0x2B10 | ||||
| 0x0044 | ||||
| 0x1FFF | ||||
| 0x3800 |
Solución
| Dirección | Página | Desplazamiento | Marco | Física |
|---|---|---|---|---|
| 0x2B10 | 2 | 2832 | 11 | 47888 |
| 0x0044 | 0 | 68 | 7 | 28740 |
| 0x1FFF | 1 | 4095 | 3 | 16383 |
| 0x3800 | 3 | 2048 | 14 | 59392 |
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).
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:
| Sistema | TLB (ns) | RAM (ns) | Aciertos | Niveles |
|---|---|---|---|---|
| A | 10 | 100 | 80 % | 1 |
| B | 2 | 50 | 95 % | 1 |
| C | 4 | 80 | 75 % | 1 |
| D | 5 | 60 | 90 % | 2 |
| Sistema | Acierto | Fallo | Efectivo |
|---|---|---|---|
| A | |||
| B | |||
| C | |||
| D |
Solución
| Sistema | Acierto | Fallo | Efectivo |
|---|---|---|---|
| A | 110 | 210 | 130 |
| B | 52 | 102 | 54.5 |
| C | 84 | 164 | 104 |
| D | 65 | 185 | 77 |
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).
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):
| Proceso | Primer | Mejor | Peor |
|---|---|---|---|
| A (240) | |||
| B (500) | |||
| C (140) | |||
| D (370) |
Solución
| Proceso | Primer | Mejor | Peor |
|---|---|---|---|
| A (240) | 600 | 250 | 600 |
| B (500) | 520 | 520 | 520 |
| C (140) | 150 | 150 | 360 |
| D (370) | 0 | 600 | 0 |
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.
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:
| Caso | Dirección | Página | Entrada |
|---|---|---|---|
| 1 | 32 bits | 4 KiB | 4 B |
| 2 | 32 bits | 16 KiB | 4 B |
| 3 | 24 bits | 1 KiB | 2 B |
| 4 | 20 bits | 512 B | 4 B |
| Caso | Bits de página | Entradas | Tabla (KiB) |
|---|---|---|---|
| 1 | |||
| 2 | |||
| 3 | |||
| 4 |
Solución
| Caso | Bits de página | Entradas | Tabla (KiB) |
|---|---|---|---|
| 1 | 20 | 1048576 | 4096 |
| 2 | 18 | 262144 | 1024 |
| 3 | 14 | 16384 | 32 |
| 4 | 11 | 2048 | 8 |
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.
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ón | Límite | Física |
|---|---|---|
| ⟨0, 1200⟩ | 2500 | |
| ⟨1, 900⟩ | 800 | |
| ⟨2, 3999⟩ | 4000 | |
| ⟨3, 1000⟩ | 1000 | |
| ⟨1, 50⟩ | 800 |
Solución
| Dirección | Límite | Física |
|---|---|---|
| ⟨0, 1200⟩ | 2500 | 7200 |
| ⟨1, 900⟩ | 800 | excepción |
| ⟨2, 3999⟩ | 4000 | 18999 |
| ⟨3, 1000⟩ | 1000 | excepción |
| ⟨1, 50⟩ | 800 | 1250 |
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ú.
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
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
¿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
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:
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ómo | Ejemplo |
|---|---|---|
| Física con registro base | base + lógica (si lógica < límite) | 52000 + 730 = 52730 |
| Página y desplazamiento | lógica // tamaño, lógica % tamaño | 6700 → 1 y 2604 (páginas de 4096) |
| Física con paginación | marco · tamaño + desplazamiento | 9 · 4096 + 2604 = 39468 |
| Física con segmentación | base[s] + d (si d < límite[s]) | ⟨1, 600⟩ con base 4000 → 4600 |
| Tiempo de acierto de TLB | TLB + RAM | 5 + 60 = 65 ns |
| Tiempo de fallo de TLB | TLB + RAM · (niveles + 1) | 5 + 60 + 60 = 125 ns |
| Tiempo efectivo | h · acierto + (1 − h) · fallo | 0,9 · 65 + 0,1 · 125 = 71 ns |
| Bits de página | bits de dirección − log2(tamaño de página) | 32 − 12 = 20 |
| Tamaño de la tabla | 2^bits de página × bytes por entrada | 2^20 × 4 B = 4 MiB |
| Accesos con jerarquía | niveles + 1 (sin acierto de TLB) | 4 niveles → 5 |
Plantillas de los cálculos
| Ejercicio | Datos | Resultado |
|---|---|---|
| Traducción (páginas de 4 KiB) | 0x2B10, tabla 2 → 11 | página 2, desplazamiento 2832, física 47888 (0xBB10) |
| Tiempo efectivo | TLB 4, RAM 50, 80 % | 0,8 · 54 + 0,2 · 104 = 64 ns |
| Tiempo efectivo, 2 niveles | TLB 5, RAM 60, 90 % | 0,9 · 65 + 0,1 · 185 = 77 ns |
| Ajustes | huecos 150, 600, 250, 350, 520; A 240, B 500, C 140, D 370 | primer y peor: D no cabe; mejor: todos caben |
| Tamaño de la tabla | 32 bits, 16 KiB, 4 B | 18 bits, 262144 entradas, 1024 KiB |
| Fragmentación interna | 13000 B en páginas de 4 KiB | 4 páginas, 3384 B perdidos |
Comparativa rápida
| Contigua | Segmentación | Paginación | |
|---|---|---|---|
| Trozos | Uno | Variables, lógicos | Fijos |
| Frag. externa | Sí | Menos | No |
| Frag. interna | No (MVT) | No | Sí |
| Tabla | Base y límite | De segmentos | De páginas |
Síntoma / Causa probable
| Síntoma | Causa probable |
|---|---|
| La física no tiene los mismos tres últimos dígitos hex que la lógica | Has cambiado el desplazamiento: solo cambia la página por el marco |
| Te sale un desplazamiento como 2700 con páginas de 4 KiB | Has dividido entre 4000 en vez de entre 4096 |
| El tiempo efectivo te da medio ns menos | No has sumado la TLB en el fallo |
| Hay memoria libre de sobra y el proceso no cabe | Fragmentación externa: ningún hueco es lo bastante grande |
| ⟨s, d⟩ con d igual al límite te da una dirección | El límite es el tamaño: d tiene que ser estrictamente menor |
| Con 3 niveles cuentas 3 accesos | Falta el del dato: son niveles + 1 = 4 |
Antes de entregar, pregúntate
- ¿He usado 1024 (y no 1000) al pasar de KiB a bytes?
- ¿He comparado con el límite antes de sumar la base?
- ¿El fallo de TLB incluye el tiempo de la TLB, el de cada nivel de tabla y el del dato?
- ¿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)


