Ir al contenido

Stallings cap. 7 · Gestión de memoria (completo + apéndice 7A)

🎯 Al terminar podrás

  1. Enumerar los 5 requisitos de la gestión de memoria y relacionar cada uno con un mecanismo.
  2. Comparar particiones fijas, dinámicas, buddy, paginación y segmentación por su tipo de fragmentación.
  3. Explicar los tipos de dirección (lógica, relativa, física) y la carga y el enlace del apéndice 7A.
  4. Responder de memoria las Review Questions 7.1–7.9.

Antes necesitas: Particiones, segmentación y paginación (con práctica)

  • Feynman explícalo en voz alta sin mirar y compara con la lista
  • Examen cronométrate y no abras la solución hasta terminar

7.1 Requisitos de la gestión de memoria 📌

Sección titulada «7.1 Requisitos de la gestión de memoria 📌»

Son cinco: relocalización, protección, compartición, organización lógica y organización física.

RequisitoQué significaDetalle que se pregunta
RelocalizaciónNo se sabe de antemano dónde quedará el programa, y el swap puede devolverlo a otro lugarEl hardware y el SO deben traducir las referencias del código (saltos, datos) a direcciones físicas reales
ProtecciónNingún proceso debe leer o escribir la memoria de otro (ni la del SO) sin permisoNo se puede verificar al compilar: no se sabe dónde quedará el programa y las direcciones se calculan en ejecución (índices, punteros). Por eso la verifica el procesador (hardware) en cada acceso, no el SO
ComparticiónPermitir acceso controlado a zonas comunesVarios procesos que corren el mismo programa comparten una copia; procesos que cooperan comparten estructuras
Organización lógicaLa memoria es lineal, pero los programas se escriben en módulosVentajas de manejar módulos: se compilan por separado, tienen distinta protección (solo lectura o solo ejecución) y se comparten por módulo. La herramienta que mejor lo cumple es la segmentación
Organización físicaDos niveles: principal (rápida, cara, volátil) y secundaria (lenta, barata, persistente)Mover datos entre ambos niveles no puede quedar en manos del programador: los overlays le hacen perder tiempo y además no sabe cuánto espacio tendrá. Es responsabilidad del sistema

Matiz que el libro repite: los mecanismos que dan relocalización también dan protección y compartición. Al mismo tiempo, la relocalización dificulta la protección, porque las direcciones ya no son predecibles.

Tabla 7.2 · Las técnicas del cap. 7 y el 8 📌

Sección titulada «Tabla 7.2 · Las técnicas del cap. 7 y el 8 📌»
TécnicaDescripciónVentajasDesventajas
Particiones fijasParticiones estáticas, definidas al generar el sistemaSimple, poco overhead del SOFragmentación interna; número máximo de procesos activos fijo
Particiones dinámicasSe crean a la medida exacta de cada procesoSin fragmentación interna, mejor uso de memoriaNecesita compactación (gasta CPU) por la fragmentación externa
Paginación simpleFrames iguales; las páginas del proceso van en frames no contiguos; se cargan todasSin fragmentación externaUn poco de fragmentación interna
Segmentación simpleSegmentos de distinto tamaño en particiones dinámicas no contiguas; se cargan todosSin fragmentación interna; mejor que las dinámicasFragmentación externa
Paginación con MVComo la simple, pero no hace falta cargar todas las páginasSin fragmentación externa, más multiprogramación, espacio virtual grandeOverhead de una gestión compleja
Segmentación con MVComo la simple, pero no hace falta cargar todos los segmentosSin fragmentación interna, más multiprogramación, espacio grande, protección y comparticiónOverhead de una gestión compleja

Iguales: cualquier proceso que quepa entra en cualquier partición libre. Tienen dos problemas:

  1. Un programa más grande que la partición necesita overlays.
  2. Uso muy ineficiente: un programa de 2 MB ocupa una partición de 8 MB. Eso es la fragmentación interna (espacio perdido dentro de la partición).

Desiguales (figura 7.2b): reducen ambos problemas pero no los resuelven. Hay dos formas de asignar:

Una cola por partición (7.3a)Una sola cola (7.3b)
Reglacada proceso va a la partición más chica donde cabese elige la partición libre más chica que lo contenga
Ventajaminimiza la fragmentación interna de cada particiónmejor para el sistema completo
Problemauna partición grande puede quedar vacía mientras otros esperan—

