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