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

posible. La función unmap_fixup proce<strong>de</strong> a la liberación <strong>de</strong> una parte <strong>de</strong> una región <strong>de</strong> memoria, cuyo<br />

<strong>de</strong>scriptor ha sido suprimido ya <strong>de</strong>l espacio <strong>de</strong> direccionamiento <strong>de</strong>l proceso actual. Pue<strong>de</strong>n producirse cuatro<br />

casos: (1) la región completa <strong>de</strong>be liberarse: se llama a la operación <strong>de</strong> memoria clase asociada; (2) una<br />

sección situada al principio <strong>de</strong> la región <strong>de</strong>be liberarse: la dirección <strong>de</strong> inicio <strong>de</strong> la región se actualiza en el<br />

<strong>de</strong>scriptor <strong>de</strong> región; (3) <strong>de</strong>be liberarse una sección situada al final <strong>de</strong> la región: la dirección <strong>de</strong> fin <strong>de</strong> la región<br />

se actualiza en el <strong>de</strong>scriptor <strong>de</strong> región; (4) <strong>de</strong>be liberarse una sección situada en medio <strong>de</strong> la región: la región<br />

se <strong>de</strong>scompone entonces en dos. Se asigna un nuevo <strong>de</strong>scriptor <strong>de</strong> región y se inicializa. El <strong>de</strong>scriptor <strong>de</strong> la<br />

región original se actualiza. Finalmente, el nuevo <strong>de</strong>scriptor se inserta en el espacio <strong>de</strong> direccionamiento<br />

llamando a insert_vm_struct. En los tres últimos casos, unmap_fixup crea un nuevo <strong>de</strong>scriptor para la región<br />

modificada, y la inserta en el espacio <strong>de</strong> direccionamiento <strong>de</strong>l proceso actual.<br />

La función do_munmap libera las regiones <strong>de</strong> memoria situadas en un intervalo especificado. Primero explora<br />

la lista <strong>de</strong> regiones <strong>de</strong> memoria contenidas en el intervalo, memoriza sus <strong>de</strong>scriptores en una lista, y los<br />

suprime <strong>de</strong>l espacio <strong>de</strong> direccionamiento <strong>de</strong>l proceso llamando a avl_remove. Tras este bucle, explora la lista<br />

<strong>de</strong> <strong>de</strong>scriptores guardados anteriormente. Por cada región se llama a la operación <strong>de</strong> memoria unmap, las<br />

páginas correspondientes se suprimen <strong>de</strong> la tabla <strong>de</strong> páginas, se llama a la función unmap_fixup, y el<br />

<strong>de</strong>scriptor <strong>de</strong> la región se libera. La función sys_munmap implementa la llamada al sistema munmap llamando<br />

simplemente a do_munmap. La implementación <strong>de</strong> la llamada al sistema mmap se encuentra en el archivo<br />

fuente para la arquitectura x86. La función old_mmap controla la vali<strong>de</strong>z <strong>de</strong><br />

sus parámetros y llama a la función do_mmap. La función sys_brk implementa la primitiva brk. Ésta verifica<br />

que la dirección pasada está situada en eL segmento <strong>de</strong> datos, y que no sobrepasa los límites impuestos al<br />

proceso. En el caso en que la dirección <strong>de</strong> fin <strong>de</strong>l segmento <strong>de</strong> datos sea disminuida, se llama a la función<br />

do_mumnap para liberar el área <strong>de</strong> memoria especificada. En el caso en que el tamaño <strong>de</strong>l segmento <strong>de</strong><br />

datos <strong>de</strong>ba incrcmentarse, se llama a la función find_vma_intersection para verificar que el área a asignar no<br />

entra en conflicto con una región existente, y seguidamente se extien<strong>de</strong> la región <strong>de</strong> memoria <strong>de</strong>l segmento<br />

llamando a la función do_mmap.<br />

<strong>3.</strong>4.<strong>3.</strong>9. Gestor <strong>de</strong> Faltas <strong>de</strong> Página<br />

El gestor <strong>de</strong> faltas <strong>de</strong> página <strong>de</strong>be distinguir la causa <strong>de</strong> la falta: (1) Error <strong>de</strong> programación. (2) Referencias a<br />

páginas legítimas <strong>de</strong>l espacio <strong>de</strong> direcciones <strong>de</strong>l proceso pero no presentes: (2.1) Por Copy-on-Write. (2.2)<br />

Por swapping o intercambio (cuando el sistema necesita marcos <strong>de</strong> página libres, Linux pue<strong>de</strong> volcar a disco<br />

parte <strong>de</strong> las páginas <strong>de</strong> datos <strong>de</strong> un proceso, luego cuando el proceso <strong>de</strong>sea continuar su ejecución necesita<br />

volver a traer a memoria principal estas páginas). Para este caso existe la función, do_swap_page, que se<br />

llama para volver a cargar en memoria el contenido <strong>de</strong> una página situada en el espacio <strong>de</strong> swap. Si una<br />

operación swapin está asociada a la región <strong>de</strong> memoria que contiene la página, se llama. En caso contrario, se<br />

llama a la función swap_in. En ambos casos, la página asignada se inserta en el espacio <strong>de</strong> direccionamiento<br />

<strong>de</strong>l proceso actual. (2.3) Porque no han sido asignadas todavía. (2.4) Expansión <strong>de</strong> pila. El gestor <strong>de</strong> falta <strong>de</strong><br />

página es do_page_fault() ⇒ el gestor compara la dirección lineal que causó el falta (cr2) con las regiones <strong>de</strong><br />

memoria <strong>de</strong>l proceso actual (current process) para <strong>de</strong>terminar qué hacer, <strong>de</strong> acuerdo con el esquema que se<br />

muestra en la siguiente figura.<br />

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

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

Saved successfully!

Ooh no, something went wrong!