Gestión de memoria en sistemas operativos: particiones, paginación y segmentación
Resumen
El documento repasa las técnicas fundamentales de gestión de memoria en sistemas operativos: particiones contiguas de tamaño fijo y variable, con su problema de fragmentación y la compactación, y la paginación, con su mecanismo de traducción de direcciones mediante tablas de páginas. También introduce la segmentación como enfoque más cercano a la lógica del programa. El estudiante aprenderá qué problema resuelve cada técnica y cómo se traducen las direcciones en cada caso.
Puntos clave
- En las particiones contiguas de tamaño fijo el principal problema es la fragmentación externa.
- En las particiones de tamaño variable el SO registra los huecos libres en una tabla con su dirección de inicio y tamaño.
- La compactación agrupa huecos pequeños en una única área contigua para optimizar el espacio.
- La paginación divide la memoria física en frames y la lógica en páginas de igual tamaño, permitiendo asignación discontinua.
- Cada dirección se divide en número de página (P) y desplazamiento (d), y la tabla de páginas convierte P en un frame.
- Cada acceso a memoria implica dos accesos, lo que se mitiga con memorias caché como el TLB.
- La segmentación divide el programa en segmentos lógicos de tamaño variable, traducidos mediante la tabla de segmentos, y reduce la fragmentación interna.
Gestión de Memoria en Sistemas Operativos: Técnicas Fundamentales
Particiones Contiguas de Tamaño Fijo
Esta técnica implica dividir la memoria en bloques de tamaño predefinido.
- Problema principal: Fragmentación Externa.
Ejemplo de distribución de memoria:
| Sistema Operativo | | Programa 1 | Zona 1 | (Espacio Libre) | Zona 2
Particiones Contiguas de Tamaño Variable (Reubicables)
En lugar de utilizar registros de hardware (HW) para indicar el principio y el fin de las zonas de memoria, el Sistema Operativo (SO) utiliza una tabla interna. En esta tabla se registran las zonas de memoria libres o huecos, especificando su dirección de inicio y tamaño.
Ejemplo de Registro de Zonas Libres (Huecos)
- Zona 1: Inicio 2500, Tamaño 250 KB
- Zona 2: Inicio 3000, Tamaño 250 KB
- Zona 3: Inicio 4250, Tamaño 500 KB
La Necesidad de Compactación
Cuando existen numerosos huecos de pequeño tamaño que, en conjunto, suponen una gran extensión de memoria, se hace necesaria la compactación de la memoria. Este proceso permite agrupar esos huecos en una sola área contigua de gran tamaño, optimizando el uso del espacio.
Ejemplo después de la compactación:
- Zona 1: Inicio 2500, Tamaño 500 KB
- Zona 3: Inicio 4250, Tamaño 500 KB
Paginación (Paging)
El principal problema de la gestión de memoria tradicional es la necesidad de asignar cantidades contiguas de memoria a cada programa para su ejecución. La Paginación resuelve esto permitiendo la asignación de memoria de forma discontinua, asegurando que los programas continúen funcionando correctamente.
Conceptos Clave de Paginación
- La memoria física se divide en trozos de tamaño fijo llamados Armazones o Frames.
- La memoria lógica (los programas) se divide en bloques de igual longitud llamados Páginas.
Ejemplo de mapeo: Páginas 1-5 mapeadas a Frames 1-10.
Mecanismo de Traducción de Direcciones
El Sistema Operativo mantiene una Tabla de Páginas donde se relaciona cada Página cargada en memoria con el Frame que la contiene en la memoria física.
Ejemplo de registro: Frame 1 al 3, Página 1; Frame 5, Página 2; Frame 9, Página 5.
- Cada dirección que genera el procesador será interceptada y dividida en dos componentes: el Número de Página (P) y el Desplazamiento dentro de la página (d).
- El sistema mantiene la Tabla de Páginas en memoria, apuntando a su origen con un registro especial llamado Registro Base.
- Cuando se obtiene una dirección de una instrucción o un dato, el sistema accede a la tabla (Registro Base + P) y averigua el Frame donde está cargada esta página.
- Posteriormente, accede a la dirección real yendo al Frame correspondiente y desplazándose dentro de él lo que indique el desplazamiento (Frame + d).
Implicaciones y Optimización
- Cada dirección de memoria provoca dos accesos a memoria, lo que implica que se duplica el tiempo de ejecución.
- Obtenemos una mejor gestión de la memoria a cambio de una mayor duración de los procesos.
- Para solventar, en la medida de lo posible, este problema, se recurre al uso de memorias caché (como el TLB), donde se precargan las páginas que se están ejecutando y las siguientes.
- Esta forma de gestionar la memoria permite la asignación de direcciones de manera dinámica.
- En sistemas pequeños, la Tabla de Páginas, en vez de ser una estructura de datos en memoria, se puede implementar mediante el uso de Registros Asociativos (registros HW).
- Con esta técnica se puede prácticamente eliminar la fragmentación externa, aunque la fragmentación interna es casi imposible de evitar.
Segmentación
La Segmentación es una técnica de gestión de memoria que busca acercarse más al punto de vista del usuario, tratando los programas como un conjunto de componentes lógicos.
Estructura Lógica de un Programa
Los programas generalmente constan de dos partes:
- Núcleo Central.
- Rutinas (llamadas por ese núcleo central).
Desde un punto de vista lógico, un programa es un conjunto de componentes lógicos de tamaño variable, es decir, un conjunto de Segmentos, cada uno definido por su tamaño y su número.
Traducción de Direcciones en Segmentación
- La segmentación de un programa la realiza el compilador (siguiendo las órdenes del programador).
- Cada dirección lógica se expresa mediante dos valores: Número de Segmento (S) y Desplazamiento dentro del segmento (d).
- Puesto que la memoria física se direcciona linealmente, se necesita transformar cada dirección lógica (S, d) en una dirección real (r).
- Esta conversión la realiza un dispositivo especial de hardware (HW) consultando la Tabla de Segmentos.
Ventajas
Esta técnica permite reducir la fragmentación interna provocada por la Paginación, ya que se le asigna a cada programa y segmento exactamente la cantidad de memoria que necesita.
Descargar
PDF Word HTMLPreguntas frecuentes
¿Qué problema resuelve la paginación?
La paginación resuelve la necesidad de asignar bloques contiguos de memoria a cada programa, permitiendo una asignación discontinua. Así los programas pueden seguir funcionando correctamente aunque la memoria esté fragmentada.
¿Para qué sirve la compactación de memoria?
Se utiliza cuando hay muchos huecos pequeños que, en conjunto, suponen una gran extensión de memoria. Agrupa esos huecos en una sola área contigua de gran tamaño.
¿Por qué la paginación aumenta el tiempo de ejecución?
Cada dirección de memoria provoca dos accesos: uno a la tabla de páginas y otro a la dirección real. Para reducirlo se usan memorias caché como el TLB.
Ponte a prueba
Tarjetas de repaso
Pulsa una tarjeta para ver la respuesta.
Test
Preguntas generadas con IA a partir del documento: comprueba las respuestas con el texto.