Sie sind auf Seite 1von 2

3.2.

4 Administración de la memoria con el sistema de los asociados

Hemos visto en la sección anterior que el hecho de mantener todos los huecos en una o
más listas ordenadas por el tamaño de estos agiliza la asignación, pero hace más lenta la
liberación, puesto que hay que buscar en todas las listas de huecos para encontrar los vecinos
del segmento liberado. El sistema asociado (Knuth, 1973; Knowlton, 1965) es un algoritmo de
administración de la memoria que aprovecha el hecho de que las computadoras utilizan
números binarios para las direcciones, con el fin de hacer más rápida la fusión de los huecos
adyacentes cuando un proceso termina o se pasa a disco.
Funciona de esta manera. El administrador de la memoria mantiene una lista de los
bloques libres de tamaño 1, 2, 4, 8, 16, etc. bytes hasta el total de la memoria. Por ejemplo,
con una memoria de 1M, se necesitan 21 de esas listas, desde 1 byte hasta 1 megabyte. Al
principio, toda la memoria está libre y la lista correspondiente a 1M tiene una sola entrada,
con un solo hueco de 1M. Las demás listas están vacías. La configuración inicial de la
memoria aparece en la figura 3-9 en el primer renglón.

Veamos ahora como funciona el sistema asociado cuando un proceso de 70K se pasa a una
memoria de 1 M completamente libre. Puesto que las listas de huecos son sólo de potencias de
2, se solicitan 128K, que es la mínima potencia de 2 lo suficientemente grande. No hay
disponibles bloques de 128K, ni tampoco de 256K o 5 12K. Así, el bloque de 1M se divide en
dos bloques de 512K, llamados socios, uno en la dirección de memoria O y el otro en la
dirección de memoria 5 12K. Uno de ellos, el correspondiente a 0, se divide entonces en dos
bloques asociados de 256K, uno en O y otro en 256K. El bloque inferior se divide en bloques
de 128K y el correspondiente a la dirección O (señalado con A en la figura 3-9) se asigna al
proceso.
A continuación se intercambia un proceso de 35K. Esta vez, se redondea 35K a una
potencia de 2 y se ve que no hay disponibles bloques de 64K, por lo que dividimos el bloque
de 128K en dos bloques asociados de 64K, uno en 128K y otro en 192K. El bloque en 128K
se asigna al proceso, señalado con B en la figura 3-9. La tercera solicitud es de 80K.
Veamos ahora lo que ocurre al regresar (liberarse) un bloque. Imaginemos que el bloque
A de 128K (del que sólo se utilizaron 70K) se libera en este momento. Pasa a la lista de
bloques libres de 128K. Ahora, se necesita un bloque de 60K, por lo que se
hace una revisión para ver si existen disponibles bloques del tamaño adecuado. El blo-
que de 64K localizado en la dirección 192K sirve, por lo que es asignado.
Se libera entonces el bloque B. En este momento, se tienen libres un bloque de 128K en
O y un bloque de 64K en 128K. No es posible aún la fusión. Observe que incluso si el bloque
de 128K en O se hubiese dividido en un bloque de 64K en O que fuera utilizado y un bloque
libre de 64K, no se podría realizar una fusión. Al liberarse el bloque D, podemos reconstruir el
bloque de 256K en la dirección O. Por último, al liberar el bloque C, regresamos a la
configuración inicial de un solo hueco de IM.
Los sistemas asociados tienen una ventaja sobre los algoritmos que ordenan los bloques
por tamaño pero no necesariamente en direcciones múltiplos del tamaño del bloque. La
ventaja consiste en que cuando se libera un bloque de tamaño 2’~, el administrador de la
memoria tan sólo debe buscar en la lista de huecos de 2 para ver si es posible una fusión. En
los algoritmos que permiten que los bloques de memoria se dividan de formas arbitrarias, se
debe realizar una búsqueda en todas las listas de huecos. El resultado es que el sistema
asociado es muy rápido.
Por desgracia, también es demasiado ineficiente en términos del uso de memoria. El
problema proviene del hecho de que todas las solicitudes deben redondearse a una potencia de
2. Un proceso de 35K debe tener un hueco de 64K. Se desperdician 29K. Esta forma de gasto
excesivo se conoce como fragmentación interna, puesto que la memoria desperdiciada está
dentro de los segmentos asignados. En la figura 3-5 tenemos huecos entre los segmentos, pero
no existe hueco desperdiciado dentro de ellos. Esta última forma de desperdicio se conoce
como fragmentación externa o checkerboarding.
Varios autores (por ejemplo, Peterson y Norman, 1977; Kaufman, 1984) han modificado
el sistema de los asociados de varias formas, con el fin de intentar darle la vuelta a algunos de
sus problemas.

Das könnte Ihnen auch gefallen