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