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
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 />
Cuando se <strong>de</strong>vuelve un bloque al Buddy system: (1) Se cambia el bit correspondiente en la lista <strong>de</strong> su tamaño;<br />
si el resultado es 1 es que su colega (buddy) no estaba en la lista así que insertamos el bloque en la lista<br />
porque no se pue<strong>de</strong> fusionar. (2) Si el resultado es 0, su colega (buddy) estaba en la lista, así que lo extraemos<br />
<strong>de</strong> la misma y ya tenemos un bloque <strong>de</strong> mayor tamaño. Repetimos la operación en la siguiente lista,<br />
fusionando bloques hasta que al cambiar el bit, el resultado sea 1.<br />
<strong>3.</strong>4.<strong>3.</strong>5. El Slab Allocator<br />
El Buddy system asigna como mínimo una página. Sistema a<strong>de</strong>cuado para asignaciones gran<strong>de</strong>s <strong>de</strong> memoria<br />
Para asignaciones <strong>de</strong> pocos bytes, se <strong>de</strong>sperdician gran<strong>de</strong>s cantida<strong>de</strong>s <strong>de</strong> memoria. Fragmentación interna,<br />
que es provocada por una mala combinación entre el tamaño <strong>de</strong> la memoria requerida y el tamaño <strong>de</strong>l área <strong>de</strong><br />
memoria asignada para satisfacer la solicitud. Es <strong>de</strong>cir, éste es un fenómeno en el que se malgasta el área <strong>de</strong><br />
memoria <strong>de</strong> una página cuando el tamaño <strong>de</strong> memoria es más pequeño que la página.<br />
Es necesario un sistema superpuesto al Buddy system para el mejor aprovechamiento <strong>de</strong> la memoria. Linux<br />
2.0, Se <strong>de</strong>finen 13 listas <strong>de</strong> áreas <strong>de</strong> memoria (secuencias <strong>de</strong> posiciones <strong>de</strong> memoria teniendo direcciones<br />
físicas contiguas y una longitud arbitraria) don<strong>de</strong> guardar objetos <strong>de</strong> tamaños geométricamente distribuidos, <strong>de</strong><br />
32 a 131056 bytes, es <strong>de</strong>cir, el tamaño <strong>de</strong>pen<strong>de</strong> más <strong>de</strong> ser potencia <strong>de</strong> 2 que <strong>de</strong>l tamaño <strong>de</strong> los datos a<br />
almacenar. Se emplea el Buddy system tanto para asignar nuevas páginas para estas áreas como para liberar<br />
las que no son necesarias. Dentro <strong>de</strong> cada marco <strong>de</strong> página se emplea una lista dinámica para gestionar los<br />
elementos libres. Por fragmentación interna se pier<strong>de</strong> aproximadamente un 50% <strong>de</strong> la memoria.<br />
En Linux 2.2 se revisa el sistema y se aplica un algoritmo <strong>de</strong>rivado <strong>de</strong>l Slab allocator <strong>de</strong> Solaris 2.4,<br />
simplificado. Los objetivos que persigue son: (1) Acelerar las asignaciones/liberaciones <strong>de</strong> objetos y evitar<br />
fragmentación interna. (2) Se basa en que el kernel pi<strong>de</strong> y libera frecuentemente áreas <strong>de</strong> memoria pequeñas<br />
y <strong>de</strong> estructura consistente, como <strong>de</strong>scriptores <strong>de</strong> proceso, o <strong>de</strong> memoria, inodos, etc. (3) Se ven las áreas <strong>de</strong><br />
memoria que pi<strong>de</strong> el sistema como objetos que consisten en estructuras <strong>de</strong> datos y algunas funciones, como<br />
un constructor y un <strong>de</strong>structor (que no se emplean en Linux). (4) Se mantienen una serie <strong>de</strong> cachés que<br />
gestionan slabs <strong>de</strong> objetos <strong>de</strong>l mismo tipo. Habrá tantos cachés como tipos <strong>de</strong> objeto específico interese<br />
gestionar, y una caché mantiene varios slabs. (5) Un slab es una serie <strong>de</strong> marcos <strong>de</strong> página contiguos en los<br />
que se almacenan los objetos <strong>de</strong>l mismo tipo. (6) Cuando se pi<strong>de</strong> memoria para un objeto (por ejemplo un<br />
<strong>de</strong>scriptor <strong>de</strong> proceso), se obtiene <strong>de</strong> la caché correspondiente, ahorrando tiempo y evitando fragmentación<br />
interna. (7) Cuando se libera un objeto, no se <strong>de</strong>sasigna realmente la memoria sino que se marca la entrada<br />
en el slab como disponible. (8) Si no hay espacio en ningún slab <strong>de</strong> la caché para un nuevo objeto, se crea un<br />
nuevo slab. (9) Existen funciones que permiten crear una caché para objetos <strong>de</strong> un tipo específico. (10) Los<br />
objetos que se usan poco como para justificar el uso <strong>de</strong> una caché, se guardan en objetos <strong>de</strong> tamaño<br />
geométricamente distribuido como en Linux 2.0, incluso corriendo el riesgo <strong>de</strong> fragmentación interna. (11) No<br />
usar tamaños geométricamente distribuidos mejora la eficiencia <strong>de</strong> la caché hardware.<br />
El Slab allocator agrupo objetos en cachés. Cada caché es un “almacén” <strong>de</strong> objetos <strong>de</strong>l mismo tipo. Los<br />
cachés creados <strong>de</strong>l Slab allocator pue<strong>de</strong>n verse mediante /proc/slabinfo.<br />
[…]<br />
Activo Total Tamaño Paginas pps<br />
s<br />
Filp 664 690 128 23 23 1<br />
name_cache 0 4 4096 0 4 1<br />
buffer_head 54004 222440 96 1355 5561 1<br />
mm_struct 45 72 160 3 3 1<br />
vs_area_struct 1643 2840 96 42 71 1<br />
fs_cache 44 118 64 1 2 1<br />
files_cache 44 63 416 6 7 1<br />
signal_act 49 66 1312 17 22 1<br />
size-131072 (DMA) 0 0 131072 0 0 32<br />
size-131072 0 0 131072 0 0 32<br />
size-65536 (DMA) 0 0 65536 0 0 16<br />
Departamento <strong>de</strong> Lenguajes y Computación. <strong>Universidad</strong> <strong>de</strong> Almería Página <strong>3.</strong>33