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

• 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

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

Saved successfully!

Ooh no, something went wrong!