12.10.2014 Views

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

SHOW MORE
SHOW LESS

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

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

Saved successfully!

Ooh no, something went wrong!