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 />
• Si el proceso lo <strong>de</strong>spertó una señal.<br />
– Elimina el proceso <strong>de</strong> la cola <strong>de</strong> procesos dormidos.<br />
– Restaura el nivel <strong>de</strong> ejecución <strong>de</strong>l procesador al valor inicial.<br />
– Restaura contexto (longjmp, que restaura el entorno salvado por setjmp).<br />
• Si no hay señales pendientes.<br />
– Cambio <strong>de</strong> contexto y pasa a dormir.<br />
– Cuando <strong>de</strong>spierta, el kernel lo planificará en algún momento (scheduler).<br />
– Su ejecución continuará justo a partir <strong>de</strong> este momento.<br />
+ Si no hay señales pendientes ⇒ retorno normal.<br />
* Restaura el nivel <strong>de</strong> ejecución <strong>de</strong>l procesador al valor inicial.<br />
* Retorna.<br />
algoritmo sleep(dirección_bloqueo, prioridad)<br />
{<br />
Subir nivel <strong>de</strong> ejecución (todas las interrupciones;)<br />
Estado_Proceso = sleep;<br />
Colocar proceso en tablas <strong>de</strong> bloqueo (usar dirección_bloqueo);<br />
Salvar dirección en la Tabla <strong>de</strong> Procesos;<br />
Almacenar el nivel <strong>de</strong> prioridad en la Tabla <strong>de</strong> Procesos;<br />
if (proceso es No interrumpible)<br />
{<br />
Hacer cambio <strong>de</strong> contexto;<br />
// cuando el proceso <strong>de</strong>spierte lo hará en este punto<br />
Restaurar nivel <strong>de</strong> ejecución <strong>de</strong>l procesador al valor antes <strong>de</strong> dormir;<br />
Return 0;<br />
}<br />
// Aquí el proceso duerme a un a prioridad interrumpible<br />
if (no hay señales pendientes para este proceso)<br />
}<br />
Hacer cambio <strong>de</strong> contexto;<br />
// cuando el proceso <strong>de</strong>spierte lo hará en este punto<br />
if (no hay señales pendientes para este proceso)<br />
{<br />
Restaurar nivel <strong>de</strong> ejecución <strong>de</strong>l procesador al valor antes <strong>de</strong> dormir;<br />
Return 0;<br />
}<br />
Retirar proceso <strong>de</strong> la colas <strong>de</strong> bloqueo;<br />
Restaurar nivel <strong>de</strong> ejecución <strong>de</strong>l procesador al valor antes <strong>de</strong> dormir;<br />
if (prioridad <strong>de</strong>l proceso permite respon<strong>de</strong>r a señales)<br />
Return 1;<br />
else<br />
Hacer longjmp;<br />
Departamento <strong>de</strong> Lenguajes y Computación. <strong>Universidad</strong> <strong>de</strong> Almería Página <strong>2.</strong>38