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