jueves, 24 de noviembre de 2011

JERARQUIA DE PROCESOS RESULTANTE

Estudia el siguiente codigo y escribe la jerarquia de procesos resultante.
Despues, compila y ejecuta el codigo para comprobarlo (deberas añadir llamadas al sistema getpid, getppid y wait para conseguirlo).

wait que cambia el estado del proceso padre a bloqueado hasta que el proceso hijo termine.
Se observa que los procesos terminan en el orden contrario al que se han creado, es decir, primero termina el ´ultimo proceso creado y el ´ultimo proceso en terminar es el inicial. Esto ocurre gracias a la llamada al sistema

Se observa que el proceso padre es siempre el ´ultimo en terminar. Esto es debido a que la llamada al sistema

PUBLICADO Ma. Isabel
wait, que hace que el proceso padre pase a estado bloqueado hasta que un proceso hijo termine, se encuentra dentro de un bucle que va a hacer que se llame tantas veces como procesos hijos creo.

miércoles, 23 de noviembre de 2011

ACTIVIDAD 1

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. Ademas,  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.

Código:

#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main (int argc, char *argv[]) {
int i, j;
pid_t pid, nuevo, nuevo1;
time_t ini, fin;
ini = rand()%25+1;
for (i= 0; i< 2; i++)
{ pid= getpid();
    for (j= 0; j< i+2; j++)
    { nuevo= fork();
    if(nuevo== 0){ break;
    nuevo1= fork();
    if(nuevo1== 0)
    execlp ("xload", "xload", NULL);
    }
}
if (pid!= getpid())
execlp ("kcalc", "kcalc", NULL);
}
for (i= 0; i< 2; i++)
for (j= 0; j< i+2; j++){ wait(NULL);
printf ("Tiempo en ejecucion de kcalc: %ld\n", (rand()%50+1)-ini);
}
printf ("Tiempo total: %ld\n", (rand()%25+1)-ini);
return 0;
}