Gestión de Memoria en Sistemas Operativos: Conceptos Esenciales y Estrategias

Administración de Memoria en Sistemas Operativos

La administración de memoria es un componente fundamental en el diseño y funcionamiento de los sistemas operativos (SO). Su objetivo principal es gestionar eficientemente el espacio de memoria disponible para los procesos, garantizando su correcto funcionamiento y la protección entre ellos.

Conceptos Fundamentales de Memoria

Memoria: Se refiere a los componentes de un computador, dispositivos y medios de grabación que retienen datos informáticos durante algún intervalo de tiempo.

Se distingue entre «almacenamiento primario» (a veces «almacenamiento principal»), para memorias de acceso aleatorio (RAM), y «almacenamiento secundario» para dispositivos de almacenamiento masivo (como discos duros).

Rol del Administrador de Memoria

La parte del sistema operativo que se encarga del manejo de la memoria se denomina administrador de la memoria. Su labor consiste en llevar un registro de qué partes de la memoria se están utilizando y qué partes no, con el fin de asignar espacio a los procesos cuando estos lo requieran.

La organización y administración de la memoria principal, memoria primaria o memoria real es uno de los factores más importantes que influyen en el diseño de los sistemas operativos (SO).

La multiprogramación implica tener varios procesos cargados en memoria al mismo tiempo. Para compartir este recurso, existen diversos algoritmos de administración de memoria.

La administración de memoria depende fuertemente del hardware.

Ley de Parkinson sobre la Memoria

«Los programas se expanden todo lo que pueden en la memoria».

Los programas no deben interferirse entre sí; por lo tanto, el sistema operativo (SO) debe administrar la memoria eficientemente.

Para que un proceso pueda ejecutarse, debe estar ubicado en la memoria principal del computador.

Funciones Clave del SO en la Gestión de Memoria

Una parte del sistema operativo se encarga de:

  • Gestionar la memoria principal.
  • Llevar un registro de qué zonas están libres.

Otros dos temas importantes en la gestión de la memoria son:

  • La carga de los programas de disco a memoria.
  • La protección, ya que varios procesos deben compartir la memoria del ordenador.

Objetivos de la Gestión de Memoria

Su objetivo es conseguir el rendimiento de una memoria de gran velocidad al costo de una memoria de baja velocidad.

Los puntos básicos relacionados con la memoria pueden resumirse en: cantidad, velocidad y costo.

  • Cantidad: Cuanta más memoria haya disponible, más podrá utilizarse.
  • Velocidad: La velocidad a la que el procesador puede trabajar.
  • Costo: El costo de la memoria no debe ser excesivo para que sea factible construir un equipo accesible.

Jerarquía de Memoria

Los programas y datos tienen que estar en la memoria principal para poder ejecutarse o ser referenciados.

Los programas y datos que no son necesarios de inmediato pueden mantenerse en el almacenamiento secundario.

La caché o memoria de alta velocidad es más rápida y costosa que la memoria principal. Los programas en la memoria caché se ejecutan mucho más rápido que en la memoria principal.

Fragmentación de Memoria

La fragmentación es un fenómeno que reduce la eficiencia del uso de la memoria y puede ser de dos tipos:

  • Fragmentación interna: Se debe a la diferencia de tamaños entre la partición de memoria y el objeto residente en ella (típica de partición estática).
  • Fragmentación externa: Desaprovechamiento de memoria entre particiones (típica de particiones dinámicas).

Asignación de Memoria: Contigua y No Contigua

Asignación de Memoria Contigua

Un proceso se ubica en su totalidad en posiciones consecutivas de memoria.

Asignación de Memoria No Contigua

Un proceso puede dividirse en bloques, y estos bloques pueden situarse en posiciones no contiguas de memoria principal.

Sistemas de Monoprogramación

En sistemas de monoprogramación, solo existe un proceso de usuario, que disfruta de todos los recursos del PC.

Tipos de Direcciones

  • Direcciones Absolutas: Una dirección absoluta de memoria es una dirección física (es decir, real) de la memoria.
  • Direcciones Relativas: La dirección se expresa como una posición relativa a un punto de inicio, a menudo la dirección cero.

Protección de Memoria en Monoprogramación

En general, los sistemas operativos monousuario de monoprogramación no tienen protección de la memoria. El único proceso de usuario que existe en la memoria puede modificar posiciones de memoria pertenecientes al sistema operativo.

La solución para la protección se logra mediante un registro de límite integrado en la CPU. El hardware, en tiempo de ejecución, verifica que las direcciones generadas por el proceso de usuario no sean superiores al valor del registro de límite.

Gestión de Memoria en Sistemas Multiprogramados

En la multiprogramación, la memoria debe ser compartida por varios procesos para obtener una mayor utilización de los recursos del ordenador. La protección se debe intensificar para proteger los espacios de los procesos entre sí.

Un proceso puede ocupar una partición, y cada partición es ocupada por uno y solo un proceso. Cuando se asigna memoria a un proceso, se le asigna la partición. Cuando el proceso finaliza, se libera la partición.

Los sistemas multiprogramados complican sustancialmente la gestión de la memoria. ¿Por qué?

  • Se debe llevar un recuento de las zonas de memoria ocupadas por los procesos.
  • Cuando un nuevo proceso entra en la memoria, se le asignará una zona que estaba libre.

