12.10.2014 Views

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

SHOW MORE
SHOW LESS

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 />

menos uno <strong>de</strong> ellos está signado; en otro caso, se liberaría para que quedara sólo el nodo padre <strong>de</strong> ambos<br />

(unirían en un bloque mayor).<br />

<strong>3.</strong><strong>3.</strong><strong>3.</strong>2. Buddy System retardado<br />

Esta técnica es la que adopta SVR4. Los autores observan que UNIX exhibe, a menudo, un comportamiento<br />

estable en la <strong>de</strong>manda <strong>de</strong> memoria <strong>de</strong>l kernel, es <strong>de</strong>cir, la cantidad <strong>de</strong> <strong>de</strong>mandas para bloques <strong>de</strong> un tamaño<br />

<strong>de</strong>terminado varían lentamente en el tiempo. De esta forma, si se libera un bloque <strong>de</strong> tamaño 2 i e<br />

inmediatamente se une con su colega (buddy) en un bloque <strong>de</strong> tamaño 2 i + 1 , el kernel pue<strong>de</strong>, a continuación,<br />

hacer una solicitud <strong>de</strong> un bloque <strong>de</strong> tamaño 2 i que necesariamente divi<strong>de</strong> <strong>de</strong> nuevo el bloque mayor. Para<br />

evitar estas uniones y divisiones innecesarias, el Buddy System retardado difiere la unión hasta que parezca<br />

que sea necesaria, y entonces se une tantos bloques como sea posible.<br />

El Buddy System retardado utiliza los siguientes parámetros: (1) N i = número actual <strong>de</strong> bloques <strong>de</strong> tamaño 2 i ;<br />

(2) A i = número actual <strong>de</strong> bloques <strong>de</strong> tamaño 2 i que están asignados (ocupados); (3) G i = número <strong>de</strong> bloques<br />

<strong>de</strong> tamaño 2 i que están libres globalmente; estos son bloques elegibles para la unión; si el colega (buddy) <strong>de</strong><br />

un bloque <strong>de</strong> este tipo se convierte en un bloque libre globalmente, entonces los dos bloques se unirán en un<br />

bloque libre globalmente <strong>de</strong> tamaño 2 i + 1 . Todos los bloques libres (huecos) en el Buddy System estándar se<br />

podrían consi<strong>de</strong>rar libre globalmente; (4) L i = número actual <strong>de</strong> bloques <strong>de</strong> tamaño 2 i que están libres<br />

localmente; estos bloques no son elegibles para la unión. Aunque, el colega <strong>de</strong> estos bloques se convierta en<br />

libre, los dos bloques no se unen. Más bien, los bloques libres localmente quedan retenidos como anticipación<br />

<strong>de</strong> futuras <strong>de</strong>mandas <strong>de</strong> un bloque <strong>de</strong> ese tamaño. Se cumple la siguiente relación: N i = A i + G i + L i .<br />

En general, el Buddy System retardado trata <strong>de</strong> mantener una reserva <strong>de</strong> bloques libres localmente y<br />

solamente invoca uniones si el número <strong>de</strong> bloques libres localmente exce<strong>de</strong> un umbral. Si hay <strong>de</strong>masiados<br />

bloques libres en el siguiente nivel para satisfacer las <strong>de</strong>mandas. La mayor parte <strong>de</strong>l tiempo, mientras los<br />

bloques estén libres, no se produce la unión, para que la sobrecarga <strong>de</strong> operaciones y contabilidad se<br />

minimicen. Cuando un bloque va a ser asignado, no se distingue si se hace <strong>de</strong> entre los bloques libres local o<br />

globalmente, también esto minimiza la contabilidad. El criterio utilizado para la unión es que el número <strong>de</strong><br />

bloques libres localmente <strong>de</strong> un tamaño dado no excedan <strong>de</strong>l número <strong>de</strong> bloques asignados <strong>de</strong> este tamaño (es<br />

<strong>de</strong>cir, <strong>de</strong>be ser L i ≤ A i ). Esta es una guía razonable para restringir el crecimiento <strong>de</strong> los bloques libres<br />

localmente, confirmándose que este esquema genera un notable ahorro. Para implementar este esquema, se<br />

<strong>de</strong>fine un retraso variable según la siguiente ecuación: D i = A i – L i = N i – 2 L i – G i . A continuación se<br />

muestra el algoritmo,<br />

D i = 0; // Después <strong>de</strong> una operación el valor <strong>de</strong> D i se actualiza como sigue:<br />

if (siguiente operación es una solicitud <strong>de</strong> asignación <strong>de</strong> bloque)<br />

{<br />

if (existe algún bloque libre)<br />

{<br />

Seleccionar uno para asignarlo;<br />

if (bloque seleccionado está localmente libre)<br />

D i = D i + 2;<br />

else<br />

D i = D i + 1;<br />

}<br />

else<br />

{<br />

Conseguir dos bloques dividiendo en dos uno más gran<strong>de</strong> (operación recursiva);<br />

Asignar uno y marcar el otro libre localmente;<br />

// D i no cambia, aunque pue<strong>de</strong> cambiar a otros tamaños <strong>de</strong> bloque por la llamada<br />

recursiva<br />

}<br />

}<br />

Departamento <strong>de</strong> Lenguajes y Computación. <strong>Universidad</strong> <strong>de</strong> Almería Página <strong>3.</strong>18

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!