Multiprocesamiento en Lenguaje C Creación y manejo de procesos en C Proyecto PAPIME PE104911 Pertinencia de la enseñanza del cómputo paralelo en el currículo de las ingenierías Creación y manejo de procesos en C Conceptos básicos • Estados de un proceso ejecución despachar Op. de e/s exp. tiempo listo bloqueado despertar Proyecto PAPIME PE104911 Laura Sandoval Montaño Creación y manejo de procesos en C Estructura de un proceso • Los procesos están compuestos por tres bloques o segmentos: Segmento de texto. Código ejecutable del programa. Segmento de datos. Variables globales y estáticas. Segmento de pila (stack). Dinámico, llamadas a funciones o al sistema: modo usuario modo kernel Proyecto PAPIME PE104911 Laura Sandoval Montaño Creación y manejo de procesos en C Estructura de un proceso • Se utiliza una Tabla de procesos, requerido para el control de éstos. * Estado * Apuntadores a memoria ocupada * UID * PID * Descriptores de eventos * Parámetros de planificación * Campo de señales * Temporizadores para cálculo de prioridad dinámica Proyecto PAPIME PE104911 Laura Sandoval Montaño Creación y manejo de procesos en C Creación de un proceso • Todos los procesos, excepto el primero, son creados mediante la llamada al sistema fork( ) Después del fork Antes del fork main( ){ ... fork() .... } main( ){ ... fork() .... } main( ){ ... fork() .... } Proyecto PAPIME PE104911 Laura Sandoval Montaño Proceso padre Proceso hijo Creación y manejo de procesos en C Creación de un proceso con fork() Proyecto PAPIME PE104911 Laura Sandoval Montaño Creación y manejo de procesos en C Manejo de procesos en UNIX Se realiza a través de llamadas al sistema. Ejemplos: • Ejecutar un programa: familia exec. • Detener un proceso: wait • Terminar: exit • Comunicación entre procesos: pipe y sockets Proyecto PAPIME PE104911 Laura Sandoval Montaño Creación y manejo de procesos en C Aplicación de manejo de procesos Shell en Unix init ... init ... init /etc/getty ... /etc/getty /bin/login Proceso creado por el kernel al iniciar Unix Lee /etc/getty para saber qué terminales serán activadas y hace fork Cada uno de los init hijos hace exec hacia /etc/getty Pone “login:” y espera el nombre del usuario. Cuando recibe el nombre hace exec a /bin/login Mira al archivo /etc/passwd para conocer el shell a utilizar /bin/csh /bin/login hace exec hacia el shell correspondiente % /bin/csh pone el prompt y espera comando de usuario Proyecto PAPIME PE104911 Laura Sandoval Montaño