Multiprogramación con Particiones Fijas (Estáticas)

Es la manera más simple de administrar la memoria en sistemas multiprogramados. Consiste en dividir la memoria en n partes de tamaño fijo y, a menudo, desiguales.

Desventajas de Particiones Fijas

  • Mala utilización de la memoria debido a la poca flexibilidad del método.
  • Es complicado ejecutar programas más grandes que el tamaño de la partición. Si el programa es mayor que los espacios de la partición, solo una parte del programa puede estar en la memoria principal en cada instante, lo que lleva a la Superposición (también conocida como Overlays).
  • Desaprovechamiento de memoria por una mala partición (relacionado con la fragmentación).

Multiprogramación con Particiones Variables (Dinámicas)

La memoria se divide en bloques de diferente tamaño de acuerdo con las necesidades del proceso.

Ventajas de Particiones Variables

Su flexibilidad, pues permite definir bloques del tamaño requerido, eliminando así la fragmentación interna.

Desventajas de Particiones Variables

Cuando se libera una partición y esta no puede ser ocupada, se originan huecos de memoria.

Consideraciones en Particiones Dinámicas

  • Las particiones son variables en número y longitud.
  • Cuando se carga un proceso en memoria, se le asigna toda la memoria que necesita.
  • Cuando alguno de estos procesos termina y libera la memoria utilizada, ese espacio podrá ser usado por un proceso de igual o menor tamaño.
  • La memoria puede quedar fragmentada en pequeños espacios que no sean lo suficientemente grandes como para poder asignarlos a los procesos listos.
  • La suma de estos fragmentos puede resultar en un espacio que sí podría ser utilizado, pero no está disponible por no ser contiguo (fragmentación externa).

La forma de solucionar la fragmentación externa es la compactación de la memoria, desplazando los procesos para que estén contiguos, dejando los espacios libres juntos en un bloque.

Algoritmos de Ubicación de Procesos

Estos algoritmos determinan cómo se asignan los procesos a las particiones de memoria disponibles.

  • Cola de procesos por partición: Los procesos se encolan de acuerdo con la partición asignada, normalmente por tamaño.
  • Cola única: Los procesos a la espera de ser cargados se encolan en una cola única, y un módulo administra el uso de todas las particiones.

Estrategias de Colocación de Memoria

Definen cómo se elige un espacio libre para un nuevo proceso.

  • Primer Ajuste (First Fit): Se asigna el primer espacio libre que sea lo suficientemente grande para el proceso.
  • Mejor Ajuste (Best Fit): Se asigna el espacio libre cuyo tamaño es el más pequeño, pero lo suficientemente grande para el proceso.
  • Peor Ajuste (Worst Fit): Se asigna el espacio libre más grande, cuyo tamaño exceda en la mayor cantidad al tamaño deseado.
  • Siguiente Ajuste (Next Fit): Es similar al ‘Primer Ajuste’, con la diferencia de que se mantiene un puntero al lugar donde se asignó el último espacio, y la siguiente búsqueda se realiza a partir de él.
  • Ajuste Rápido (Quick Fit): Se mantienen listas enlazadas separadas de acuerdo con los tamaños de los huecos, para así encontrar un espacio más rápido para los procesos en la cola correspondiente.

Overlays (Superposiciones)

Una superposición mantiene en memoria solo aquellas instrucciones y datos necesarios en un momento dado, permitiendo ejecutar programas más grandes que la memoria física disponible.

Compactación de Memoria

Consiste en unir todos los bloques libres de memoria en una sola partición contigua.

Se requiere soporte de reubicación dinámica de programas, lo que implica:

  • Mover los bloques de memoria.
  • Ajustar registros base y límite.

Consideraciones para la Compactación

  • Optimizar la compactación requiere algoritmos más inteligentes.
  • Se puede combinar el swapping con particiones dinámicas para generar espacios libres.

Swapping (Zona de Intercambio)

En un sistema con particiones estáticas, el número de procesos con posibilidades de estar en estado listo viene determinado por el número de particiones.

En uno de particiones dinámicas, está dado por el tamaño de la memoria principal y el tamaño de los procesos, ya que en ambos métodos un proceso permanece en una partición hasta que finaliza.

Se denomina zona de intercambio a la parte del disco que se usa para guardar las imágenes de los procesos que no han de mantenerse en memoria física.

El método de *swapping* consiste en que un proceso que esté en memoria salga temporalmente, ya sea porque necesita más espacio o porque llega un proceso de mayor prioridad.

La técnica de llevar temporalmente un proceso a memoria secundaria se llama *swapping*. El espacio en disco donde se almacena se llama backing store.

Cuando se saca de memoria, se realiza un swap-out; cuando se trae nuevamente, un swap-in.

Binding de Direcciones

El *binding* se refiere al proceso de pasar de una dirección lógica a una dirección física.

Las direcciones de un proceso pueden ser lógicas, relativas o físicas.

  • Dirección Lógica: Es una referencia a una posición de memoria independiente de la asignación actual de datos en la memoria. Requiere una traducción a una dirección física.
  • Dirección Relativa: La dirección se expresa como una posición relativa a algún punto conocido en memoria.
  • Dirección Física: La dirección absoluta o la posición real en la memoria principal.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.