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 />
hecho el rendimiento global <strong>de</strong>l sistema <strong>de</strong>pen<strong>de</strong> fuertemente <strong>de</strong> cómo <strong>de</strong> eficientemente se gestiona la<br />
memoria dinámica. Por tanto, todos los sistemas operativos multitarea actuales tratan <strong>de</strong> optimizar el uso <strong>de</strong> la<br />
memoria dinámica, asignándola sólo cuando es estrictamente necesario y liberándola tan pronto como sea<br />
posible. En esta sección <strong>de</strong>scribiremos: estructuras básicas <strong>de</strong>l kernel para gestionar la memoria dinámica<br />
<strong>de</strong>s<strong>de</strong> dos puntos <strong>de</strong> vista: asignación <strong>de</strong> memoria para el kernel y asignación <strong>de</strong> memoria para procesos,<br />
política <strong>de</strong> asignación <strong>de</strong> la memoria por parte <strong>de</strong>l kernel, el gestor <strong>de</strong> faltas <strong>de</strong> página, etc.<br />
<strong>3.</strong>4.<strong>3.</strong>1. Gestión <strong>de</strong> Marcos <strong>de</strong> Página.<br />
El kernel <strong>de</strong>be mantener el estado actual <strong>de</strong> cada marco <strong>de</strong> página ⇒ <strong>de</strong>be mantener información adicional a<br />
la que pue<strong>de</strong> guardarse en el <strong>de</strong>scriptor <strong>de</strong> las tablas <strong>de</strong> página. Se almacena información <strong>de</strong> cada página en<br />
un array (mem_map) <strong>de</strong> <strong>de</strong>scriptores <strong>de</strong> marco <strong>de</strong> página, <strong>de</strong>finidos por la estructura struct page en<br />
<br />
type<strong>de</strong>f struct page {<br />
struct list_head list;<br />
struct address_space *mapping;<br />
unsigned long in<strong>de</strong>x;<br />
struct page *next;<br />
struct page *prev;<br />
struct ino<strong>de</strong> *ino<strong>de</strong>;<br />
unsigned long offset;<br />
struct page *next_hash;<br />
atomic_t count;<br />
unsigned long flags;<br />
struct wait_queue *wait;<br />
struct page **pprev_hash:<br />
struct buffer_head *buffers;<br />
strcut list_head lru;<br />
} mem_map_t;<br />
Algunos <strong>de</strong> los campos más representativos son:<br />
• count: Es un contador <strong>de</strong> referencia <strong>de</strong> uso para la página y vale 0 si el marco <strong>de</strong> página está libre, o el<br />
número <strong>de</strong> procesos a los que ha sido asignada.<br />
• prev, next: Para insertar el <strong>de</strong>scriptor en una lista circular doblemente enlazada. El significado <strong>de</strong>pen<strong>de</strong><br />
<strong>de</strong>l uso <strong>de</strong> la página en cada momento<br />
• flags: Array <strong>de</strong> hasta 32 fIags <strong>de</strong> la forma PG_xyz que indican el estado <strong>de</strong>l marco <strong>de</strong> página<br />
Algunos <strong>de</strong> los flags más importantes son:<br />
• PG_DMA: Se pue<strong>de</strong> usar la página para DMA ISA<br />
• PG_locked: La página no acepta swap<br />
• PG_referenced: La página ha sido accedida recientemente en la caché <strong>de</strong> páginas<br />
• PG_reserved: Reservada para el kernel, o no usable<br />
• PG_slab: La página está en un slab<br />
• PG_swap_cache: La página está en la caché <strong>de</strong> swap<br />
En la siguiente figura se ilustra la memoria dinámica y los valores utilizados para referirse a ella.<br />
Departamento <strong>de</strong> Lenguajes y Computación. <strong>Universidad</strong> <strong>de</strong> Almería Página <strong>3.</strong>29