Procesos Módulo 3 Departamento de Informática Facultad de Ingeniería Universidad Nacional de la Patagonia “San Juan Bosco” Procesos Concepto de Proceso Planificación de Proceso Operaciones sobre Procesos Comunicaciones Interprocesos (IPC) Ejemplos de Sistemas de IPC Comunicación en un Sistema Cliente- Servidor JRA © 2008 Sistemas Operativos – Procesos Objetivos Introducir la noción de proceso – un programa en ejecución, el cual conforma la base de toda computación Describir varias características de procesos, incluyendo planificación, creación y terminación, y comunicación Describir la comunicación en sistemas cliente- servidor Sistemas Operativos – Procesos JRA © 2008 Concepto de Proceso Un SO ejecuta una variedad de programas: Sistema Batch – jobs Sistemas de Tiempo Compartido – programas de usuario o tareas Los términos job, tarea y proceso se usan con similar sentido. Proceso – un programa en ejecución; la ejecución de los procesos debe progresar en forma secuencial. Un proceso incluye: contador de programa stack sección de datos JRA © 2008 Sistemas Operativos – Procesos Procesos en Memoria datos texto Sistemas Operativos – Procesos JRA © 2008 Estado de los Procesos En tanto que un proceso ejecuta, cambia de estado nuevo: el proceso es creado. JRA © 2008 corriendo: las instrucciones están siendo ejecutadas. espera: el proceso está esperando que ocurra algún evento. listo: el proceso está esperando ser asignado a la CPU. terminado: el proceso ha finalizado su ejecución. Sistemas Operativos – Procesos Diagrama de Estados de un Proceso despacho corriendo listos nuevo interrup exit evento e/s terminado evento completado espera Sistemas Operativos – Procesos JRA © 2008 Diagrama de Estados de un Proceso Diagrama con cinco estados despacho corriendo listos nuevo interrup evento comp react susp exit evento e/s terminado espera susp react Susp-esp Susp-listo evento comp JRA © 2008 Sistemas Operativos – Procesos Bloque de Control de Procesos (PCB) Es una estructura de dato que contiene información asociada con cada proceso. Estado de Proceso Contador de Programa Registros de CPU Información de planificación de CPU Información de administración de memoria Información contable Información de estado E/S PCB: Process Control Block JRA © 2008 Sistemas Operativos – Procesos Bloque de Control de Proceso (PCB) JRA © 2008 Sistemas Operativos – Procesos Conmutación de CPU de Proceso a Proceso P-0 SO interrupción o llamada al sistema P-1 ejecución salva estado en PCB-0 .. . ocioso carga estado de PCB-1 ocioso interrupción o llamada al sistema salva estado en PCB-1 .. . ejecución JRA © 2008 ejecución ocioso carga estado de PCB-0 Sistemas Operativos – Procesos Colas de Planificación de Procesos Cola de Job (o tareas) – conjunto de todos los procesos en el sistema. Cola de listos – conjunto de todos los procesos residentes en memoria principal, listos y esperando para ejecutar. Colas de dispositivos – conjunto de procesos esperando por una E/S en un dispositivo de E/S. Migración de procesos entre las colas. JRA © 2008 Sistemas Operativos – Procesos Colas de listos y de Dispositivos de E/S cola de listos inicio cinta mag unidad 0 inicio reg reg PCB-4 PCB-7 PCB-0 PCB-14 PCB-5 reg reg reg final final disco unidad 0 inicio terminal unidad 0 inicio final reg final PCB-6 Sistemas Operativos – Procesos JRA © 2008 Representación de Planificación de Procesos cola de listo i/o join cpu cola I/O ejecuta hijo req I/O Expira tajada de tiempo fork hijo cola espera cola recurso JRA © 2008 Sistemas Operativos – Procesos requiere recurso Planificadores de Procesos Planificador de largo término ( o planificador de jobs ) – selecciona que procesos deberían ser puestos en la cola de listos. Planificador de corto término (o planificador de CPU ) – selecciona que procesos deberían ser proximamente ejecutados y colocados en la CPU. Sistemas Operativos – Procesos JRA © 2008 Planificación de mediano término fuera de swapping procesos parcialmente ejecutados al swapping fin cola de listos E/S JRA © 2008 entrada en swapping CPU cola de espera E/S Sistemas Operativos – Procesos Planificadores de Procesos (Cont.) El planificador de corto término es invocado muy frecuentemente (milisegundos) ⇒ (debe ser rápido). El planificador de largo término es invocado poco frecuentemente (segundos, minutos) ⇒ (puede ser muy lento). El planificador de largo término controla el grado de multiprogramación. Los procesos pueden ser descriptos como: Procesos limitados por E/S – pasa mas tiempo haciendo E/S que computaciones, ráfagas (burst) de CPU muy cortas. Procesos limitados por CPU – pasa mas tiempo haciendo computaciones que E/S, ráfagas (burst) de CPU muy largas. Sistemas Operativos – Procesos JRA © 2008 Cambio de contexto Cuando la CPU conmuta a otro proceso, el sistema debe salvar el estado del viejo proceso y cargar el estado para el nuevo proceso vía un cambio de contexto. El contexto de un proceso está representado en el PCB El tiempo que lleva el cambio de contexto es sobrecarga; el sistema no hace trabajo útil mientras está conmutando. El tiempo depende del soporte de hardware . JRA © 2008 Sistemas Operativos – Procesos Creación de Procesos Procesos padres crean procesos hijos, lo cuales, a su vez crean otros procesos, formando un árbol de procesos. Recursos compartidos Padres e hijos comparten todos los recursos. Hijo comparte un subconjunto de los recursos del padre. Padre e hijo no comparten ningún recurso. Ejecución Padres e hijos ejecutan concurrentemente. Padres esperan hasta que los hijos terminan. Sistemas Operativos – Procesos JRA © 2008 Creación de Procesos (Cont.) Espacio de direcciones El hijo replica el del padre. El hijo tiene un programa cargado en él. Ejemplos de UNIX JRA © 2008 La llamada a sistema fork crea un nuevo proceso La llamada a sistema execve es usada después del fork para reemplazar el espacio de memoria del proceso con un nuevo programa. Sistemas Operativos – Procesos Creación de Procesos padre hijo JRA © 2008 Sistemas Operativos – Procesos Fork de Procesos en “C” int main() { pid_t pid; /* fork another process */ pid = fork(); if (pid < 0) { /* error occurred */ fprintf(stderr, "Fork Failed"); exit(-1); } else if (pid == 0) { /* child process */ execlp("/bin/ls", "ls", NULL); } else { /* parent process */ /* parent will wait for the child to complete */ wait (NULL); printf ("Child Complete"); exit(0); } } JRA © 2008 Sistemas Operativos – Procesos Se reactiva Un Arbol de Procesos en Solaris JRA © 2008 Sistemas Operativos – Procesos Árbol de Procesos en UNIX JRA © 2008 Sistemas Operativos – Procesos Terminación de Procesos El proceso ejecuta la última sentencia y espera que el SO haga algo (exit). Los datos de salida del hijo se pasan al padre (via wait). Los recursos de los procesos son liberados por el SO. El padre puede terminar la ejecución del proceso hijo (abort). El hijo ha excedido los recursos alocados. La tarea asignada al hijo no es mas requerida. El padre está terminando. El SO no permite a los hijos continuar si su padre termina. Terminación en cascada. Sistemas Operativos – Procesos JRA © 2008 Comunicación Interprocesos (IPC) Los procesos en un sistema pueden ser independientes o cooperativo Los procesos cooperativos pueden afectar o ser afectados por otros procesos, cuando incluyen datos compartidos Razones para procesos cooperativos Información compartida Speedup de computación Modularidad Conveniencia Los procesos cooperativos necesitan comunicación interprocesos (IPC) Dos modelos de IPC JRA © 2008 Memoria compartida Pasaje de Mensajes Sistemas Operativos – Procesos Modelos de Comunicación Pasaje de mensajes Memoria compartida proceso A proceso A memoria compartida proceso B proceso B kernel kernel Sistemas Operativos – Procesos JRA © 2008 Procesos Cooperativos Un proceso independiente no puede afectar ni ser afectado por la ejecución de otro proceso. Un proceso cooperativo puede afectar o ser afectado por la ejecución de otro proceso. Ventajas de los procesos cooperativos JRA © 2008 Información compartida Aceleración de la computación Modularidad Conveniencia Sistemas Operativos – Procesos Problema del Productor-Consumidor Paradigma procesos cooperativos, el proceso productor produce información que es consumida por un proceso consumidor . buffer ilimitado - no tiene límites prácticos en el tamaño del buffer. buffer limitado supone que hay un tamaño fijo de buffer. Sistemas Operativos – Procesos JRA © 2008 Buffer limitado – Solución con memoria compartida Datos compartidos var n; type item = … ; var buffer. array [0..n–1] of item; in, out: 0..n–1; Proceso Productor repeat … produce un item en nextp … while in+1 mod n = out do no-op; buffer [in] :=nextp; in :=in+1 mod n; until false; JRA © 2008 Sistemas Operativos – Procesos Buffer limitado – Solución con memoria compartida Datos compartidos #define BUFFER_SIZE 10 typedef struct { ... } item; item buffer[BUFFER_SIZE]; int in = 0; int out = 0; Sistemas Operativos – Procesos JRA © 2008 Buffer limitado (cont.) Proceso Consumidor repeat while in = out do no-op; nextc := buffer [out]; out := out+1 mod n; … consume un item en nextc … until false; La solución es correcta, pero solo puede llenar el buffer hasta n–1. JRA © 2008 Sistemas Operativos – Procesos 32 Buffer limitado - Productor while (true) { /* Produce un item */ while (((in = (in + 1) % BUFFER SIZE count) == out) ; /* no hace nada -- no hay buffers libres */ buffer[in] = item; in = (in + 1) % BUFFER SIZE; } Sistemas Operativos – Procesos JRA © 2008 Buffer limitado – Consumidor while (true) { while (in == out) ; // do nothing --/* nada a consumir */ /* remueve un item del buffer*/ item = buffer[out]; out = (out + 1) % BUFFER SIZE; return item; } JRA © 2008 Sistemas Operativos – Procesos Comunicación entre Procesos (IPC) Mecanismo de los procesos para comunicarse y sincronizar sus acciones. Sistema de mensajes – los procesos se comunican uno con otro sin necesidad de variables compartidas. Las facilidades de IPC provee dos operaciones: send(mensaje) – mensaje de tamaño fijo o variable receive(mensaje) Si P and Q desean comunicarse, necesitan: Establecer un vínculo de comunicación entre ellos Intercambiar mensajes via send/receive Implementación de un vínculo de comunicación lógico (p.e., propiedades lógicas) físicol (p.e., memoria compartida, canal hardware) Sistemas Operativos – Procesos JRA © 2008 Preguntas sobre la Implementación ¿Cómo se establecen los vínculos? ¿Puede un vínculo ser asociado con mas de dos procesos? ¿Cuántos vínculos puede haber entre cada par de procesos que se comunican? ¿Cuál es la capacidad de un vínculo? ¿El vinculo puede aceptar tamaño de mensajes fijo o variable? ¿Es vínculo unidireccional o bi-direccional? JRA © 2008 Sistemas Operativos – Procesos Comunicación Directa Los procesos deben nombrar al otro explicitamente: send (P, mensaje) – envía un mensaje al proceso P receive(Q, mensaje) – recibe un mensaje del proceso Q Propiedades del vínculo de comunicación Los vínculos son establecidos automaticamente. Un vínculo está asociado con exactamente un par de procesos que se comunican. Entre cada par existe exactamente un vínculo. El vínculo puede ser unidireccional, pero es usualmente bi-direccional. Sistemas Operativos – Procesos JRA © 2008 Comunicación Indirecta Los mensajes son dirigidos y recibidos desde mailboxes (también referidas como ports). Cada mailbox tiene una única identificación. Los procesos pueden comunicarse solo si comparten un mailbox. Propiedades de un vínculo de comunicación El vínculo se establece solo si los procesos comparten un mailbox común. Un vínculo puede ser asociado con muchos procesos. Cada par de procesos puede compartir varios vínculos de comunicación. JRA © 2008 Los vínculos pueden ser unidireccionales o bi-direccionales. Sistemas Operativos – Procesos Comunicación Indirecta (cont.) Operaciones crear un nuevo mailbox enviar y recibir mensajes por medio del mailbox destruir un mailbox Las primitivas son definidas como: send(A, mensaje) – envía un mensaje al mailbox A receive(A, mensaje) – recibe un mensaje del mailbox A Sistemas Operativos – Procesos JRA © 2008 Comunicación Indirecta (cont.) Mailbox compartida P1, P2, y P3 comparten el mailbox A. P1, envía; P2 y P3 reciben. ¿Quién toma el mensaje? Solución Permitir que un vínculo está asociado a lo sumo con dos procesos. Permitir que un solo proceso a la vez ejecute la operación receive. Permitir que el sistema seleccione arbitrariamente el receptor. El enviador es notificado quien fue el receptor del mensaje. JRA © 2008 Sistemas Operativos – Procesos Sincronización El pasaje de mensajes puede ser bloqueante o no bloqueante. Bloqueante es considerado sincrónico Send bloqueante mantiene al enviador bloqueado hasta que el mensaje es recibido Receive bloqueante mantiene al receptor bloqueado hasta que el mensaje esté disponible No bloqueante es considerado asincrónico JRA © 2008 Send no bloqueante: el emisor envía el mensaje y continúa Receive no bloqueante : el receptor recibe un mensaje válido o nulo Sistemas Operativos – Procesos Buffering La cola de mensajes asociada al vínculo se puede implementar de tres maneras. 1. Capacidad – 0 mensajes El enviador debe esperar por el receptor (rendezvous). 2. Capacidad limitada – longitud finita de n mensajes El enviador debe esperar si el vínculo está lleno. 3. Capacidad ilimitada – longitud infinita El enviador nunca espera. JRA © 2008 Sistemas Operativos – Procesos Ejemplos de Sistemas IPC - POSIX Memoria compartida POSIX El proceso primero crea un segmento de memoria compartida segment id = shmget(IPC PRIVATE, size, S IRUSR | S IWUSR); El proceso que quiere acceder a la memoria compartida debe adjuntarse a ella shared memory = (char *) shmat(id, NULL, 0); Ahora el proceso puede escribir en la memoria compartida sprintf(shared memory, "Writing to shared memory"); Finalizado el proceso debe liberar a su espacio de direcciones del la memoria compartida shmdt(shared memory); Sistemas Operativos – Procesos JRA © 2008 Ejemplos de Sistemas IPC - Mach La comunicación en Mach está basada en mensajes Las llamadas a sistema son mensajes Desde su creación cada proceso tiene dos mailbox – Kernel y Notify Se necesitan solo tres llamadas a sistema para transferir mensajes msg_send(), msg_receive(), msg_rpc() Las mailbox necesarias para la comunicación, son creadas vía: port_allocate() JRA © 2008 Sistemas Operativos – Procesos Ejemplos de Sistemas IPC – Windows XP Centrado en el pasaje de mensajes vía facilidades de llamadas a procedimientos locales (local procedure call (LPC) ) Sólo funciona entre procesos sobre el mismo sistema Usa pórticos (como mailboxes) para establecer y mantener canales de comunicación La comunicación funciona de la siguiente manera: El cliente abre un handle del pórtico del subsistema de conexión El cliente envía una petición de conexión El servidor crea dos pórticos privados de comunicación y retorna el handle de uno de ellos al cliente El cliente y el servidor usan el correspondiente handle del pórtico para enviar mensajes o retornos y para “escuchar” por réplicas JRA © 2008 Sistemas Operativos – Procesos Llamadas a Procedimientos Locales en Windows XP JRA © 2008 Sistemas Operativos – Procesos Comunicación Cliente-Servidor Sockets Llamadas a Procedimientos Remotors (RPC:Remote Procedure Calls) Invocación a Métodos Remotos (RMI:Remote Method Invocation (Java)) Sistemas Operativos – Procesos JRA © 2008 Sockets Un socket es definido como un punto final de comunicación. Concatenación de dirección IP y pórtico El socket 161.25.19.8:1625 se refiere al pórtico 1625 en el host 161.25.19.8 La comunicación se lleva a cabo entre un par de sockets. JRA © 2008 Sistemas Operativos – Procesos Comunicación por Sockets JRA © 2008 Sistemas Operativos – Procesos Llamadas a Procedimientos Remotos (RPC: Remote Procedure Calls) Las RPCs produce una llamada a procedimiento entre procesos sobre un sistema de redes. Stubs – proxy del lado del cliente y del lado del procedimiento del servidor. El stub del lado del cliente localiza el servidor y hace marshall de los parámetros. El stub del lado del servidor recibe este mensaje, desempaca los parámetros y ejecuta el procedimiento en el servidor. JRA © 2008 Sistemas Operativos – Procesos Ejecución de RPC JRA © 2008 Sistemas Operativos – Procesos Invocación de Métodos Remotos (RMI) RMI es un mecanismo de Java similar a los RPCs. RMI permite a un programa Java, sobre una máquina, invocar un método sobre un objeto remoto. JRA © 2008 Sistemas Operativos – Procesos Marshalling de Parámetros JRA © 2008 Sistemas Operativos – Procesos Fin Módulo 3 Departamento de Informática Facultad de Ingeniería Universidad Nacional de la Patagonia “San Juan Bosco”