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

Dirección lineal<br />

Dir Global Dir Intermedio Tabla Desplazamiento<br />

Página<br />

Tabla <strong>de</strong> Páginas<br />

Directorio Global <strong>de</strong><br />

Tablas <strong>de</strong> Páginas<br />

+<br />

Directorio Intermedio<br />

<strong>de</strong> Tablas <strong>de</strong> Páginas<br />

+<br />

+<br />

CR3<br />

+<br />

Figura <strong>3.</strong>11. Mo<strong>de</strong>lo <strong>de</strong> Paginación <strong>de</strong> Linux.<br />

Linux gestiona la memoria central y las tablas <strong>de</strong> páginas utilizadas para convertir las direcciones lineales<br />

(virtuales) en direcciones físicas. Implementa una gestión <strong>de</strong> la memoria que es ampliamente in<strong>de</strong>pendiente<br />

<strong>de</strong>l procesador sobre el que se ejecuta. En realidad, la gestión <strong>de</strong> la memoria implementada por Linux<br />

consi<strong>de</strong>ra que dispone <strong>de</strong> una tabla <strong>de</strong> páginas a tres niveles: (1) directorio global <strong>de</strong> tablas <strong>de</strong> páginas (page<br />

global dirertory) cuyas entradas contienen las direcciones <strong>de</strong> páginas que contienen tablas intermedias; (2)<br />

directorio intermedio <strong>de</strong> tablas <strong>de</strong> páginas (page middle directory) cuyas entradas contienen las direcciones<br />

<strong>de</strong> páginas que contienen tablas <strong>de</strong> páginas; (3) las tablas <strong>de</strong> páginas (page table) cuyas entradas contienen<br />

las direcciones <strong>de</strong> páginas <strong>de</strong> memoria que contienen el código o los datos utilizados por el kernel o los<br />

procesos <strong>de</strong> usuario. Evi<strong>de</strong>ntemente, este mo<strong>de</strong>lo no siempre correspon<strong>de</strong> al procesador sobre el cual Linux<br />

se ejecuta (los procesadores i386, por ejemplo, utilizan una tabla <strong>de</strong> páginas que sólo posee dos niveles). El<br />

kernel efectúa una correspon<strong>de</strong>ncia entre el mo<strong>de</strong>lo implementado por el procesador y el mo<strong>de</strong>lo <strong>de</strong> Linux.<br />

En los procesadores i386, por ejemplo, el kernel consi<strong>de</strong>ra que el directorio intermedio <strong>de</strong> tablas <strong>de</strong> páginas<br />

sólo contiene una entrada.<br />

La MMU <strong>de</strong> reinicializa con un nuevo directorio <strong>de</strong> tablas <strong>de</strong> páginas para cada proceso. Así se consiguen<br />

aislar espacios <strong>de</strong> direcciones. Se emplean los bits User/Supervisor y Read/Write para la protección. Se<br />

emplean los anteriores bits junto con los bits Dirty y Accessed para manejar las diferentes posibilida<strong>de</strong>s <strong>de</strong><br />

falta <strong>de</strong> página. Linux <strong>de</strong>pen<strong>de</strong> fuertemente <strong>de</strong> la paginación para la gestión <strong>de</strong> procesos. De hecho, la<br />

traducción automática <strong>de</strong> dirección lineal a dirección física hace posible los siguientes objetivos: (1) Asignar<br />

un espacio <strong>de</strong> direcciones físicas diferentes a cada proceso, asegurando una protección eficiente ante errores<br />

<strong>de</strong> direccionamiento. (2) Distinguir páginas (grupos <strong>de</strong> datos) <strong>de</strong> marcos <strong>de</strong> páginas (direcciones físicas en<br />

memoria principal). Esto permite a la misma página que se almacene en un marco <strong>de</strong> página, entonces<br />

guardar en disco y <strong>de</strong>spués recargarla en un marco <strong>de</strong> página diferente. Esto es muy importante para el<br />

mecanismo <strong>de</strong> memoria virtual.<br />

En Linux el espacio <strong>de</strong> direcciones lineales se divi<strong>de</strong> en dos partes: (1) Direcciones lineales <strong>de</strong>s<strong>de</strong> 0x0000000<br />

a PAGE_OFFSET – l, accesibles en cualquier modo (usuario o kernel). (2) Direcciones lineales <strong>de</strong>s<strong>de</strong><br />

PAGE_OFFSET hasta 0xffffffff, sólo en modo kernel. Generalmente PAGE_OFFSET se inicializa a<br />

0xc0000000 (3Gb). Las primeras 768 entradas <strong>de</strong>l directorio <strong>de</strong> tablas <strong>de</strong> páginas (que mapean los primeros<br />

3Gb) <strong>de</strong>pen<strong>de</strong>n <strong>de</strong> cada proceso. El resto <strong>de</strong> entradas son las mismas para todos los procesos. El mapeado<br />

final proyecta las direcciones lineales empezando en PAGE_OFFSET en direcciones físicas empezando en 0.<br />

Toda la memoria física <strong>de</strong>be ser accesible por el kernel. Éste mantiene un conjunto <strong>de</strong> tablas <strong>de</strong> páginas para<br />

su propio uso, cuya raíz es el master kernel Page Global Directory. Después <strong>de</strong> la inicialización <strong>de</strong>l sistema<br />

este conjunto <strong>de</strong> tablas <strong>de</strong> páginas no son utilizadas nunca por ningún proceso o thread <strong>de</strong>l kernel.<br />

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

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

Saved successfully!

Ooh no, something went wrong!