Estrategias de Gestión de Memoria en Sistemas Operativos: Paginación, Segmentación y Particiones
Clasificado en Informática
Escrito el en
español con un tamaño de 5,34 KB
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.