[Ej 2 examen julio 2017]

[Ej 2 examen julio 2017]

de Leonela Ruth Pereira Perez -
Número de respuestas: 1

Buen día,

tengo algunas dudas respecto a la corrección...

  • en la parte a) el proceso P4 inicia en 20, no debería iniciar en el mismo momento que P3, o sea, en 15?
  • en la parte c) el proceso P1, porque ejecuta los dos wait() -tiempos 40 y 45- y luego recién se bloquea? no debería ejecutar el primer wait(), bloquearse hasta que termine P3, luego ejecutar el segundo wait() y enseguida finalizar?

gracias!!
En respuesta a Leonela Ruth Pereira Perez

Re: [Ej 2 examen julio 2017]

de Santiago Iturriaga -

Hola:

Respondo abajo.

"en la parte a) el proceso P4 inicia en 20, no debería iniciar en el mismo momento que P3, o sea, en 15?"

La forma de crear procesos es mediante la operación fork() que los crea uno a uno. Por ser un sistema con un único procesador, P3 y P4 necesariamente ingresarán al sistema en instantes de tiempo diferentes, uno cuando P1 ejecuta su segundo fork() y el otro cuando P2 ejecuta su único fork(). Al tener un único procesador en el sistema no hay posibilidad de ejecutar dos operaciones fork simultáneamente por lo nunca puede ingresar más de un proceso en un instante de tiempo dado.

"en la parte c) el proceso P1, porque ejecuta los dos wait() -tiempos 40 y 45- y luego recién se bloquea? no debería ejecutar el primer wait(), bloquearse hasta que termine P3, luego ejecutar el segundo wait() y enseguida finalizar?"

Así es como funciona la operación wait según el manual de Linux:
These system calls are used to wait for state changes in a child of the calling process, and obtain information about the child whose state has changed. A state change is considered to be: the child terminated; the child was stopped by a signal; or the child was resumed by a signal. In the case of a terminated child, performing a wait allows the system to release the resources associated with the child. If a child has already changed state, then these calls return immediately. Otherwise, they block until either a child changes state or a signal handler interrupts the call.

Es decir que wait() selecciona un hijo ya finalizado y retorna inmediatamente, o espera por la finalización de algún hijo y selecciona el primero que termine. El hijo seleccionado es quitado del sistema por el wait de forma de no volver a seleccionar ese hijo en la siguiente invocación de un wait(). En el caso de nuestro ejercicio, para cuando se ejecuta el wait() de t=40 y t=45 los procesos P2 y P4 ya habían finalizado por lo que la operación no se bloquea.

Saludos,
Santiago.