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

• SIGUSR1. Señal número 1 <strong>de</strong> usuario. Esta señal está reservada para uso <strong>de</strong>l programador.<br />

Ninguna aplicación estándar va a utilizarla y su significado es el que le quiera dar el programador<br />

en su aplicación. Su acción por <strong>de</strong>fecto es terminar el proceso.<br />

• SIGUSR<strong>2.</strong> Señal número 2 <strong>de</strong> usuario. Su significado es idéntico al <strong>de</strong> SIGUSR1.<br />

• SIGCLD o SIGCHLD. Muerte <strong>de</strong>l proceso hijo. Esta señal es enviada al proceso padre cuando<br />

alguno <strong>de</strong> sus procesos hijos termina. Esta señal es ignorada por <strong>de</strong>fecto.<br />

• SIGPWR. Fallo <strong>de</strong> alimentación. Esta señal tiene diferentes interpretaciones. En algunos sistemas<br />

es enviada cuando se <strong>de</strong>tecta un fallo <strong>de</strong> alimentación y le indica al proceso que dispone tan solo <strong>de</strong><br />

unos instantes <strong>de</strong> tiempo antes <strong>de</strong> que se produzca una caída <strong>de</strong>l sistema. En otros sistemas, esta<br />

señal es enviada, <strong>de</strong>spués <strong>de</strong> recuperarse <strong>de</strong> un fallo <strong>de</strong> alimentación, a todos aquellos procesos que<br />

estaban en ejecución y que se han podido rearrancar. En estos casos, los procesos <strong>de</strong>ben disponer<br />

<strong>de</strong> mecanismos para restaurar las posibles pérdidas producidas durante la caída <strong>de</strong> la alimentación.<br />

<strong>2.</strong>9.3. Tratamiento <strong>de</strong> las Señales.<br />

• El tratamiento <strong>de</strong> las señales <strong>de</strong>be cubrir varias etapas: (1) cómo envía el kernel señales a los<br />

procesos, (2) cómo manejan las señales los procesos y (3) cómo reacciona el proceso a las señales.<br />

Para la primera etapa, el kernel activa el bit <strong>de</strong> señal y activa la entrada <strong>de</strong>l proceso en la Tabla <strong>de</strong><br />

Procesos (<strong>de</strong> acuerdo al tipo <strong>de</strong> señal). Si el proceso esta dormido a una prioridad interrumpible el<br />

kernel lo <strong>de</strong>spierta, con lo cual finaliza el trabajo <strong>de</strong> envío <strong>de</strong> la señal. Observe que el proceso<br />

pue<strong>de</strong> “recordar” varias señales a la vez pero no cuantas instancias <strong>de</strong> la misma señal recibe.<br />

• El kernel controla la existencia <strong>de</strong> una señal cuando el proceso está regresando <strong>de</strong> modo kernel a<br />

modo usuario (final <strong>de</strong> una llamada al sistema), cuando está entrando a Ejecución en modo kernel<br />

(<strong>de</strong>s<strong>de</strong> listo pasa a Ejecución modo kernel, o <strong>de</strong>s<strong>de</strong> Listo-Requisado entra a Ejecución modo<br />

usuario) y cuando entra al estado <strong>de</strong> bloqueado (<strong>de</strong>s<strong>de</strong> Ejecución modo kernel). Obsérvese que la<br />

señal no tiene efecto instantáneo si el proceso está en modo kernel, y si el proceso está en<br />

Ejecución en modo usuario y el kernel ha ejecutado una interrupción que envía una señal al proceso<br />

el kernel reconocerá y manejará la señal cuando esté regresando <strong>de</strong> la interrupción. Es <strong>de</strong>cir, un<br />

proceso no ejecuta en modo usuario el manejo <strong>de</strong> la señal.<br />

algoritmo issig<br />

// chequeo <strong>de</strong> recepción <strong>de</strong> señales<br />

{<br />

while(bit <strong>de</strong> señal en la entrada <strong>de</strong>l proceso en la Tabla <strong>de</strong> Procesos != 0)<br />

{<br />

Buscar el número <strong>de</strong> señal enviada al proceso;<br />

if (señal es SIGCHLD)<br />

{<br />

if (ignorar SIGCHLD)<br />

Liberar las entradas <strong>de</strong> los procesos hijos Zombies en la Tabla <strong>de</strong> Procesos;<br />

else<br />

Return TRUE;<br />

}<br />

else<br />

{<br />

if (no ignorar señal)<br />

Return TRUE;<br />

}<br />

Desactivar bit <strong>de</strong> señal en la entrada <strong>de</strong>l proceso en la Tabla <strong>de</strong> Procesos;<br />

Return FALSE;<br />

}<br />

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

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

Saved successfully!

Ooh no, something went wrong!