TEMA 2. GESTIÃN DE PROCESOS - Universidad de AlmerÃa
TEMA 2. GESTIÃN DE PROCESOS - Universidad de AlmerÃa
TEMA 2. GESTIÃN DE PROCESOS - 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>2.</strong> Gestión <strong>de</strong> Procesos<br />
– Tabla <strong>de</strong> páginas gestionadas por Linux ⇒ 3 niveles. Linux gestiona la memoria central y<br />
las tablas <strong>de</strong> páginas utilizadas para convertir las direcciones virtuales en direcciones físicas.<br />
Implementa una gestión <strong>de</strong> la memoria que es ampliamente in<strong>de</strong>pendiente <strong>de</strong>l procesador<br />
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:<br />
+ El directorio global <strong>de</strong> tablas páginas (page global directory) cuyas entradas contienen<br />
las direcciones <strong>de</strong> páginas que contienen tablas intermedias.<br />
+ El directorio intermedio <strong>de</strong> tablas páginas (page middle directory) cuyas entradas<br />
contienen las direcciones <strong>de</strong> las páginas que contienen las tablas <strong>de</strong> páginas.<br />
+ Las tablas <strong>de</strong> páginas (page table) cuyas entradas contienen las direcciones <strong>de</strong> páginas<br />
<strong>de</strong> memoria que contienen el código o los datos utilizados por el kernel o los procesos<br />
<strong>de</strong> usuario.<br />
Este mo<strong>de</strong>lo no siempre se correspon<strong>de</strong> al procesador sobre el cual Linux se ejecuta (los<br />
procesadores x86, utilizan una tabla <strong>de</strong> páginas que sólo posee dos niveles). El kernel efectúa<br />
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 x86, el kernel consi<strong>de</strong>ra que la tabla intermedia sólo tiene una entrada).<br />
• Segmentación.<br />
– La memoria virtual es unidimensional ya que las direcciones van <strong>de</strong>s<strong>de</strong> 0 hasta la dirección<br />
máxima, una dirección tras otra.<br />
– Segmentos ⇒ Espacio <strong>de</strong> direcciones completamente in<strong>de</strong>pendientes, cada segmento es una<br />
secuencia lineal <strong>de</strong> direcciones, <strong>de</strong>s<strong>de</strong> 0 hasta algún máximo. La longitud <strong>de</strong> cada segmento<br />
pue<strong>de</strong> ser cualquiera <strong>de</strong>s<strong>de</strong> 0 hasta un máximo permitido y pue<strong>de</strong> cambiar <strong>de</strong> longitud en<br />
tiempo <strong>de</strong> ejecución.<br />
– La protección tiene sentido en una memoria segmentada, ya que cada segmento contiene<br />
sólo una clase <strong>de</strong> objetos y estos a su vez pue<strong>de</strong>n estar en diferentes páginas.<br />
– La implementación <strong>de</strong> la segmentación difiere <strong>de</strong> la paginación en el sentido <strong>de</strong> que el<br />
tamaño <strong>de</strong> la página es fijo pero el <strong>de</strong> los segmentos no.<br />
– Segmentación con paginación (Pentium <strong>de</strong> Intel). 16K segmentos in<strong>de</strong>pendientes cada uno<br />
con hasta 1000 millones <strong>de</strong> palabras <strong>de</strong> 32 bits. El funcionamiento <strong>de</strong> la memoria virtual<br />
Pentium esta basada en 2 tablas:<br />
+ LDT (tabla <strong>de</strong> <strong>de</strong>scriptores <strong>de</strong> segmentos local) ⇒ una para cada proceso y <strong>de</strong>scribe<br />
los segmentos locales a cada proceso (código, datos y pila).<br />
+ GDT (tabla <strong>de</strong> <strong>de</strong>scriptores <strong>de</strong> segmentos global) ⇒ tabla compartida por todos los<br />
procesos e incluye todos los segmentos <strong>de</strong>l sistema.<br />
– Linux utiliza el mecanismo <strong>de</strong> segmentación sobre Pentium para separar las zonas <strong>de</strong><br />
memoria asignadas al kernel y a los procesos, <strong>de</strong> este modo el código y los datos se protegen<br />
<strong>de</strong> los accesos erróneos y mal intencionados por parte <strong>de</strong> procesos en modo usuario.<br />
• El sistema contiene un conjunto <strong>de</strong> tripletas <strong>de</strong> registros <strong>de</strong> gestión <strong>de</strong> memoria.<br />
– Primer registro ⇒ dirección <strong>de</strong> la tabla <strong>de</strong> páginas en memoria física.<br />
– Segundo registro ⇒ primera dirección virtual accesible vía la tripleta.<br />
– Tercer registro ⇒ información <strong>de</strong> control.<br />
+ Número <strong>de</strong> páginas <strong>de</strong> la tabla <strong>de</strong> páginas.<br />
+ Permisos <strong>de</strong> acceso a las páginas (sólo-lectura, lectura-escritura).<br />
• Cuando el kernel prepara un proceso para su ejecución ⇒ carga el conjunto <strong>de</strong> tripletas <strong>de</strong> registros<br />
<strong>de</strong> gestión <strong>de</strong> memoria con los datos correspondientes almacenados en las entradas en la pregion.<br />
• Cuando un proceso intenta acce<strong>de</strong>r a una dirección que está:<br />
– Fuera <strong>de</strong> su espacio <strong>de</strong> direccionamiento.<br />
– No tiene permiso <strong>de</strong> acceso.<br />
Entonces el sistema operativo genera una excepción.<br />
Departamento <strong>de</strong> Lenguajes y Computación. <strong>Universidad</strong> <strong>de</strong> Almería Página <strong>2.</strong>16