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

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

Figura <strong>3.</strong>12. Perfil <strong>de</strong> memoria.<br />

Los <strong>de</strong>scriptores se inicializan en free_area_init(). En general, la función asigna un área <strong>de</strong> memoria para<br />

mem_map y modifica start_mem. Primero pone todos los campos a 0 y a continuación establece los flags<br />

PG_DMA y PG_reserved. A continuación la función mem_init() realiza la inicialización <strong>de</strong> los <strong>de</strong>scriptores:<br />

(1) pone a 0 el flag PG_reserved <strong>de</strong> los marcos <strong>de</strong> página no reservados; (2) pone a 0 también el flag<br />

PG_DMA <strong>de</strong> las páginas con dirección física mayor que 0x1000000 (16 MBytes); y (3) pone a 1 el campo<br />

count <strong>de</strong> cada marco <strong>de</strong> página asociado a memoria dinámica y llama a la función free_page(). Esto aña<strong>de</strong> la<br />

página al Buddy system, incrementando el número <strong>de</strong> páginas libres totales ⇒ al final <strong>de</strong>l bucle,<br />

nr_free_pages contiene el número total <strong>de</strong> páginas libres en memoria dinámica.<br />

<strong>3.</strong>4.<strong>3.</strong>2. Asignación y Liberación <strong>de</strong> Marcos <strong>de</strong> Página<br />

Los marcos <strong>de</strong> página se asignan en grupos contiguos potencia <strong>de</strong> 2 ⇒ alloc_pages(gfp_mask, or<strong>de</strong>r). Es<br />

consecuencia <strong>de</strong>l Buddy system subyacente. La función <strong>de</strong> asignación más general es<br />

__get_free_pages(gfp_mask, or<strong>de</strong>r). La función get_free_page(gfp_mask) obtiene un único marco <strong>de</strong> página<br />

y lo rellena <strong>de</strong> 0’s ⇒ es la función que se empleará para asignar memoria a procesos. El campo gfp_mask es<br />

un bitmap que indica al kernel cómo buscar los marcos <strong>de</strong> página. Los marcos <strong>de</strong> página se liberan mediante<br />

la función free_pages(addr, or<strong>de</strong>r). Decrementa counter y si este es 0, libera los marcos <strong>de</strong> página.<br />

Flags <strong>de</strong>l campo gfp_mask utilizado para la búsqueda <strong>de</strong> marcos <strong>de</strong> página libres:<br />

• __GFP_WAIT: El kernel pue<strong>de</strong> <strong>de</strong>scartar contenido <strong>de</strong> páginas para liberar memoria<br />

• __GFP_IO: El kernel pue<strong>de</strong> guardar páginas en disco<br />

• __GFP_DMA: Las páginas <strong>de</strong>ben soportar DMA<br />

• __GFP_HIGH, __GFP_MED, __GFP_LOW: Prioridad<br />

En realidad en el kernel se usan valores pre<strong>de</strong>terminados <strong>de</strong> combinaciones <strong>de</strong> los anteriores flags:<br />

__GFP_WAIT __GFP_IO Prioridad<br />

GFP_ATOMIC 0 0 __GFP_HIGH<br />

GFP_BUFFER 1 0 __GFP_LOW<br />

GFP_KERNEL 1 1 __GFP_MED<br />

GFP_NFS 1 1 __GFP_HIGH<br />

GFP_USER 1 1 __GFP_LOW<br />

<strong>3.</strong>4.<strong>3.</strong><strong>3.</strong> Políticas <strong>de</strong> Asignación <strong>de</strong> Memoria<br />

Se pue<strong>de</strong> observar la asignación <strong>de</strong> memoria <strong>de</strong>s<strong>de</strong> dos puntos <strong>de</strong> vista: peticiones por parte <strong>de</strong>l kernel y por<br />

parte <strong>de</strong> procesos <strong>de</strong> usuario.<br />

El kernel: (1) Es un componente <strong>de</strong> alta prioridad, si solicita memoria no tiene sentido retardar su asignación;<br />

(2) Confía en si mismo y se asume que no tiene errores <strong>de</strong> programación. Un proceso <strong>de</strong> usuario: (1) No<br />

tiene por qué usar el espacio solicitado inmediatamente, y por el principio <strong>de</strong> localidad seguramente no lo hará,<br />

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

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

Saved successfully!

Ooh no, something went wrong!