Desventajas generales:

  • el número de particiones limita los procesos activos;
  • los trabajos pequeños aprovechan mal el espacio.

Hoy casi no se usan. El ejemplo del libro es OS/MFT de IBM.

iguales (8 MB cada una)desigualesSO · 8 MB2576 MB perdidos3 MB1 MB10 MB de fragmentación internaSO · 8 MB2 MBproc. 2 MB4 MB6 MBproc. 5 MB8 MBproc. 7 MB8 MB12 MB16 MB2 MB de fragmentación interna

Cómo leerlo: las particiones son las de la figura 7.2 del libro; los tres procesos (2, 5 y 7 MB) son un ejemplo propio. Verde es lo que el proceso usa y lo rayado, lo que se pierde dentro de su partición. Con particiones desiguales, cada proceso cae en una más ajustada y se pierde mucho menos.

  • Cada proceso recibe exactamente lo que necesita. El ejemplo del libro es OS/MVT de IBM.
  • Con el tiempo quedan muchos huecos pequeños entre particiones: fragmentación externa.
  • Compactación: el SO mueve los procesos para juntar todo el espacio libre. Consume tiempo de CPU y exige relocalización dinámica.

Placement 📌:

AlgoritmoCómo eligeLo que dice el libro
First-fitel primer bloque libre suficiente desde el inicioEl más simple y, por lo general, el mejor y más rápido. Puede llenar el inicio de fragmentos pequeños
Next-fitel siguiente bloque suficiente desde la última asignaciónAlgo peor que first-fit: rompe rápido el bloque grande del final y obliga a compactar más
Best-fitel bloque de tamaño más cercano al pedidoPese a su nombre, suele ser el peor: deja fragmentos diminutos inútiles y obliga a compactar más seguido

En el ejemplo de la figura 7.5, un pedido de 16 MB con la última asignación hecha en un bloque de 14 MB deja:

  • best-fit: un fragmento de 2 MB (usa el bloque de 18 MB);
  • first-fit: un fragmento de 6 MB;
  • next-fit: un fragmento de 20 MB.
8122218861436última asignaciónfirst-fitqueda 6 MBbest-fitqueda 2 MBnext-fitqueda 20 MBnext-fit busca desde aquíBloques libres en MB; gris oscuro: ocupado; amarillo: el último asignado. Pedido: 16 MB. Fig. 7.5 de Stallings.

Cómo leerlo: la fila es la memoria y los números, los bloques libres en MB. First-fit recorre desde la izquierda y se queda con el primero que alcanza (22). Best-fit revisa todos y elige el más ajustado (18). Next-fit parte desde la última asignación (14) y sigue hacia la derecha hasta el de 36.

Reemplazo: si todos los procesos en memoria están bloqueados y no hay espacio ni compactando, se hace swap de alguno. El tema se desarrolla en el cap. 8.

Es un compromiso entre las particiones fijas y las dinámicas.

  • Los bloques miden 2K2^K, con L≤K≤UL \le K \le U: 2L2^L es el bloque más chico y 2U2^U normalmente toda la memoria.
  • Asignar s: si 2U−1<s≤2U2^{U-1} < s \le 2^U se da el bloque entero. Si no, se divide en dos buddies de 2U−12^{U-1}, y así sucesivamente hasta el bloque más chico que sea ≥ s.
  • Liberar: si los dos buddies de un par quedan libres, se fusionan en el bloque de tamaño 2i+12^{i+1}.
  • Árbol (figura 7.7): si dos buddies son hojas, al menos uno está asignado; si no, ya se habrían fusionado.
  • Ejemplo del libro: 1 MB inicial y A pide 100 KB, así que recibe 128 KB (1 MB → 512 → 256 → 128).
1 MB512 KB512 KB libre256 KB256 KB libreA · 128 KB128 KB libreA128256512A pide 100 KB: se parte a la mitadhasta el bloque más chico ≥ 100 KB.Sobran 28 KB dentro de A:fragmentación interna.Abajo, la memoria real, a escala.

Cómo leerlo: cada división parte un bloque en dos buddies iguales. Se divide por la rama izquierda hasta llegar a 128 KB, el bloque más chico que contiene 100 KB. Los buddies grises quedan libres para otros pedidos y se fusionarán con su pareja cuando A se libere.

  • Dónde se usa: en sistemas paralelos, en una variante para el kernel de UNIX (el lazy buddy del cap. 8) y en la asignación de páginas de Linux.

