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

– Reasignar regiones <strong>de</strong> memoria.<br />

– Vincular / <strong>de</strong>svincular (asociar / <strong>de</strong>sligar) una región al espacio <strong>de</strong> memoria <strong>de</strong> un proceso.<br />

Asociar ⇒ fijar el espacio <strong>de</strong> direcciones <strong>de</strong>l proceso, completando la pregion, formando<br />

una nueva tripleta y la tabla <strong>de</strong> páginas.<br />

– Cambiar el tamaño <strong>de</strong> una región.<br />

– Duplicar el contenido <strong>de</strong> una región.<br />

– Modificar las protecciones asociadas a regiones <strong>de</strong> memoria.<br />

– Cargar una región con un ejecutable.<br />

Algunos <strong>de</strong> los algoritmos que realizar las operaciones sobre regiones son los siguientes:<br />

• Asignar una Región. El kernel asigna una región (allocreg) en las llamadas al sistema fork, exec y<br />

shmget (shared memory). Con pocas excepciones cada proceso está asociado con un archivo<br />

ejecutable como resultado <strong>de</strong> una exec, entonces la región se asocia al i-nodo (con ello se<br />

i<strong>de</strong>ntificará una región que se <strong>de</strong>see compartir y ya se encuentre cargada). El contador <strong>de</strong>l i-nodo se<br />

incrementa para evitar que por ejemplo el ejecutable sea borrado mientras va a ser utilizado.<br />

algoritmo allocreg(i-nodo, tipo)<br />

{<br />

Retirar primera región <strong>de</strong> libres;<br />

Asignar tipo <strong>de</strong> región e i-nodo;<br />

if (i-nodo)<br />

Incrementar contador <strong>de</strong> referencias en inodo;<br />

Insertar la región en lista <strong>de</strong> activas;<br />

Return región bloqueada;<br />

}<br />

• Asociar una Región a un Proceso. En las llamadas al sistema fork, exec y shmget el kernel asocia<br />

el espacio <strong>de</strong> direcciones <strong>de</strong> un proceso con una región vía este algoritmo (attachreg). La región<br />

pue<strong>de</strong> ser nueva o ya existir (shared). La región a ser asociada al proceso lo será en una dirección<br />

virtual para el proceso, por lo que será necesario controlar la legalidad (tamaño final <strong>de</strong>l espacio <strong>de</strong><br />

direcciones <strong>de</strong>l proceso).<br />

algoritmo attachreg(region, proceso, dir_Virtual, tipo)<br />

{<br />

Asignar una tabla <strong>de</strong> pregion para el proceso;<br />

Inicializar tabla <strong>de</strong> pregion;<br />

Puntero a la región;<br />

Tipo <strong>de</strong> región;<br />

Dirección virtual <strong>de</strong> la región para el proceso;<br />

Controlar legalidad <strong>de</strong> dir_Virtual, tamaño <strong>de</strong> región;<br />

Incrementar contador <strong>de</strong> referencias a la región;<br />

Incrementar tamaño <strong>de</strong>l proceso <strong>de</strong> acuerdo a la región asociada;<br />

Inicializar registros hardware para el proceso (tripleta);<br />

Return (tabla pregion);<br />

}<br />

• Cambio <strong>de</strong> tamaño <strong>de</strong> una región. Un proceso pue<strong>de</strong> expandir o contraer su espacio virtual con la<br />

llamada al sistema sbrk, aunque la pila <strong>de</strong>l proceso lo hace automáticamente <strong>de</strong> acuerdo a la<br />

profundidad en que se pue<strong>de</strong>n anidar llamadas al sistema. Internamente la función sbrk llama al<br />

algoritmo growreg para cambiar el tamaño. Cuando una región se expan<strong>de</strong> el kernel <strong>de</strong>be asegurar<br />

que no se solapen regiones o que no se superen los límites impuestos a los procesos. Las regiones<br />

compartidas no pue<strong>de</strong>n ser expandidas sin causar efectos laterales en los otros procesos, por esta<br />

razón kernel usa growreg en las regiones privadas (datos y automáticamente en la pila). Se asignan<br />

tablas <strong>de</strong> páginas (<strong>de</strong>pendiente <strong>de</strong>l mo<strong>de</strong>lo usado, programa entero, <strong>de</strong>manda <strong>de</strong> páginas, etc). Debe<br />

asegurarse que existe memoria antes <strong>de</strong> hacer la llamada.<br />

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

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

Saved successfully!

Ooh no, something went wrong!