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
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
Diseño <strong>de</strong> Sistemas Operativos<br />
Tema <strong>3.</strong> Gestión <strong>de</strong> Memoria<br />
Las funciones unuse_pte, unuse_pmd y unuse_pgd se llaman al <strong>de</strong>sactivarse un dispositivo <strong>de</strong> swap. Exploran<br />
las tablas <strong>de</strong> páginas y recargan en memoria todas las páginas presentes en el dispositivo especificado. La<br />
función unuse_vma utiliza unuse_pgd para recargar todas las páginas correspondientes a una región <strong>de</strong><br />
memoria.<br />
La función unuse_process explora la lista <strong>de</strong> regiones <strong>de</strong> memoria contenidas en el espacio <strong>de</strong><br />
direccionamiento <strong>de</strong> un proceso. Llama a unuse_vma por cada región. La función try _to_unuse se llama<br />
para recargar en memoria todas las páginas presentes en el dispositivo especificado. Explora la tabla <strong>de</strong><br />
procesos y llama a la función unuse_process para recargar el espacio <strong>de</strong> direccionamiento <strong>de</strong> cada proceso.<br />
La función sys_swapoff implementa la primitiva swapoff que <strong>de</strong>sactiva un dispositivo <strong>de</strong> swap. Primero<br />
verifica que el proceso que llama posee los privilegios necesarios, y busca el <strong>de</strong>scriptor <strong>de</strong>l dispositivo en la<br />
tabla swap_info, y lo suprime <strong>de</strong> la lista. Seguidamente llama a try_to_unuse para recargar en memoria todas<br />
las páginas guardadas en ése dispositivo. Si esto falla, el <strong>de</strong>scriptor <strong>de</strong>l dispositivo se inserta <strong>de</strong> nuevo en la<br />
lista y se <strong>de</strong>vuelve un error. En caso <strong>de</strong> éxito, se llama a la operación <strong>de</strong> archivo release asociada al<br />
dispositivo, y el <strong>de</strong>scriptor se libera.<br />
La función sys_swapon implementa la primitiva swapon que activa un dispositivo <strong>de</strong> swap. Primero verifica<br />
que el proceso que llama posee los privilegios necesarios, luego busca un <strong>de</strong>scriptor libre en la tabla<br />
swap_info, e inicializa dicho <strong>de</strong>scriptor. Seguidamente, se asigna una página <strong>de</strong> memoria, el directorio <strong>de</strong>l<br />
dispositivo <strong>de</strong> swap se lee en esta página, y se verifica la firma <strong>de</strong>l dispositivo <strong>de</strong> swap. Tras esta verificación,<br />
se efectúa un bucle con el objetivo <strong>de</strong> contar las páginas disponibles en el dispositivo, y la tabla <strong>de</strong> bytes que<br />
indica el estado <strong>de</strong> cada página se asigna e inicializa. Para terminar, el <strong>de</strong>scriptor <strong>de</strong>l dispositivo se inserta en<br />
la lista.<br />
<strong>3.</strong>4.4.5.2. Entrada/Salida <strong>de</strong> páginas <strong>de</strong> swap<br />
El archivo fuente mm/page_io.c contiene las funciones <strong>de</strong> entrada/salida <strong>de</strong> páginas sobre dispositivos <strong>de</strong><br />
swap. La función rw_swap_page lee o escribe una página en un dispositivo <strong>de</strong> swap. Verifica que el<br />
dispositivo especificado está activo, y que el número <strong>de</strong> página es válido, y a continuación bloquea la página<br />
en cuestión en el <strong>de</strong>scriptor <strong>de</strong>l dispositivo <strong>de</strong> swap. Seguidamente, comprueba el tipo <strong>de</strong>l dispositivo <strong>de</strong> swap:<br />
(1) Si se trata <strong>de</strong> un dispositivo en modo bloque, se llama a la función ll_rw_page para leer o escribir el<br />
contenido <strong>de</strong> la página. (2) Si se trata <strong>de</strong> un archivo <strong>de</strong> swap, se llama a la operación brnap asociada al inodo<br />
<strong>de</strong>l archivo para <strong>de</strong>terminar la dirección <strong>de</strong> los bloques que componen la página, y se llama a ll_rw_swap_file<br />
para leer o escribir los bloques. Esta función, <strong>de</strong>finida en el archivo fuente drivers/block/ll_rw_blk.c, genera<br />
peticiones <strong>de</strong> entradas/salidas para los bloques especificados.<br />
La función swap_after_unlock_page se llama cuando la lectura o la escritura <strong>de</strong> una página en un dispositivo<br />
<strong>de</strong> swap ha terminado, y <strong>de</strong>sbloquea la página en cuestión en el <strong>de</strong>scriptor <strong>de</strong>l dispositivo <strong>de</strong> swap. La función<br />
ll_rw_page se utiliza rara leer o escribir una página en un dispositivo en modo bloque. Bloquea la página en<br />
memoria activando el indicador PG_locked, y llama a la función brw_page para efectuar la entrada/salida.<br />
Las funciones read_swap_page y write_swap_page, <strong>de</strong>claradas en el archivo <strong>de</strong> cabecera ,<br />
llaman a rw_swap_page para efectuar una lectura o una escritura <strong>de</strong> página.<br />
La función swap_in, <strong>de</strong>finida en el archivo fuente mm/page_alloc.c, se llama para cargar una página en<br />
memoria para un proceso. Asigna una página <strong>de</strong> memoria, y llama a read_swap_page para cargar su<br />
contenido. Seguidamente, la dirección <strong>de</strong> la página se registra en la entrada <strong>de</strong> la tabla <strong>de</strong> páginas afectada.<br />
<strong>3.</strong>4.4.5.<strong>3.</strong> Eliminación <strong>de</strong> Páginas <strong>de</strong> Memoria<br />
El archivo fuente mm/vmscan.c contiene las funciones que <strong>de</strong>ci<strong>de</strong>n la eliminación <strong>de</strong> páginas <strong>de</strong> memoria y su<br />
escritura en un dispositivo <strong>de</strong> swap. La función try_to_swap_out se llama para intentar eliminar una página<br />
específica. Si la página está reservada o bloqueada, o si ha sido accedida recientemente, no se elimina <strong>de</strong> la<br />
Departamento <strong>de</strong> Lenguajes y Computación. <strong>Universidad</strong> <strong>de</strong> Almería Página <strong>3.</strong>49