Practica con el simulador de Particiones.

DirecciónDefinición del libro
LógicaReferencia independiente de dónde están los datos en memoria; hay que traducirla antes del acceso
RelativaUn caso de dirección lógica: se expresa respecto a un punto conocido, normalmente un registro (el inicio del programa)
Física (absoluta)La ubicación real en la memoria principal

Hardware de la figura 7.8:

  • Al pasar a Running se cargan dos registros: el base (dirección de inicio) y el límite (bounds, dirección final).
  • En cada referencia relativa: (1) base + relativa = absoluta; (2) se compara con el límite. Si está fuera, hay una interrupción al SO.
  • Así se logra la relocalización (el swap puede devolver el proceso a otro lugar) y la protección (cada imagen queda aislada por base y límite).
dirección relativadel programaregistro base+absolutaregistro límite¿dentro?síacceso a memoriadentro de la imagen del procesonointerrupción al SOCambiar de lugar el proceso= cargar otra base

Cómo leerlo: el programa solo conoce direcciones relativas. El hardware les suma la base y revisa que el resultado no pase el límite. Para mover el proceso basta con cargar otra base; el programa no cambia.

  • La memoria se divide en frames pequeños de tamaño fijo, y el proceso en páginas del mismo tamaño.
  • Sin fragmentación externa; solo hay fragmentación interna en la última página del proceso.
  • Las estructuras:
    • una tabla de páginas por proceso, con una entrada por página que dice el frame;
    • una lista de frames libres para todo el sistema.
  • Ejemplo de la figura 7.9: el proceso D tiene 5 páginas y entra en los frames 4, 5, 6, 11 y 12, aunque no estén contiguos.
  • Paginación vs particiones fijas: se parecen, pero en la paginación las particiones son pequeñas, un programa ocupa varias y estas no necesitan ser contiguas.
tabla de páginas de Dpáginamarco041526311412lista de marcos libres13, 14memoria física (15 marcos)A.00A.11A.22A.33D.04D.15D.26C.07C.18C.29C.310D.311D.412libre13libre14B salió y dejó libres los marcos 4–6. D los usa y además el 11 y el 12: no son contiguos y da igual.

Cómo leerlo: las páginas de un proceso caen en marcos sueltos de la memoria física; la tabla de páginas recuerda dónde quedó cada una.

Por qué la página es potencia de 2:

  1. La dirección lógica (página, offset) es idéntica a la relativa, así que el esquema es transparente para el programador, el ensamblador y el linker.
  2. Es fácil hacer la traducción en hardware.

Traducción con n bits de página y m de offset:

  1. tomar los n bits de la izquierda como número de página;
  2. indexar la tabla y obtener el frame k;
  3. la dirección física es k⋅2mk \cdot 2^m + offset, es decir, se concatena el frame con el offset (no hace falta sumar).

Ejemplo de la figura 7.11: dirección relativa 1502 con páginas de 1 KB y 16 bits.

  • Se parte en 6 bits de página (máximo 64 páginas) y 10 de offset.
  • 1502 = 000001 0111011110, es decir página 1, offset 478.
  • Si la página 1 está en el frame 6, la física es 000110 0111011110.
  • Los segmentos tienen tamaños distintos (con un máximo). La dirección es (segmento, offset).
  • Se parece a las particiones dinámicas, pero el programa ocupa varias particiones que no tienen que ser contiguas.
  • Sin fragmentación interna, con fragmentación externa (menor que con particiones dinámicas, porque los trozos son más chicos).
  • Visibilidad: la paginación es invisible para el programador; la segmentación suele ser visible y sirve para organizar programas y datos. El inconveniente es que el programador debe conocer el tamaño máximo de segmento.
  • Tabla de segmentos por proceso: cada entrada guarda la base y la longitud. Al pasar a Running, la dirección de la tabla se carga en un registro.
dirección lógica = (s, d)CPUs = 1d = 50STLR = 3cuántos segmentos haySTBRdónde está la tabla¿s < STLR?1 < 3 ✓notrap: s inválidosíSTBR + stabla de segmentos (en RAM)sVpermisoslímitebase01R-X500100011RW-200300020no válido——¿d < límite?50 < 200 ✓ · W ✓nosegmentation faultsí+base + dfísica3050

