Practica 06

Práctica 06 Octubre 2017 /* generación de procesos */ fork() crea nuevos procesos en el sistema operativo Unix. Los s

Views 111 Downloads 1 File size 54KB

Report DMCA / Copyright

DOWNLOAD FILE

Recommend stories

Citation preview

Práctica 06 Octubre 2017

/* generación de procesos */

fork() crea nuevos procesos en el sistema operativo Unix. Los siguientes códigos de programa son ejemplos para la creación de procesos ‘hijos’. Compile y ejecute en UNIX los programas en lenguaje C y verifique los valores 'pid' con la orden "ps". Pause el programa para identificar los “id” de los procesos, puede usarse “getch()” u alguna otra función. Librerías que se usan en la creación de procesos son:

/* Includes */ #include #include #include #include #include #include

/* /* /* /* /* /*

Constantes Simbólicas */ Tipos de datos del sistema primitivos */ Errores */ Input/Output */ Espera por la terminación del proceso */ Utilerías en General */

El siguiente código “fork_0.c” crea un proceso “hijo” en Unix. El proceso padre “main()” genera al proceso hijo invocando la llamada al sistema “fork()” y espera a que el hijo termine; el hijo solicita cualquier letra al usuario, mientras no sea “t”, que en tal caso terminará el proceso regresando al proceso padre para terminar el programa. fork_0.c int main() { pid_t pid; char c ='a'; /* se cra otro proceso */ pid = fork(); if (pid < 0) { /* ocurrió un error */ fprintf(stderr, "Fork Falló"); exit(-1); } else if (pid == 0) { /* proceso hijo */ printf("proceso hijo\n"); printf("ingresa cualquier letra; 't' para terminar\n"); while('t'!=c){ printf("%d ->:", pid); c=getchar(); } } else { /* proceso padre */ /* el proceso padre espera al hijo hasta que termine */ wait (NULL); printf ("Proceso Padre, esperó a que termine el proceso hijo\n");



Práctica 06 Octubre 2017

exit(0); } }

Desarrollo: 1. Compile y ejecute cada uno de los programas: fork_0.c, fork_1.c, fork_2.c y fork_3.c 2. Modifique cualquiera de los programas de la práctica para crear un proceso “nieto”, es decir el proceso “hijo” genera otro proceso “hijo” o “nieto” para el proceso “main()”. Ejecute el programa y demuestre mediante el “pid” respectivo que se trata del proceso padre, el proceso hijo o el proceso nieto. 3. Explique la línea siguiente del programa fork_1.c ¿se ejecuta? printf("termina proceso hijo \n ");

/* se imprime? explique porque?

*/

4. Determine mediante el “pid” el número de procesos que se ejecutan para el caso de los programas fork_2.c y fork_3.c. Reporte para los incisos 2, 3, y 4 los cósus observaciones, incluyendo la salida de los programas. Recuerde no incluir imágenes de captura de pantalla, es suficiente y mejor valorado en modo texto.

fork_1.c

/* Silverschatz, Gavin & Gagne; Operating System Concepts Ninth Edition 3.9, pp 118 */

Figure

#include #include #include int main() { pid_t pid; pid = fork(); /* crea un proceso hijo */ if (pid < 0) { /* occurrió un error*/ fprintf(stderr, "Fork Fallo"); return 1; } else if (pid == 0) { /* proceso hijo */ printf("proceso hijo \n "); execlp("/bin/ls","ls",NULL); /* Código externo */ printf("termina proceso hijo \n "); /* se imprime? explique porque? */ } else { /* proceso padre */ wait(NULL); /* proceso padre esperara al hijo a que termine */ printf("Proceso Padre\n Hijo Termino\n");



Práctica 06 Octubre 2017

} return 0; }

fork_2.c /* Silverschatz, Gavin & Gagne; Operating System Concepts Ninth Edition Figure 3.31, pp 150 */ #include #include int main() { /* fork a child process */ fork(); /* fork another child process */ fork(); /* and fork another */ fork(); return 0; /* Cuantos procesos se crean, demuéstrelo? */ } fork_3.c /* Silverschatz, Gavin & Gagne; Operating System Concepts Ninth Edition

Figure 3.32, pp 151

*/

#include #include int main() { int i; for (i = 0; i < 4; i++) fork(); return 0; /* Cuantos procesos se crean?, demuéstrelo */ }