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 />
libre (si está a 0). Esta tabla se inicializa a partir <strong>de</strong> la que se encuentra en el directorio <strong>de</strong>l dispositivo <strong>de</strong><br />
swap. En las entradas/salidas sobre el dispositivo, el bit correspondiente se posiciona a 1 para impedir<br />
cualquier otra lectura o escritura durante la entrada/salida.<br />
<strong>3.</strong>4.4.4.<strong>3.</strong> Direcciones <strong>de</strong> Entradas <strong>de</strong>l swap<br />
Cuando una página se escribe en un dispositivo <strong>de</strong> swap, se le atribuye una dirección. Esta dirección combina<br />
el número <strong>de</strong>l dispositivo <strong>de</strong> swap y el índice <strong>de</strong> la página utilizada en el dispositivo. Varias macros,<br />
<strong>de</strong>claradas en el archivo <strong>de</strong> cabecera , manipulan estas direcciones: (1) SWP_ENTRY<br />
(Combina un número <strong>de</strong> dispositivo y un índice <strong>de</strong> página para formar una dirección <strong>de</strong> entrada <strong>de</strong> swap); (2)<br />
SWP_TYPE (Devuelve el número <strong>de</strong>l dispositivo correspondiente a una dirección <strong>de</strong> entrada <strong>de</strong> swap); (3)<br />
ISWP_OFFSET (Devuelve el índice <strong>de</strong> la página correspondiente a una dirección <strong>de</strong> entrada <strong>de</strong> swap).<br />
Cuando una página <strong>de</strong>be <strong>de</strong>scartarse <strong>de</strong> la memoria, se le asigna una página en un dispositivo <strong>de</strong> swap, y la<br />
dirección <strong>de</strong> dicha página se memoriza para que Linux pueda recargar la página posteriormente. En lugar <strong>de</strong><br />
utilizar una tabla que establezca una correspon<strong>de</strong>ncia entre las direcciones <strong>de</strong> páginas <strong>de</strong> memoria y las<br />
direcciones <strong>de</strong> entradas <strong>de</strong> swap, Linux utiliza un método original: (1) Cuando una página <strong>de</strong> memoria se<br />
<strong>de</strong>scarta, la dirección <strong>de</strong> la entrada <strong>de</strong> swap asignada se guarda en la tabla <strong>de</strong> páginas, en lugar <strong>de</strong> la<br />
dirección física <strong>de</strong> la página. Esta dirección está concebida para indicar al procesador que la página no está<br />
presente en memoria. (2) Cuando se efectúa un acceso <strong>de</strong> memoria sobre una página que se ha guardado en<br />
un dispositivo <strong>de</strong> swap, el procesador <strong>de</strong>tecta que la página no está presente en memoria y <strong>de</strong>senca<strong>de</strong>na una<br />
interrupción. Al tratar esta interrupción, Linux extrae la dirección <strong>de</strong> entrada <strong>de</strong> swap <strong>de</strong> la entrada<br />
correspondiente <strong>de</strong> la tabla <strong>de</strong> páginas, y utiliza esta dirección para localizar la página en el swap.<br />
<strong>3.</strong>4.4.4.4. Selección <strong>de</strong> páginas a <strong>de</strong>scartar<br />
Con el objetivo <strong>de</strong> <strong>de</strong>scartar páginas <strong>de</strong> la memoria, se ejecuta el proceso kswapd. Este proceso se lanza al<br />
arrancar el sistema y se ejecuta en modo kernel. Es más o menos equivalente al proceso bdflush, <strong>de</strong>scrito al<br />
hablar <strong>de</strong>l buffer caché. La función <strong>de</strong>l proceso kswapd es <strong>de</strong>scartar las páginas inútiles <strong>de</strong> la memoria. La<br />
mayor parte <strong>de</strong>l tiempo, kswapd se duerme y se <strong>de</strong>spierta cuando el kernel se queda sin memoria. Entonces<br />
explora la lista <strong>de</strong> proceso e intenta <strong>de</strong>scartar páginas no utilizadas.<br />
Con el objetivo <strong>de</strong> <strong>de</strong>terminar las páginas <strong>de</strong> memoria no utilizadas, el kernel emplea el campo age <strong>de</strong>l<br />
<strong>de</strong>scriptor <strong>de</strong> página <strong>de</strong> memoria. Este contador se incrementa cuando se utiliza la página, y se <strong>de</strong>crementa<br />
cuando <strong>de</strong>ja <strong>de</strong> utilizarse. Sólo las páginas que poseen un valor <strong>de</strong>l campo age nulo pue<strong>de</strong>n <strong>de</strong>scartarse <strong>de</strong> la<br />
memoria.<br />
<strong>3.</strong>4.4.5. Gestión <strong>de</strong>l swap, Perspectiva Detallada <strong>de</strong> la Implementación<br />
<strong>3.</strong>4.4.5.1. Gestión <strong>de</strong> los Dispositivos <strong>de</strong> swap<br />
El archivo fuente mm/swapfile.c contiene las funciones que gestionan los archivos o dispositivos utilizados<br />
para guardar las páginas <strong>de</strong>scargadas <strong>de</strong> la memoria.<br />
La tabla swap_info contiene las características <strong>de</strong> los dispositivos <strong>de</strong> swap activos. La variable swap_list<br />
contiene el índice <strong>de</strong>l dispositivo al que está asociada la prioridad más importante. La función<br />
scan_swap_map busca una página disponible en el dispositivo especificado. Explora la tabla <strong>de</strong> bytes que<br />
indican el estado <strong>de</strong> las páginas y <strong>de</strong>vuelve el número <strong>de</strong> una página disponible.<br />
La función get_swap_page se llama para asignar una página en un dispositivo <strong>de</strong> swap. Explora la lista <strong>de</strong><br />
dispositivos disponibles y llama a scan_swap_map para cada dispositivo. Cuando se encuentra una página, se<br />
<strong>de</strong>vuelve su dirección <strong>de</strong> swap. La función swap_free se llama para liberar una página en un dispositivo <strong>de</strong><br />
swap. Decrementa el byte que contiene el número <strong>de</strong> referencias a la página.<br />
Departamento <strong>de</strong> Lenguajes y Computación. <strong>Universidad</strong> <strong>de</strong> Almería Página <strong>3.</strong>48