Está en la página 1de 1

766 CASO DE ESTUDIO 1: LINUX CAPÍTULO 10

administra la memoria física de tal forma que pueda adquirir una pieza de memoria de un tamaño
arbitrario cuando lo desee. El algoritmo que lo utiliza se conoce como algoritmo de colegas (buddy
algorithm), y lo analizaremos a continuación.

Mecanismos de asignación de memoria

Linux proporciona varios mecanismos para asignar la memoria. El mecanismo principal para asig-
nar nuevos marcos de páginas de memoria física es el asignador de páginas, el cual opera median-
te el uso del conocido algoritmo de colegas.
La idea básica para administrar un trozo de la memoria es la siguiente. Al principio, la memo-
ria cosiste en una sola pieza contigua, de 64 páginas en el ejemplo simple de la figura 10-17(a).
Cuando llega una petición de memoria, primero se redondea a una potencia de 2, por ejemplo, ocho
páginas. Después, el trozo de memoria completo se divide a la mitad, como se muestra en (b). Co-
mo cada una de estas piezas todavía es muy grande, la pieza inferior se divide de nuevo a la mitad
(c) y se vuelve a dividir (d). Ahora tenemos un trozo del tamaño correcto, por lo que se asigna al
proceso que hizo la llamada, como se muestra sombreado en (d).

32 32 32 32 32 32 32 32

64
8 8 8 8
16 16 16 4 4 4
8 4 4 4
32
8 8 8 8 8
16 16
8 8 8 8 8

(a) (b) (c) (d) (e) (f) (g) (h) (i)

Figura 10-17. Operación del algoritmo de colegas.

Ahora suponga que llega una segunda petición de ocho páginas. Ésta se puede satisfacer de ma-
nera directa (e). En este punto llega una tercera petición de cuatro páginas. El trozo más pequeño
disponible se divide (f) y se reclama la mitad del mismo (g). Después se libera el segundo de los
trozos de 8 páginas (h). Por último, se libera el otro trozo de ocho páginas. Como los dos trozos de
ocho páginas adyacentes que se acaban de liberar provienen del mismo trozo de 16 páginas, se com-
binan para obtener de vuelta el trozo de 16 páginas (i).
Linux utiliza el algoritmo de colegas para administrar la memoria, con la característica adicio-
nal de que tiene un arreglo en el que el primer elemento es la cabeza de una lista de bloques de una
unidad de tamaño 1, el segundo elemento es la cabeza de una lista de bloques de unidades de tama-
ño 2, el siguiente elemento apunta a los bloques de 4 unidades, y así en lo sucesivo. De esta forma
se puede encontrar con rapidez un bloque de cualquier potencia de 2.
Este algoritmo produce una fragmentación interna considerable, ya que si se desea un trozo de
65 páginas, hay que pedirlo y se obtiene un trozo de 128 páginas.

También podría gustarte