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

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

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

Saved successfully!

Ooh no, something went wrong!