Fork en UNIX

Fork en UNIX

de German Adolfo Faller Farias -
Número de respuestas: 3

en las diapositivas del curso tenemos el ejemplo:

int main() {

/* crea un nuevo proceso */

pid_t pid = fork();


if (pid == 0) /* proceso hijo */

execlp("/bin/ls", "ls", NULL);

else { /* padre */

wait(NULL);

printf("Child Complete");

exit(0);

}

}


Y ademas el texto:

– UNIX provee el system call fork para la creación de un nuevo proceso.

– La invocación a esta función le retorna al padre el número de process id del hijo recién creado y al hijo el valor 0. El hijo comienza su ejecución en el retorno del fork.


Lo que no está claro, o no encontre es quien se queda con el procesador luego del fork(), ¿el que acaba de nacer o sigue ejecutando el padre?

En respuesta a German Adolfo Faller Farias

Re: Fork en UNIX

de Martin Vidal Perez -

Que proceso se queda con el procesador depende del planificador del SO, no de la implementacion del fork.

En respuesta a Martin Vidal Perez

Re: Fork en UNIX

de German Adolfo Faller Farias -

Tiene sentido, muchas gracias. 


En el caso que el planificador sea SJF expropiativo, capaz el hijo es mas corto, entonces empezaria a ejecutar él.


En el caso que el planificador sea RR, si al proceso padre no se le ha acabado el cuanto, puede seguir ejecutando el padre.


¿Esto es asi?

En respuesta a German Adolfo Faller Farias

Re: Fork en UNIX

de Jorge Merlino -

En general cuando se usa RR el cuanto restante del padre se reparte entre el padre y el hijo. De otra forma podés ganar tiempo creando hijos y continuando la ejecución en uno de ellos. Pero en definitiva depende del SO quien ejecuta primero, no es parte de la semántica del fork.