Contenidos Múltiples propuestas de creación y sincronización de procesos Otros mecanismos de concurrencia Algunas adoptados en lenguajes de programación Otras se han quedado en el tintero (no realmente útiles, difı́ciles de implementar, etc.) Plan: Lectura: Concepts and Notations for Concurrent Programming I (Andrews & Schneider) I I Creando tareas Sincronizando procesos con memoria compartida Sincronizando procesos con memoria distribuida Manuel Carro Universidad Politécnica de Madrid Este texto se distribuye bajo los términos de la Creative Commons License M. Carro (UPM) Otros mecanismos 1 / 11 Creando tareas I Bloque (como begin / end) que especifica arranque concurrente: I I I cobegin S1 ; S2 ; . . . Sn ; coend ; Tareas arrancadas explı́citamente dando punto de inicio f o r k P1 ; ... j o i n P1 ; I program P1 i s ... end P1 ; I I Devuelve / espera por identificador tarea Lanzador y lanzado progresan concurrentemente Aparece en librerı́as Unix: fork()/wait() También en librerı́as de threads: F F I Otros mecanismos S1 . . . Sn se ejecutan concurrentemente coend continúa cuando todos los Si han terminado Variante (replicación tareas): f o r a l l I : = 1 to n do S( I ) ; end ; POSIX: pthread create() / pthread join() Win32: CreateThread() / WaitForSingleObject() M. Carro (UPM) 2 / 11 cobegin / coend También aparece en otros lenguajes fork/join: I Otros mecanismos Creando tareas (Cont.) En Ada: tareas como tipos; elaboración de variables crea procesos I M. Carro (UPM) I 3 / 11 Requisitos fuertes acerca del momento de lanzamiento de tareas M. Carro (UPM) Otros mecanismos 4 / 11 Sincronización con memoria compartida Regiones crı́ticas condicionales Vistos para exclusión mutua: I I Variables compartidas agrupadas en recursos: conjuntos de variables compartidas que necesitan exclusión mutua Espera activa (Peterson / Dekker / . . . ) Semáforos resource R : V1 , V2 , . . . Vn ; Pueden usarse para construir sincronización condicional Pero falta de estructuración Cada variable a lo sumo en un recurso Acceso en exclusión mutua a recursos dentro de regiones: region R when B do S ; R nombre de recurso B condición booleana (sin restricción sintáctica) I Región suspende si no se cumple I Exclusión mutua sobre variables en R Caro de implementar (B puede referenciar variables locales) Falta de estructuración (acciones sobre recursos dispersas) M. Carro (UPM) Otros mecanismos 5 / 11 Monitores M. Carro (UPM) Otros mecanismos Sincronización con memoria distribuida Encapsulan estado (privado) y operaciones Op1, ..., OpN Basada en alguna forma de paso de mensajes Llamadas a operaciones en exclusión mutua Sincronización usando variables de condición: No hay variables compartidas −→ exclusión mutua innecesaria I I Comunicación: mensajes (contienen datos) Wait(cond) suspende proceso llamante, abandona exclusión mutua Signal(cond) permite rearrancar proceso suspendido en cond Sincronización: mensajes (espera por llegada / recepción) Taxonomı́a según: I procedure P ( A : . . . ) begin i f not CondP ( A , Est ) then Wait (C ) ; end i f ; ... end P ; M. Carro (UPM) 6 / 11 procedure Q(B : . . . ) begin ... i f CondP ( Est ) then Signal (C ) ; end i f ; end Q; Otros mecanismos I 7 / 11 Especificación canales Sincronı́a M. Carro (UPM) Otros mecanismos 8 / 11 Nombrado directo Llamada a procedimiento remoto (RPC) send / receive usualmente en pares: Origen y destino especificados en la comunicación I I Origen especifica destino: Pasar datos, recoger resultados RPC encapsula ambas direcciones en una sola llamada: send Data to Receiver ; c a l l P( args entrada ; a r g s s a l i d a ) ; Destino especifica origen: Especificación de procedimiento remotos receive Data from Sender ; remote procedure P( args entrada ; args salida ) begin ... args salida : = . . . ; end P ; Se ignoran otros orı́genes Pipelines: una forma (domesticada) de paso de mensajes con nombrado directo ls | tail -5 | sort Difı́cil de usar para programar servidores I Nombrado global (mailboxes) M. Carro (UPM) 9 / 11 Panorama Espera activa Semáforos Orientados a mensajes Orientados a procedimiento Paso de mensajes Monitores RPC Orientados a operación M. Carro (UPM) Otros mecanismos accept P ( a r g s e n t r a d a ; a r g s s a l i d a ) −−> begin args salida : = . . . ; end ; 11 / 11 M. Carro (UPM) Podrı́a ser llamado en cualquier punto Sólo en servidor: Rendez-Vous Creado como proceso Otros mecanismos Regiones crı́ticas Recepción explı́cita Otros mecanismos 10 / 11