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

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

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

Saved successfully!

Ooh no, something went wrong!