Clase de laboratorio del 10/10: paginación explicada y ejercicios en vivo
Lo que dijo sobre el LC3 (anótalo)
Sección titulada «Lo que dijo sobre el LC3 (anótalo)»- Las indicaciones del LC3 están publicadas en la semana 10 de Canvas. Son las que resume el mapa del final.
- «Este tema entra en el laboratorio 3»: lo dijo después de explicar segmentación.
- Binario: «yo nunca les voy a pedir tanto que traduzcan de decimal a binario». En el laboratorio, si aparece, dará las equivalencias. En la parte de teoría sí pueden darte direcciones en binario.
- Si pidiera otra base, como mucho hexadecimal (agrupar los bits de a 4), «porque la memoria normalmente se referencia en hexadecimal».
- Todo en base 2: 1 KB = , nunca , «porque si no vamos a obtener diferentes valores».
- Bits de control: si el enunciado no menciona bits de validez, asume que no hay y que la PTE solo guarda el número de frame. Si los menciona, siempre te dirá cuántos.
- Tamaño de toda la tabla de páginas = número de entradas × tamaño de cada entrada.
- Subirá la guía solo con respuestas (sin desarrollo), y la TA (Sofía) atiende dudas en su asesoría.
- Otros avisos: el proyecto se publica la semana siguiente en Canvas, y hay que armar grupos de 3 en Canvas.
La explicación de paginación (su dibujo)
Sección titulada «La explicación de paginación (su dibujo)» Memoria virtual (VM) Page table Memoria física (PM) ┌────────┐ page 0 ┌───────────────────┐ entry 0 ┌────────┐ frame 0 │ 1 KB │ ───────────────▶│ frame 100 │ bits │ ────────▶ │ 1 KB │ … ├────────┤ page 1 ├───────────────────┤ entry 1 ├────────┤ │ 1 KB │ │ — │ V=0 │ │ 1 KB │ RAM + disco + cachés ├────────┤ … ├───────────────────┤ … ├────────┤ (la VM es mucho más │ │ page 2¹⁰−1 │ │ │ │ grande que la PM) └────────┘ └───────────────────┘ └────────┘ page size = 1 KB #entries = #pages frame size = page sizeLas ideas, con sus palabras:
- La memoria virtual es una abstracción, igual que las syscalls: es mucho más grande que la física. La memoria física, en estos ejercicios, agrupa RAM, disco y cachés en un solo bloque.
- Page = bloque de la memoria virtual. Frame = bloque de la memoria física, también llamado «page física». Ambos tienen el mismo tamaño: frame size = page size.
- Un proceso tiene asignadas páginas. Por ejemplo, 10 KB con páginas de 1 KB son 10 páginas. Pero normalmente escribe muchas menos de las que usa: opera con matrices intermedias y solo guarda el resultado. Por eso la memoria física puede ser más chica.
- La page table tiene tantas entradas (filas) como páginas virtuales. Cada entrada guarda el número de frame de esa página. No tiene por qué ser el mismo número: la página 0 puede estar en el frame 100. Además guarda bits de control, como write o modified. Si modified = 1, al sacar la página hay que escribir el cambio en la memoria física.
- No todas las entradas tienen un frame: la memoria física es limitada. Un bit de control indica si la página está cargada.
- Page fault: el proceso quiere leer una variable o un archivo cuya página no está mapeada. El SO busca el dato en la memoria física (cachés → RAM → disco), lo carga en un frame que el SO elige y llena la entrada de la tabla. Esto es paginación por demanda.
Traducir una dirección (los 4 pasos de la guía):
- La dirección virtual = número de página | offset. Se ubica la página.
- Se busca su entrada en la page table, que da el número de frame (si no está mapeada: page fault).
- Dirección física = número de frame | el mismo offset. El offset no cambia nunca.
- Se lee o escribe en la dirección física.
«Normalmente la cantidad de bits de un frame va a ser menor a la de una page, porque tenemos menos frames que pages.»
Cómo calcular bits (con su ejemplo)
Sección titulada «Cómo calcular bits (con su ejemplo)»La fórmula que repitió toda la clase:
Ejemplo: memoria virtual de 2 GB con páginas de 4 KB.
- , y .
- , así que hay 19 bits de número de página.
- Offset: = 12 bits.
- Comprobación: 19 + 12 = 31 bits = los bits de toda la memoria virtual.
Para qué sirven los exponentes: con 3 bits hay combinaciones (000 a 111). Para numerar cosas hacen falta bits.
Bits vs bytes: si un dato viene en bits (por ejemplo, « bits»), conviértelo a bytes (÷ 8) antes de operar. Todo tiene que estar en la misma unidad.
Una dirección es dónde empieza el dato: «solo nos interesa dónde inicia la dirección, no cuánto se extiende». Cuántos enteros caben en una página es otra pregunta: tamaño de página ÷ tamaño del entero.
Segmentación vs paginación (su explicación)
Sección titulada «Segmentación vs paginación (su explicación)»- Paginación: bloques fijos. Ubicar la página 1000 es directo, 1000 × page size, como un arreglo. Problema: un programa con dos enteros (unos 10 bytes) ocupa igual una página entera de 4 KB.
- Segmentación: a cada programa se le da exactamente lo que necesita: un segmento de 10 bytes, uno de 1 GB… Problema: quedan huecos. Por ejemplo, hay 40 KB + 40 KB libres, pero un programa de 56 KB no entra en ninguno, aunque en total hay 80 KB. Habría que partirlo (40 + 16 KB), y eso complica la gestión. Es la fragmentación externa (particiones).
- La tabla de segmentos guarda, por segmento, la dirección base (dónde empieza) y la longitud, porque cada segmento mide distinto.
- Dirección virtual con segmentación = número de segmento | offset. Dirección física = base + offset, válida solo si offset < longitud.
Ejercicios resueltos en vivo (hoja Virtual Memory)
Sección titulada «Ejercicios resueltos en vivo (hoja Virtual Memory)»P1 · Paginación simple: 2³² B de física, páginas de 2¹⁰ B y 2¹⁶ páginas
Su método: anotar primero los datos. PM = B, page size = B, #pages = (una cantidad, no bits).
- Bits de la dirección virtual: VM = #pages × page size = , así que 26 bits. Un alumno lo resolvió más rápido: 16 bits de página + 10 de offset = 26. Ambos caminos valen.
- Bytes de un frame: frame size = page size = B.
- Bits del número de frame: #frames = PM / frame size = , así que 22 bits. Otra forma: 32 bits físicos − 10 de offset = 22.
- Entradas de la page table: una por página, .
- Bits por PTE con 1 bit de validez: 22 + 1 = 23 bits.
P2 · Segmentación: (0,198) (2,156) (1,530) (3,444) (0,222)
- Notación: «0, 198» = segmento 0, offset 198 (en decimal; «idealmente debería estar en binario»).
- Física = base + offset, si el offset cabe en la longitud:
- 660 + 198 = 858;
- 222 + 156 = 378;
- 1752 + 530: 530 ≥ 422, no cabe;
- 996 + 444 = 1440;
- 660 + 222 = 882.
Pregunta de un alumno: «si ya usé el segmento 0, ¿vuelvo a tener fallo?». No. En este ejercicio nada reemplaza los segmentos. Solo habría que recalcular si dijeran que el segmento 0 fue reemplazado por otro.
P3 · Traducción binaria de 0001010010111010
(1) Paginación con páginas de 256 B; el número de frame es la cuarta parte del número de página.
- 256 = , así que los últimos 8 bits son el offset (
10111010) y los primeros 8 el número de página (00010100= 20). - Frame = 20 / 4 = 5 =
101. Dirección física =101 | 10111010, que vale 5 · 256 + 186 = 1466. - Dejó como tarea averiguar «la forma más rápida de dividir entre 4 en binario»: es desplazar 2 bits a la derecha.
00010100→00000101.
(2) Segmentación con segmentos de máximo 1 kB; base(n) = 22 + 4096·n.
- Como el segmento mide a lo más 1 kB = , se toman los últimos 10 bits como offset:
0010111010= 186. Los bits restantes,000101= 5, son el número de segmento. - Física = 22 + 4096 · 5 + 186 = 20 688.
- Por qué el máximo: «no nos dan otro dato que indique cuánto vale ese segmento». Si dijeran que el segmento mide 256 B, el offset serían los últimos 8 bits. El tamaño de segmento hace el papel del page size para el offset.
P4 · Page table con V/R/M, páginas de 1024 B: 1052, 2221, 5499
Su método:
- Página = piso(dirección / 1024). Por ejemplo, 1052 / 1024 = 1.0… → página 1. La página k cubre las direcciones de k · 1024 a (k + 1) · 1024 − 1: la página 1 va de 1024 a 2047.
- Ir a la entrada de esa página y mirar Valid. Si vale 0, no hay frame: page fault.
- Offset = dirección − página · 1024. Por ejemplo, 1052 − 1024 = 28.
- Física = frame · 1024 + offset, para dejarla en la misma base que la virtual.
Resultados:
- 1052 → página 1, válida, frame 7 → 7 · 1024 + 28 = 7196.
- 2221 → página 2, Valid = 0 → page fault. No tiene dirección física.
- 5499 → página 5, frame 0, offset 379 → 379.
La pregunta «describe la traducción» se responde con los 4 pasos de arriba (página/offset → entrada → frame → frame | offset), mencionando page y frame del mismo tamaño y el page fault.
P5 · A, B, C de 64×64 recorridas por columnas (su razonamiento)
- Enteros por página: = 4 filas de 64.
- Páginas por matriz: 16. Ese es el dato «16 pages» del enunciado: sale de esta división.
- Frames: 4 reservados, pero uno es para las instrucciones, así que quedan 3 para datos.
iyjestán en registros, así que no ocupan memoria. «Si fueran enteros normales sí contarían».
El recorrido, con j = 0 fijo e i bajando por la columna:
- i = 0: 3 page faults, uno por matriz (A, B y C cargan su primera página, filas 0–3).
- i = 1, 2, 3: aciertos.
- i = 4: otros 3, para las páginas de las filas 4–7. Y así sucesivamente.
- Patrón: 3 page faults cada 4 iteraciones. Por columna son 16 bloques × 3 = 48.
- Al pasar a j = 1 se vuelve a la fila 0, cuya página ya fue reemplazada: otros 48. En total 48 × 64 = 3072. Es lo que quedó escrito en la pizarra: «PFs = 48 × 64».
¿Se puede mejorar? Sí: intercambiar los bucles (i afuera, j adentro), «como normalmente lo hacemos». Así se aprovecha cada página entera antes de pasar a la siguiente. El cálculo de la nueva frecuencia lo dejó pendiente: son 48 fallos en total, 3 cada 256 iteraciones (ver la solución completa).
La P6 (8 GB, páginas de 8 kB, 46 bits, TLB y EAT) no alcanzó a verse en esta sección. Su solución está en Ejercicios: Virtual Memory.
Autoevaluación
0/7 correctas · 0 respondidasFuente ·Grabación de la clase de laboratorio del 10/10/2026 (sem_9_10/recuperacion, 1 h 53 min, transcrita) · sem_9_10/10-OSL-Valgrind.pdf (sección Paging que se explicó en clase) · sem_9_10/11-OSL-Ejercicios_Virtual_Memory.pdf (P1–P5 resueltas en vivo)