Cómo leerlo: el número de segmento elige la fila de la tabla; el offset se compara con la longitud y, si cabe, se suma a la base.

Traducción con n bits de segmento y m de offset:

  1. tomar los n bits de la izquierda como número de segmento;
  2. indexar la tabla y obtener la base;
  3. si offset ≥ longitud, la dirección es inválida;
  4. física = base + offset (aquí sí se suma).

Ejemplo de la figura 7.11c: 4 bits de segmento y 12 de offset, así que el segmento máximo es 2122^{12} = 4096 B.

  • 0001 001011110000 es segmento 1, offset 752.
  • Con base 0010000000100000, la física es 0010001100010000.
TipoCómo funcionaLimitación
AbsolutaEl módulo siempre se carga en la misma dirección; todas sus referencias son absolutasHay que decidir la ubicación de antemano. Si las fija el programador, todos deben conocer la estrategia de ubicación y cualquier cambio obliga a reescribir las direcciones. Es mejor usar símbolos y resolverlos al compilar
RelocalizableEl compilador genera direcciones relativas al inicio (0); el cargador suma x a cada referenciaUsa el diccionario de relocalización, que indica dónde están las referencias. No sirve con swap: ya quedó atado a un lugar
Dinámica en ejecuciónEl módulo se carga con referencias relativas, y la dirección absoluta se calcula al ejecutar cada instrucción, en hardwareFlexibilidad total: se puede hacer swap a otra ubicación

Tabla 7.3 · Momento del enlace (binding) 📌

Sección titulada «Tabla 7.3 · Momento del enlace (binding) 📌»

(a) El cargador: ¿cuándo se fija la dirección física?

MomentoQué pasa
Programaciónel programador escribe direcciones físicas
Compilación o ensambladoel compilador convierte símbolos en direcciones físicas
Cargael compilador da direcciones relativas y el cargador las convierte
Ejecuciónel programa conserva direcciones relativas y el hardware las convierte
programaciónel programadorcompilaciónel compiladorcargael cargadorejecuciónel hardware (MMU)fila de abajo: quién convierte en dirección físicala dirección queda fija antes de ejecutar: el proceso no se puede moverswap a otro lugar posibleTabla 7.3 (a) de Stallings.

Cómo leerlo: cuanto más a la derecha ocurre la traducción, más flexible es. Solo si se hace en ejecución el SO puede sacar un proceso a disco y devolverlo a otra zona de memoria.

(b) El enlazador: ¿cuándo se resuelven las referencias externas?

MomentoQué pasa
Programaciónno hay referencias externas; el programador incluye el código de todo
Compilaciónel ensamblador trae y ensambla todo junto
Creación del módulo de cargase enlazan los módulos objeto con direcciones relativas al origen del módulo de carga
Cargalas referencias se resuelven al cargar, agregando los módulos dinámicos
Ejecuciónse resuelven cuando se ejecuta la llamada: se interrumpe y se enlaza el módulo
  • El linker toma módulos objeto (con referencias simbólicas entre ellos) y genera un solo módulo de carga.
  • Un linker que produce un módulo relocalizable se llama linkage editor (editor de enlace).
  • Enlace dinámico: se posterga el enlace de algunos módulos externos hasta después de crear el módulo de carga.

En la carga (load-time) tiene tres ventajas sobre el estático:

  1. Es más fácil actualizar el módulo destino sin re-enlazar la aplicación (el software comercial se vende ya enlazado).
  2. Permite compartir código automáticamente: una sola copia para varias aplicaciones.
  3. Facilita que terceros extiendan el SO.

En ejecución (run-time):

  • La referencia se resuelve cuando se llama al módulo ausente. En Windows son las DLL.
  • Si otro proceso ya cargó el módulo, el nuevo se enlaza a esa copia.
  • DLL hell: dos procesos comparten una DLL pero esperan versiones distintas (por ejemplo, una reinstalación trae una versión vieja).
  • Ventaja extra: solo se reserva memoria para los módulos que de verdad se usan, como en transacciones de una aerolínea o de un banco. Sirve de apoyo a los sistemas segmentados.

absolute loading · buddy system · compaction · dynamic linking · dynamic partitioning · dynamic run-time loading · external fragmentation · fixed partitioning · frame · internal fragmentation · linkage editor · linking · loading · logical address · logical organization · memory management · page · page table · paging · partitioning · physical address · physical organization · protection · relative address · relocatable loading · relocation · segment · segmentation · sharing

