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

• 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

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

Saved successfully!

Ooh no, something went wrong!