Capítulo 5: Gestión de la memoria principal

Publicado por P. Ruiz en

Gestión de memoria con particiones variables

Se basa en la idea de que las particiones de memoria vayan cambiando de tamaño a lo largo del tiempo. El sistema dispondrá de una tabla donde se representen las zonas de memoria que se encuentran ocupadas.

Cuando llega un proceso, se busca un bloque de memoria suficientemente grande para contenerlo y se le asigna sólo la porción necesaria. El resto del bloque queda libre para otra asignación. Cuando un proceso termina, la memoria que ocupaba queda disponible y, si se encuentra junto a otro bloque libre, se une a él.

particiones variables

En cualquier caso, el problema de esta idea es que, si hay múltiples asignaciones y liberaciones de memoria, ésta tenderá a tener una gran fragmentación externa.

Sin embargo, el problema se resuelve aplicando, cuando sea necesario, un procedimiento de compactación de memoria, que consiste en desplazar los bloques asignados hacia un extremo y uniendo a su vez todos los bloques libres en uno más grande. Lógicamente, el tiempo que debe emplearse para realizar esta tarea es su gran inconveniente.

En cuanto a la asignación, debe estar destinada a retrasar el momento en que sea necesaria la compactación de memoria. Existen diferentes opciones a la hora de elegir el bloque más adecuado para un proceso:

  • El primer ajuste: Se asigna el proceso al primer bloque libre en el que quepa. Con el tiempo, los espacios disponibles del principio de la memoria tenderán a ser pequeños y difíciles de utilizar.

    Es bastante rápido, aunque necesita recorrer los primeros bloques hasta encontrar un hueco disponible.

  • El siguiente ajuste: Busca un hueco a partir de la última asignación. Es frecuente que se reserve espacio en el bloque que queda disponible al final de la memoria, que se divide en pequeñas porciones.

    Lo normal es que requiera frecuentes compactaciones de memoria para obtener un bloque grande al final de la memoria.

  • El mejor ajuste: Se asigna el bloque más pequeño cuya capacidad sea suficiente para contener al proceso. El resultado es peor que el anterior, porque los fragmentos resultantes son más pequeños y, por lo tanto, difíciles de utilizar.

    Lo normal es que requiera frecuentes compactaciones de memoria.

  • El peor ajuste: Se asignan primero los fragmentos de memoria más grandes, esperando que los restos obtenidos puedan ser más sencillos de utilizar. Suele requerir compactaciones de memoria más tardías, aunque necesita recorrer todos los bloques libres antes de elegir cada destino.

Usando las particiones variables, se pueden seguir aplicando técnicas de intercambio, para mover a memoria secundaria, los procesos que se encuentran bloqueados en espera de un suceso.

Reubicación

Según lo que acabamos de decir, cada vez que un proceso (o una parte de este), se descargue a memoria secundaria (o cada vez que se compacte la memoria), al volver a ejecutarse, podrán haber cambiado las direcciones físicas donde se encontraba. Este mecanismo recibe el nombre de Reubicación.

Para lograr que la Reubicación funcione, el proceso de traducción de direcciones virtuales a direcciones físicas necesitará de la participación de dos registros en el procesador:

  • Registro base: Que contiene la dirección en memoria principal del proceso.

  • Registro límite: Que contiene la última posición a la que puede hacer referencia el proceso.

Si cuando sumamos la dirección relativa al registro base obtenemos un resultado inferior a dicho registro base o superior al registro límite, el procesador genera una interrupción que deberá ser procesada por el sistema operativo.

Reubicación

Actividad 1: Gestión de memoria con particiones variables

Supón que tenemos un sistema operativo que utiliza Gestión de memoria con particiones variables. Si en estos momentos se encuentra alojado un proceso en memoria a partir de la posición 5800 y ocupa 4500 palabras, responde a las siguientes preguntas:

  1. ¿Qué valor habrá almacenado en su registro base?

  2. ¿Que valor habrá almacenado en su registro límite?

  3. ¿Cuál será el rango de direcciones lógicas válidas a las que podrá hacer referencia el proceso?

  4. ¿Cuál será el rango de direcciones físicas válidas en las que se transformarán las direcciones lógicas?