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
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
Diseño <strong>de</strong> Sistemas Operativos<br />
Tema <strong>2.</strong> Gestión <strong>de</strong> Procesos<br />
• Llamada al sistema, wait.<br />
– Si el proceso que hace wait, no tiene hijos:<br />
+ Error.<br />
– Para cada uno <strong>de</strong> sus procesos hijos zombies:<br />
+ Añadir el uso <strong>de</strong> CPU <strong>de</strong>l proceso hijo al proceso padre.<br />
+ Liberar la entrada en la tabla <strong>de</strong> procesos <strong>de</strong>l proceso hijo.<br />
– Si no tiene procesos hijos zombies:<br />
+ Evento Dormir: hasta que el proceso hijo hace exit.<br />
algoritmo wait<br />
{<br />
if (proceso no tiene hijos)<br />
Return Error;<br />
for (;;)<br />
{<br />
if (proceso que espera tiene hijos Zombies)<br />
{<br />
Tomar uno <strong>de</strong> ellos;<br />
Acumular estadísticas <strong>de</strong>l hijo en el padre;<br />
Liberar la entrada en la tabla <strong>de</strong> procesos <strong>de</strong>l proceso hijo;<br />
Devolver (ID-hijo y código <strong>de</strong>l exit);<br />
}<br />
if (proceso no tiene hijos)<br />
Return Error;<br />
Dormir a estado interrumpible (hasta que un hijo finalice);<br />
}<br />
}<br />
<strong>2.</strong>7.<strong>2.</strong>3. Ejemplo <strong>de</strong> la Sincronización <strong>de</strong> Procesos Padre e Hijo utilizando exit y wait.<br />
int pid, estado<br />
...<br />
if ((pid = fork()) == -1)<br />
// Error en la creación <strong>de</strong>l proceso hijo.<br />
else if (pid == 0)<br />
{<br />
// Código <strong>de</strong>l proceso hijo.<br />
exit(10);<br />
}<br />
else<br />
{<br />
// Código <strong>de</strong>l proceso padre<br />
pid = wait(&estado);<br />
// Cuando el proceso hijo llame a exit(), le pasará al padre el valor 10, que éste pu<strong>de</strong> recibir<br />
// a través <strong>de</strong> la variable estado (estado = 10).<br />
}<br />
<strong>2.</strong>7.3. Dormir (sleep) y Despertar (wakeup) procesos.<br />
Dormir.<br />
• Cambia el estado <strong>de</strong>l proceso <strong>de</strong> “ejecutándose en modo kernel” a “durmiendo en memoria”.<br />
Despertar.<br />
• Cambia el estado <strong>de</strong>l proceso <strong>de</strong> “dormido” (durmiendo en memoria principal o en memoria<br />
secundaria) a “listo para ejecutarse” en memoria principal o en memoria secundaria (área <strong>de</strong> swap).<br />
Departamento <strong>de</strong> Lenguajes y Computación. <strong>Universidad</strong> <strong>de</strong> Almería Página <strong>2.</strong>35