Está en la página 1de 3

Universidad Técnica Federico Santa Marı́a

Campus Santiago San Joaquı́n


Sistemas operativos
2◦ semestre 2017

Ayudantı́a 3: Capı́tulo 3
Profesor: Viktor Tapia
Ayudante de cátedra: Francisco Olivares
Ayudantes de tareas: Giorgio Pellizzari y Gabriel Valenzuela

1 Ejercicios de desarrollo
1. En estructuras de datos usted aprendió (se supone) lo que era un árbol binario, entonces se
le pide que genere un código en C el cual genere una jerarquı́a de procesos que simule un
árbol binario de n niveles.

1
Universidad Técnica Federico Santa Marı́a
Campus Santiago San Joaquı́n
Sistemas operativos
2◦ semestre 2017

2. En base al siguiente código

int num;
pid_t pid;
srandom(getpid());
for(num = 0; num < 4; num++){
pid=fork();
printf("Soy el proceso de PID %d. \n", getpid());
if(pid==0)
break;
}
if(pid==0)
sleep(random()%5);
else
for(num=0; num < 4; num++)
wait(null);

a) Dibuje la jerarquı́a de procesos. Recuerde que los hijos del mismo padre van en el mismo
nivel.
b) Escriba la salida que genera el código una vez es ejecutado. Considere que el primer
proceso tiene pid = 0 y a sus hijos se le asignará el pid más cercano disponible (2, 3,
etc)
c) Describa lo más simple posible la jerarquı́a que genera el código. Recuerde hablar de la
finalización de los procesos.

2
Universidad Técnica Federico Santa Marı́a
Campus Santiago San Joaquı́n
Sistemas operativos
2◦ semestre 2017

3. Pregunta certamen 1, 2016–1, 20%: Dibujar la jerarquı́a de procesos que resulta al


ejecutar el siguiente fragmento de código. Indicar para cada nuevo proceso el valor de la
variable i y j en el momento de su creación. ¿Cuántos procesos hijos se crean?.
Recomendación: denote el fork() que crea cada proceso.

for (i=0; i<2; i++){


pid = getpid();
for (j=0; j<i+2 ; j++){
nuevo = fork(); /* 1 */
if (nuevo!= 0){
nuevo = fork(); /* 2 */
break;
}
}
if (pid != getpid())
break;
}

También podría gustarte