TEMA 3. GESTIÃN DE MEMORIA - Universidad de AlmerÃa
TEMA 3. GESTIÃN DE MEMORIA - Universidad de AlmerÃa
TEMA 3. GESTIÃN DE MEMORIA - Universidad de AlmerÃa
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
Diseño <strong>de</strong> Sistemas Operativos<br />
Tema <strong>3.</strong> Gestión <strong>de</strong> Memoria<br />
a<strong>de</strong>más, junto con la velocidad <strong>de</strong> recorrido, <strong>de</strong>termina la ventana <strong>de</strong> oportunida<strong>de</strong>s <strong>de</strong> recuperar una página<br />
antes <strong>de</strong> “expulsarla” <strong>de</strong>bido a su falta <strong>de</strong> uso.<br />
<strong>3.</strong><strong>3.</strong><strong>3.</strong> Gestor <strong>de</strong> Memoria <strong>de</strong>l Kernel<br />
El kernel genera y <strong>de</strong>struye frecuentemente pequeñas tablas y buffers durante la ejecución, cada una <strong>de</strong> las<br />
cuales requiere asignación <strong>de</strong> memoria dinámica, por ejemplo, asignar objetos (estructuras <strong>de</strong> procesos,<br />
inodos, bloques <strong>de</strong> <strong>de</strong>scriptores <strong>de</strong> archivo, etc.) dinámicamente cuando se necesitan. La mayoría <strong>de</strong> estos<br />
objetos son significativamente más pequeños que el tamaño <strong>de</strong> página en las máquinas normales, y por tanto<br />
el mecanismo <strong>de</strong> paginación sería ineficaz para la asignación <strong>de</strong> memoria dinámica <strong>de</strong>l kernel. En SVR4, se<br />
utiliza una modificación <strong>de</strong>l Buddy System (sistema <strong>de</strong> colegas). En dicho sistema, el coste <strong>de</strong> asignar y<br />
liberar un bloque <strong>de</strong> memoria es bajo comparado con otras políticas (mejor ajuste o primer ajuste). No<br />
obstante, en el caso <strong>de</strong> la gestión <strong>de</strong> memoria <strong>de</strong>l kernel, las operaciones <strong>de</strong> asignación y liberación tienen que<br />
hacerse tan rápido como sea posible. El inconveniente que tiene el Buddy System es el tiempo requerido para<br />
fragmentar y unir bloques.<br />
<strong>3.</strong><strong>3.</strong><strong>3.</strong>1. Buddy System (sistema <strong>de</strong> colegas)<br />
El Buddy System es un esquema para la gestión <strong>de</strong> la partición <strong>de</strong> memoria que trata <strong>de</strong> encontrar un<br />
equilibrio entre los esquemas <strong>de</strong> partición estáticos (limitan el número <strong>de</strong> procesos activos y pue<strong>de</strong>n utilizar el<br />
espacio ineficientemente si hay poca concordancia entre los tamaños <strong>de</strong> las particiones disponibles y los<br />
tamaños <strong>de</strong> los procesos) y dinámicos (más complejo <strong>de</strong> mantener y incluye la sobrecarga <strong>de</strong> compartir).<br />
En un Buddy System, los bloques <strong>de</strong> memoria disponibles son <strong>de</strong> tamaño 2 K , para valores <strong>de</strong> K tal que L ≤ K<br />
≤ U y don<strong>de</strong>: 2 L = tamaño <strong>de</strong> bloque más pequeño asignable, 2 U = tamaño <strong>de</strong> bloque más gran<strong>de</strong> asignable<br />
(generalmente, 2 U es el tamaño <strong>de</strong> memoria completa disponible para asignación o gestión).<br />
Para empezar, el espacio entero disponible para la asignación se trata como un solo bloque <strong>de</strong> tamaño 2 U . Si<br />
se hace una solicitud <strong>de</strong> tamaño s tal que 2 U – 1 < s ≤ 2 U , entonces el bloque entero se asigna. En otro caso, el<br />
bloque se divi<strong>de</strong> en dos colegas (buddies) <strong>de</strong> igual tamaño 2 U – 1 . Si 2 U – 2 < s ≤ 2 U – 1 , entonces la solicitud se<br />
asigna a uno <strong>de</strong> los dos colegas. Si no, uno <strong>de</strong> los colegas se divi<strong>de</strong> por la mitad nuevamente. Este proceso<br />
continua hasta que el bloque más pequeño sea mayor o igual que s, generándose y asignándose a la solicitud.<br />
En cualquier instante, el Buddy System mantiene una lista <strong>de</strong> huecos (bloques no asignados) para cada<br />
tamaño 2 i . Un hueco pue<strong>de</strong> eliminarse <strong>de</strong> la lista (i + 1) dividiéndolo en dos mita<strong>de</strong>s para crear dos colegas<br />
(buddies) <strong>de</strong> tamaño 2 i en la lista i. Cuando una pareja <strong>de</strong> colegas <strong>de</strong> la lista i pasa a estar libre, se elimina <strong>de</strong><br />
la lista y se unen en un solo bloque <strong>de</strong> la lisa (i + 1). Dada una solicitud para una asignación <strong>de</strong> tamaño k, tal<br />
que 2 i – 1 < k ≤ 2 i , para encontrar un hueco <strong>de</strong> tamaño 2 i se utiliza el siguiente algoritmo recursivo:<br />
Conseguir_hueco(i)<br />
{<br />
if (i = (U + 1))<br />
Fallo;<br />
if (lista I vacía)<br />
{<br />
Conseguir_hueco(i + 1);<br />
Dividir el hueco en colegas (buddies);<br />
Poner colegas (buddies) en lista i;<br />
}<br />
Coger el primer hueco en la lista i;<br />
}<br />
La mejor estructura <strong>de</strong> datos para implementar este esquema <strong>de</strong> partición es un árbol binario, don<strong>de</strong> los nodos<br />
hoja representan la partición actual <strong>de</strong> la memoria, si dos colegas (buddies) están en nodos hoja, entonces el<br />
Departamento <strong>de</strong> Lenguajes y Computación. <strong>Universidad</strong> <strong>de</strong> Almería Página <strong>3.</strong>17