7.1 · ¿Qué requisitos debe satisfacer la gestión de memoria?

Relocalización, protección, compartición, organización lógica y organización física.

7.2 · ¿Por qué es deseable poder relocalizar procesos?
  • El programador no sabe qué otros programas estarán en memoria ni dónde quedará el suyo.
  • Para aprovechar mejor el procesador se hace swap, y obligar a que el proceso vuelva a la misma zona sería muy limitante: debe poder ir a cualquier lugar libre.
  • La compactación también mueve procesos.
7.3 · ¿Por qué no se puede garantizar la protección al compilar?

Por dos razones:

  1. No se sabe dónde quedará el programa en memoria (relocalización).
  2. Muchos lenguajes calculan direcciones en ejecución (índices de arreglos, punteros).

Por eso cada referencia se debe verificar al ejecutarse, y lo hace el hardware: revisar todo de antemano sería imposible o demasiado costoso.

7.4 · ¿Por qué permitir que dos o más procesos accedan a una misma región?
  • Si varios procesos ejecutan el mismo programa, conviene que compartan una copia en vez de tener una cada uno.
  • Procesos que cooperan en una tarea necesitan compartir una estructura de datos.
  • Las bibliotecas compartidas son otro ejemplo.
7.5 · Ventajas de las particiones fijas de tamaño desigual
  • Caben programas más grandes sin overlays (por ejemplo, de hasta 16 MB).
  • Las particiones pequeñas reducen la fragmentación interna de los programas chicos.

Es decir, hay más flexibilidad manteniendo la simplicidad y el bajo overhead.

7.6 · Diferencia entre fragmentación interna y externa
  • Interna: espacio perdido dentro de un bloque asignado, porque lo cargado es más chico que el bloque (particiones fijas, última página).
  • Externa: espacio libre entre bloques asignados, partido en huecos demasiado pequeños para usarse (particiones dinámicas, segmentación). Se combate con compactación.
7.7 · Distinción entre direcciones lógicas, relativas y físicas
  • Lógica: independiente de la ubicación actual en memoria; requiere traducción.
  • Relativa: un tipo de lógica, expresada respecto a un punto conocido, normalmente el inicio del programa guardado en un registro.
  • Física o absoluta: la ubicación real en la memoria principal.
7.8 · Diferencia entre página y frame
  • La página es un trozo de tamaño fijo del proceso (memoria lógica).
  • El frame es un trozo del mismo tamaño de la memoria principal (física), donde se carga una página.
7.9 · Diferencia entre página y segmento
PáginaSegmento
Tamañofijo, igual al framevariable (con un máximo)
Visibilidadinvisible para el programadorvisible: el programador o el compilador decide
Fragmentacióninternaexterna
Dirección físicaframe concatenado con el offsetbase + offset (se verifica la longitud)
Significadoningunológico: código, datos, pila, módulos

Cap. 7 según el libro

0/14 correctas · 0 respondidas
1. ¿Quién debe verificar la protección de memoria según Stallings?
2. La herramienta que mejor satisface la organización lógica es…
3. Según el libro, el algoritmo de placement que suele rendir peor es…
4. El que suele ser el más simple, rápido y mejor es…
5. Next-fit tiende a obligar a compactar más porque…
6. Un sistema con particiones fijas iguales sufre de…
7. Con buddy y 1 MB libre, un pedido de 100 KB recibe…
8. En un árbol buddy, dos buddies hoja…
9. Los registros base y límite permiten…
10. ¿Por qué la página es potencia de 2?
11. La carga relocalizable no sirve con swap porque…
12. Un linker que produce un módulo de carga relocalizable se llama…
13. DLL hell ocurre cuando…
14. En segmentación simple, la dirección física se obtiene…

📈 ¿Qué tan bien lo dominas?

Elige pensando en lo que hiciste, no en lo que leíste. Para marcar 3 tienes que haber resuelto un ejercicio nuevo sin pistas y haberlo justificado. Si solo lo leíste y sientes que «ya entendí», todavía es un 1.

Fuente ·Stallings, Operating Systems 9e, cap. 7 completo (§7.1–7.6) y apéndice 7A · Indicaciones del LC3: lectura recomendada