ClubEnsayos.com - Ensayos de Calidad, Tareas y Monografias
Buscar

TRABAJO DE SISTEMAS OPERATIVOS


Enviado por   •  29 de Mayo de 2017  •  Documentos de Investigación  •  1.572 Palabras (7 Páginas)  •  451 Visitas

Página 1 de 7

TRABAJO DE SISTEMAS OPERATIVOS

Procesos e Hilos

1.1. Procesos

1. Observa el siguiente código y escribe la jerarquía de procesos resultante.

#include

#include

#include

#include

#include

int main (int argc, char argv[ ]) {

int num;

pid t pid;

for (num= 0; num< 3; num++) {

pid= fork();

printf ("Soy el proceso de PID %d y mi padre tiene%d de PID.\n",

getpid(), getppid());

if (pid!= 0)

break;

srandom(getpid());

sleep (random() %3);

}

if (pid!= 0)

        printf ("Fin del proceso de PID %d.\n", wait (NULL));

return 0;

}

Ahora compila y ejecuta el código para comprobarlo. Contesta a las siguientes preguntas:

¿Por qué aparecen mensajes repetidos?

Presta atención al orden de terminación de los procesos,

¿Qué observas?

¿Por qué?

2. Observa el siguiente código y escribe la jerarquía de procesos resultante.

#include

#include

#include

#include

#include

int main (int argc, char argv[ ]) {

int num;

pid _t pid;

srandom(getpid());

for (num= 0; num< 3; num++) {

        pid= fork();

        printf ("Soy el proceso de PID %d y mi padre tiene%d de PID.\n",

                getpid(), getppid());

        if (pid== 0)

                break;

}

if (pid== 0)

        sleep(random() %5);

else

        for (num= 0; num< 3; num++)

                printf ("Fin del proceso de PID %d.\n", wait (NULL));

                return 0;

}

Ahora compila y ejecuta el código para comprobarlo. Presta atención al orden de terminación de los procesos, ¿qué observas? ¿Por qué?

3. Dibuja la estructura del árbol de procesos que obtendríamos al ejecutar el siguiente fragmento de código:

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

        nuevo= fork(); /1 /

        if (nuevo== 0)

                break;

}

nuevo= fork(); /2 /

nuevo= fork(); /3 /

printf("Soy el proceso %d y mi padre es%d\n", getpid(), getppid());

4. Considerando el siguiente fragmento de código:

for (num= 1; num<= n; num++) {

nuevo= fork();

if ((num== n) && (nuevo== 0))

        execlp ("ls", "ls", "-l", NULL);

}

a) Dibuja la jerarquía de procesos generada cuando se ejecuta y n es 3.

b) Indica en qué procesos se ha cambiado la imagen del proceso usando la función execlp.

5. Dibuja la jerarquía de procesos que resulta de la ejecución del siguiente código. Indica para cada nuevo proceso el valor de las variables i y j en el momento de su creación.

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;

}

6. Estudia el siguiente código y escribe la jerarquía de procesos resultante. Después, compila y ejecuta el código para comprobarlo (deberás añadir llamadas al sistema getpid, getppid y wait para conseguirlo).

#include

#include

#include

#include

#include

#define L1 2

#define L2 3

int main (int argc, char argv[ ]) {

        int cont1, cont2;

                pid t pid;

                

                for (cont2= 0; cont2< L2; cont2++) {

                        for (cont1= 0; cont1< L1; cont1++) {

                                pid= fork();

                                if (pid== 0)

                                        break;

                        }

                        if (pid!= 0)

...

Descargar como (para miembros actualizados) txt (6 Kb) pdf (275 Kb) docx (429 Kb)
Leer 6 páginas más »
Disponible sólo en Clubensayos.com