TRABAJO DE SISTEMAS OPERATIVOS
Enviado por poland6525 • 22 de Octubre de 2018 • 694 Palabras (3 Páginas) • 417 Visitas
...
break;
}
return 0;
}
7. Dibuja la jerarquía de procesos que resulta de la ejecución del siguiente código. Introduce las llamadas al sistema wait para que una vez generado el árbol de procesos los hijos sean esperados por sus respectivos padres. Además, haz que se informe de los tiempos de ejecución de las aplicaciones xload y kcalc que se generen así como del tiempo total de ejecución. Para calcular el tiempo transcurrido, puedes utilizar la función time() de la librería estándar time.h. La llamada time(NULL) devuelve los segundos transcurridos desde las 00:00:00 del 1/1/1970 hasta el instante de la llamada.
int main (int argc, char ∗argv[ ]) {
int i, j;
pid t pid, nuevo, nuevo1;
time _t ini, fin;
for (i= 0; i{
pid= getpid();
for (j= 0; j{
nuevo= fork();
if(nuevo== 0){
break;
nuevo1= fork();
if(nuevo1== 0)
execlp ("xload", "xload", NULL);
}
}
if (pid!= getpid())
execlp ("kcalc", "kcalc", NULL);
}
return 0;
}
8. Escribe un programa que genere un árbol de procesos similar al que aparece en la figura 1.1. Los valores de profundidad y anchura del árbol serán dados como parámetros de entrada por el usuario en cada ejecución. En el ejemplo, se considera que la profundidad es 5 y la anchura 3. Tu programa podrá empezar, por ejemplo, de la siguiente manera:
#include
#include
#include
int main (int argc, char ∗argv[ ]) {
int i;
int prof, anch;
if (argc!= 3) exit(0);
profundidad= atoi(argv[1]); /∗ profundidad ∗/
anchura= atoi(argv[2]); /∗ anchura ∗/
/∗ completar aquí ∗/
printf("Soy el proceso %d y mi padre es%d\n", getpid(), getppid());
sleep (2);
return 0;
}
Modifica el programa anterior para que la expansión en anchura del ´árbol se produzca sólo en aquellos niveles de profundidad par (y distinta de cero). En la figura 1.2 se muestra un ejemplo.
9. Escribe el fragmento de código que genera la jerarquía de procesos que se muestra en la figura 1.3 para profundidad n.
[pic 1]
10. Observa el siguiente fragmento de código que trata de medir el tiempo de ejecución del programa prueba.exe. Indica qué problemas se producen, por qué y cómo resolverlos.
Time_ t inicio= 0, fin= 0;
if (fork()!= 0) {
wait (NULL);
fin= time (NULL);
printf ("Tiempo empleado: %ld\n", fin-inicio);
}
else {
inicio= time (NULL);
execlp ("prueba.exe", "prueba.exe", NULL);
}
...