Qu vimos la clase anterior RPC y Rendezvous

  • Slides: 49
Download presentation
Qué vimos la clase anterior ? RPC y Rendezvous son técnicas de comunicación y

Qué vimos la clase anterior ? RPC y Rendezvous son técnicas de comunicación y sincronización entre procesos que suponen un canal bidireccional. Son ideales para programar aplicaciones Cliente-Servidor. RPC y Rendezvous combinan una interfaz “tipo monitor” con operaciones que se exportan a través de llamadas externas (CALL) con mensajes sincrónicos (demoran al llamador). En RPC existe alguna forma de “sistema operativo” o administrador de procesos que “controla” los procesos servidores. Ante un pedido de un servicio activa (“crea”) el servidor y entrega el servicio al cliente. El Rendezvous supone un modelo de tareas (procesos) concurrentes que pueden jugar el rol de clientes o servidores. 21 -6 -2004 Programación Concurrente 2004 - Clase 1 10

Qué vimos la clase anterior ? Ejemplos con RPC y Rendezvous. En RPC discutimos

Qué vimos la clase anterior ? Ejemplos con RPC y Rendezvous. En RPC discutimos el concepto de procesos y procedimientos en el servidor, con los casos del TIME SERVER, y un FILE SERVER con dos niveles. En ADA vimos el concepto de TASK (como proceso cliente o servidor) y la interacción entre los TASKs a través del rendezvous. En ADA la sincronización tiene la posibilidad de hacer un ACCEPT selectivo (Receive sincrónico) dentro de un SELECT. Por otro lado las colas de pendientes en los ACCEPT de los servidores son manejadas automáticamente por el lenguaje y pueden consultarse para tomar decisiones dinámicamente. 21 -6 -2004 Programación Concurrente 2004 - Clase 10 2

Paradigmas para interacción entre procesos. Hemos visto tres esquemas básicos de interacción entre procesos:

Paradigmas para interacción entre procesos. Hemos visto tres esquemas básicos de interacción entre procesos: productor/consumidor, cliente/servidor e interacción entre pares. Los tres esquemas básicos anteriores se pueden combinar de muchas maneras, dando lugar a paradigmas o modelos de interacción entre procesos. Discutiremos 7 paradigmas en esta clase. Paradigma 1: servidores replicados En este caso los servidores manejan (mediante múltiples instancias) recursos compartidos tales como dispositivos o archivos. 21 -6 -2004 Programación Concurrente 2004 - Clase 10 3

Paradigmas de interacción entre procesos. Paradigma 2: algoritmos de heartbeat Los procesos preriódicamente deben

Paradigmas de interacción entre procesos. Paradigma 2: algoritmos de heartbeat Los procesos preriódicamente deben intercambiar información con mecanismos tipo send/receive. Paradigma 3: algoritmos de pipeline La información recorre una serie de procesos utilizando alguna forma de send/receive. Paradigma 4: probes (send) y echoes(ecos) En este caso la interacción entre los procesos permite recorrer grafos o árboles (o estructuras dinámicas) diseminando información. Programación Concurrente 2004 - Clase 10 21 -6 -2004 4

Paradigmas de interacción entre procesos. Paradigma 5: algoritmos de broadcast Permiten alcanzar una información

Paradigmas de interacción entre procesos. Paradigma 5: algoritmos de broadcast Permiten alcanzar una información global en una arquitectura distribuida. Sirven para toma de decisiones distribuidas. Paradigma 6: token passing En muchos casos la arquitectura distribuida recibe una información global a través del viaje de tokens de control o datos. También permite la toma de decisiones distribuídas. Paradigma 7: manager/workers Representa típicamente una implementación distribuida del modelo de bag of tasks. Programación Concurrente 2004 - Clase 10 21 -6 -2004 5

Paradigma de servidores replicados. 21 -6 -2004 6 Programación Concurrente 2004 - Clase 10

Paradigma de servidores replicados. 21 -6 -2004 6 Programación Concurrente 2004 - Clase 10

Paradigma de servidores replicados. Modelos de solución de filósofos. El primer modelo de solución

Paradigma de servidores replicados. Modelos de solución de filósofos. El primer modelo de solución que hemos visto, es el centralizado. En este caso los procesos Filósofo se comunican con un proceso Waiter que decide el acceso o no a los recursos. La segunda solución que llamaremos distribuida supone cinco procesos Waiter cada uno de los cuales maneja un tenedor. Para este problema un Filósofo puede comunicarse con dos Waiters (izquierdo y derecho), solicitando y devolviendo el recurso. Los Waiters NO se comunican entre ellos. En la tercer solución que llamaremos descentralizada, cada Filósofo ve un único Waiter. En cambio los Waiters se comunican entre ellos (de hecho cada uno con sus dos vecinos) para decidir el manejo del recurso asociado a “su” Filósofo. 21 -6 -2004 Programación Concurrente 2004 - Clase 10 7

Algoritmos de heartbeat. El paradigma de heartbeat es útil cuando tenemos soluciones iterativas que

Algoritmos de heartbeat. El paradigma de heartbeat es útil cuando tenemos soluciones iterativas que se quieren paralelizar. Utilizando un esquema “divide & conquer” se distribuye la carga entre workers que realizan cálculos y actualizan con sus resultados a otros workers. Cada “paso” debiera significar un progreso hacia la solución del problema. Esquemáticamente: PROCESS worker [i =1 to num. Workers] { declaraciones e inicializaciones locales; WHILE (no terminado) { send valores a los workers vecinos; receive valores de los workers vecinos; Actualizar valores locales; } } 21 -6 -2004 8 Programación Concurrente 2004 - Clase 10

Algoritmos de heartbeat. El ejemplo de image labelling. • Si tenemos una imagen representada

Algoritmos de heartbeat. El ejemplo de image labelling. • Si tenemos una imagen representada en una matriz Image[mxn], en muchos casos es importante separarla en zonas que se identifiquen con un label. • Un modo natural de paralelizar este tipo de aplicaciones es dividir la Imagen en P “strips” o conjunto de filas en las que un proceso trata de poner un label a cada pixel. • Naturalmente en cada ciclo los resultados deben ser trasmitidos entre los procesos vecinos porque las “zonas” pueden ser compartidas. • Las iteraciones pueden ser fijas o tener un proceso coordinador o manager que detecte cuando ninguno de los P procesos workers encontró cambios en el labelling. 21 -6 -2004 9 Programación Concurrente 2004 - Clase 10

Algoritmos de heartbeat. Autómatas celulares: el juego de la vida. Muchas aplicaciones de sistemas

Algoritmos de heartbeat. Autómatas celulares: el juego de la vida. Muchas aplicaciones de sistemas físicos o biológicos pueden modelizarse como una colección de cuerpos que repetidamente interactúan y evolucionan en el tiempo. Algunos ejemplos muy simples pueden modelizarse con algún tipo de autómata celular. La idea es dividir el espacio en un conjunto de células donde cada una es un autómata finito. Cada transición de estado de una célula se basa en su estado y el de sus células vecinas. Un ejemplo simple es el juego de la vida: en una grilla bidimensional cada nodo es una célula que puede estar viva o muerta. Normalmente cada célula tiene 8 vecinas que influyen en ella. 21 -6 -2004 10 Programación Concurrente 2004 - Clase 10

Algoritmos de heartbeat. Autómatas celulares: el juego de la vida. Las reglas de interacción

Algoritmos de heartbeat. Autómatas celulares: el juego de la vida. Las reglas de interacción que definimos para las transiciones son: 1 - Una célula viva rodeada por 0 o 1 células vivas, MUERE. 2 - Una célula viva rodeada por 2 o 3 células vivas, SOBREVIVE. 3 - Una célula viva rodeada por 4 o más células vivas, MUERE. 4 - Una célula muerta rodeada por exactamente 3 células vivas, REVIVE. Obviamente los procesos (células) interactúan con un paradigma tipo heartbeat, enviando y recibiendo mensajes en cada ciclo. El “juego” dura un número predeterminado de ciclos, por lo que no haría falta coordinador. La inicialización es de toda la grilla, al azar. 21 -6 -2004 11 Programación Concurrente 2004 - Clase 10

Algoritmos de heartbeat. Autómatas celulares: el juego de la vida. Sin analizar los bordes

Algoritmos de heartbeat. Autómatas celulares: el juego de la vida. Sin analizar los bordes y extremos, suponiendo un proceso Cell[i, j] por célula y considerando un send no bloqueante tenemos un código: CHAN exchange[1: n, 1: n] (INT row, column, state); PROCESS cell [i=1 to n, j=1 to n] { INT state; declaraciones de variables; FOR [k =1 to num. Generations] { # intercambiar info con los 8 vecinos FOR [p = i-1 to i+1, q= j-1 to j+1] send exchange [p, q] (i, j, state); FOR [p =1 to 8] { receive exchange [i, j] (row, column, value); guardar el valor de las células vecinas; } Actualizar el estado local; } } 21 -6 -2004 12 Programación Concurrente 2004 - Clase 10

Paradigma del Pipelining. Tipos de problemas. Un pipeline es un arreglo lineal de procesos

Paradigma del Pipelining. Tipos de problemas. Un pipeline es un arreglo lineal de procesos “filtro” que reciben datos de un puerto (canal) de entrada y entregan resultados por un canal de salida. Estos procesos (“workers”) pueden estar en procesadores que operan en paralelo, en un primer esquema a lazo abierto (W 1 en el INPUT, Wn en el OUTPUT). Un segundo esquema posible es un pipeline “circular”donde Wn se conecta con W 1. Estos esquemas sirven en procesos iterativos o bien donde la aplicación no se resuelve en una pasada por el pipe. En un tercer esquema posible existe un proceso coordinador que maneja la “realimentación” entre Wn y W 1. 21 -6 -2004 Programación Concurrente 2004 - Clase 10 13

Multiplicación de matrices con un Pipe de procesadores. La multiplicación distribuida de matrices A

Multiplicación de matrices con un Pipe de procesadores. La multiplicación distribuida de matrices A y B de nxn mediante un pipe no parece una aplicación “natural”. Aquí la resolveremos con un pipe cerrado con coordinador. El coordinador pasará las filas de A por el canal de entrada al Worker 0 y luego las columnas de B al Worker 0 y recibirá en orden inverso las filas del producto C. Cada Worker del pipe tiene tres fases de ejecución: primero recibe las filas de A, guardando la primera que recibe y pasando las restantes. De este modo el Worker Wi tendrá la fila i de A. En la segunda fase realiza n ciclos de recibir una columna de B, pasarla y calcular un producto interior. Luego de los n ciclos, Wi tiene C[i, *]. En la tercer fase todas las filas de C fluyen entre los Workers, terminando en el coordinador. La solución que vemos a continuación es muy interesante por el gran flujo de mensajes (casi continuo) en el pipe y por la importancia del orden en que se envían los datos iniciales y finales. 21 -6 -2004 14 Programación Concurrente 2004 - Clase 10

Multiplicación de matrices con un Pipe de procesadores. Coordinador. CHAN vector[n] (DOUBLE v[n]); CHAN

Multiplicación de matrices con un Pipe de procesadores. Coordinador. CHAN vector[n] (DOUBLE v[n]); CHAN result (DOUBLE v[n]); # mensajes a los Workers # filas de C para el coordinador PROCESS Coordinator { DOUBLE A[n, n], B[n, n], C[n, n]; Inicializar A y B; FOR [i=0 to n-1] send vector[0] (A[i, *]); FOR [i=0 to n-1] send vector[0] (B[*, i]); FOR [i=n-1 to 0] receive result (C[i, *]); # envía las filas de A # envía las columnas de B # recibe C en orden inverso } 21 -6 -2004 Programación Concurrente 2004 - Clase 10 15

Multiplicación de matrices con un Pipe de procesadores. Workers. PROCESS Worker [w=0 to n-1]

Multiplicación de matrices con un Pipe de procesadores. Workers. PROCESS Worker [w=0 to n-1] { DOUBLE A[n], B[n], C[n]; # fila y columna con las que trabaja DOUBLE temp[n]; # usado para pasar vectores DOUBLE total; # usado para calcular el producto interno # Recibe las filas de A, almacena la primera y pasa las otras receive vector[w] (A); FOR [i= w+1 to n-1] { receive vector[w] (temp); send vector[w +1] (temp); } 21 -6 -2004 Programación Concurrente 2004 - Clase 10 16

Multiplicación de matrices con un Pipe de procesadores. Workers. # SEGUNDA FASE # Recibe

Multiplicación de matrices con un Pipe de procesadores. Workers. # SEGUNDA FASE # Recibe las columnas de B y calcula el producto interno FOR [j=0 to n-1] { receive vector[w] (B); # Obtiene 1 columna de B IF ( w < n-1) #NO es el último Worker send vector[w+1] (B); # Calcula el producto interno que le corresponde total=0; FOR [k= 0 to n-1] total += A[k] * B[k]; C[j] = total; } 21 -6 -2004 Programación Concurrente 2004 - Clase 10 17

Multiplicación de matrices con un Pipe de procesadores. Workers. # TERCERA FASE # Envía

Multiplicación de matrices con un Pipe de procesadores. Workers. # TERCERA FASE # Envía su columna de C al siguiente Worker o coordinador IF ( w < n-1) #NO es el último Worker send vector[w+1] (C); ELSE send result(C); # Recibe y pasa filas anteriores de C FOR [j=0 to w-1] { receive vector[w] (temp); # Obtiene 1 fila resultado de C IF ( w < n-1) #NO es el último Worker send vector[w+1] (temp); ELSE send result(temp); } } 21 -6 -2004 Programación Concurrente 2004 - Clase 10 18

Paradigma de Prueba-Eco. Clases de problemas. Arboles y grafos son utilizados en muchas aplicaciones

Paradigma de Prueba-Eco. Clases de problemas. Arboles y grafos son utilizados en muchas aplicaciones distribuidas tales como búsquedas en la WEB, bases de datos, sistemas expertos y juegos. Las arquitecturas distribuidas se pueden asimilar a los nodos de grafos y árboles, con canales de comunicación que los vinculan. El paradigma de prueba-eco se basa en el envío de un mensaje (“probe”) enviado por un nodo a su sucesor y la espera posterior del “eco” que es el mensaje de respuesta. Los algoritmos de prueba-eco son particularmente interesantes cuando se trata de recorrer redes donde no hay (o no se conoce) un número fijo de nodos activos. (ejemplo clásico son las redes móviles). 21 -6 -2004 Programación Concurrente 2004 - Clase 10 19

Paradigma de Prueba-Eco. Clases de problemas. Broadcasting. El problema de hacer un broadcast a

Paradigma de Prueba-Eco. Clases de problemas. Broadcasting. El problema de hacer un broadcast a todos los demás nodos de una red es un clásico en procesamiento distribuido. Un primer enfoque es suponer que algún nodo tiene la topología de la red en alguna forma de matriz donde la entrada [i, j] es true si los nodos están conectados. Resolver el broadcast con un spanning tree supone un nodo que tiene decidido el routing y lo envía a sus sucesores, conjuntamente con el mensaje m. Cada nodo a su vez recibe el mensaje m y el spanning tree t y visualiza cuales son los “hijos” a los que debe reenviar el mensaje. El proceso es asincrónico, pero podría ser sincrónico (menor eficiencia) 21 -6 -2004 Programación Concurrente 2004 - Clase 10 20

Paradigma de Prueba-Eco. Broadcasting con spanning tree. TYPE graph = BOOL [n, n]; CHAN

Paradigma de Prueba-Eco. Broadcasting con spanning tree. TYPE graph = BOOL [n, n]; CHAN probe[n] (graph spanning. Tree; message m); PROCESS Node [p=0 to n-1] { graph t; message m; receive probe[p] (t, m); FOR [q=0 to n-1 st q es “hijo” de p en t] send probe[q] (t, m); } PROCESS Iniciator { graph topology= topología de la red; graph t = spanning tree de topology; message m = mensaje a enviar por broadcast; send probe[S] (t, m); } 21 -6 -2004 Programación Concurrente 2004 - Clase 10 21

Paradigma de Prueba-Eco. Broadcasting SIN spanning tree. # El broadcast se complica cuando NO

Paradigma de Prueba-Eco. Broadcasting SIN spanning tree. # El broadcast se complica cuando NO se conoce la topología. CHAN probe[n] (message m); PROCESS Node [p=1 to n] { BOOL links[n] = vecinos del nodo p; INT num = nro. de vecinos; message m; receive probe[p] (m); # enviar el mensaje a todos los vecinos. FOR [q=0 to n-1 st links[q]] send probe[q] (m); # recibir num -1 copias redundantes de m FOR [q=1 to num-1] receive probe[p] (m); } PROCESS Iniciator { # ejecutado sobre el nodo S message m = mensaje a enviar por broadcast; send probe[S] (m); Programación Concurrente 2004 - Clase 10 } 21 -6 -2004 22

Paradigma de Prueba-Eco. Cómo obtener la topología de la red. La solución que construye

Paradigma de Prueba-Eco. Cómo obtener la topología de la red. La solución que construye el spanning tree es obviamente más eficiente, pero requiere conocer la topología de la red (sea un grafo con ciclos o un árbol sin ellos). La idea para obtener la topología de la red puede ser partir de un algoritmo muy similar al anterior (SIN spanning tree) pero pidiendo que en el ECO cada nodo envíe la información que tiene de sus vecinos. De este modo el nodo iniciador en un tiempo puede reconstruir las relaciones entre los nodos y armar el grafo de la topología. Posteriormente puede calcular el spanning tree asociado. 21 -6 -2004 Programación Concurrente 2004 - Clase 10 23

Algoritmos de token passing. Otro paradigma de interacción muy utilizado se basa en un

Algoritmos de token passing. Otro paradigma de interacción muy utilizado se basa en un tipo especial de mensaje o “token” que puede utilizarse para otorgar un permiso (control) o para recoger información global de la arquitectura distribuida. Un ejemplo típico es el caso de tener que controlar exclusión mútua distribuída (por ejemplo con semáforos distribuidos). Si por ejemplo tenemos una BDD, un monitor activo puede ser la solución más simple; más complejo es implementar semáforos distribuídos en la red (lo cual tiene un alto costo en mensajes tipo broadcast) y una tercer posibilidad que veremos a continuación basada en armar un token ring de procesos que cooperan. 21 -6 -2004 24 Programación Concurrente 2004 - Clase 10

Algoritmos de token passing. Si User[1: n] son un conjunto de procesos de aplicación

Algoritmos de token passing. Si User[1: n] son un conjunto de procesos de aplicación que contienen secciones críticas y no críticas. Hay que desarrollar los protocolos de interacción (E/S a las secciones críticas), asegurando exclusión mútua, no deadlock, evitar demoras innecesarias y eventualmente fairness. Para no ocupar los procesos User en el manejo de los tokens, ideamos un proceso auxiliar (helper) por cada User, de modo de manejar la circulación de los tokens. Cuando helper[i] tiene el token adecuado, significa que User[i] tendrá prioridad para acceder a la sección crítica. Este esquema se ha usado mucho en redes conectadas por un bus, donde todos los nodos tienen el token de acceso al bus cíclicamente. 21 -6 -2004 25 Programación Concurrente 2004 - Clase 10

Algoritmos de token passing. CHAN token[1: n] ( ), enter[1: n] ( ), go[1:

Algoritmos de token passing. CHAN token[1: n] ( ), enter[1: n] ( ), go[1: n] ( ), exit[1: n] ( ); Process Helper[i=1 to n] { WHILE (true) { receive token[i] ( ); IF (not empty (enter[i])) { receive enter[i] ( ) send go [i] ( ); receive exit[i] ( ); } send token [ i+1 MOD n] ( ); } } 21 -6 -2004 # Espera el token # User[i] lo necesita ? # Otorga el permiso # Wait por el exit # Pasa el token al siguiente 26 Programación Concurrente 2004 - Clase 10

Algoritmos de token passing. Process User[i=1 to n] { WHILE (true) { send enter[i]

Algoritmos de token passing. Process User[i=1 to n] { WHILE (true) { send enter[i] ( ); # Protocolo de Entrada a la SC receive go[i] ( ); SECCION CRITICA; send exit[i] ( ); # Protocolo de Salida de la SC SECCION NO CRITICA; } } El algoritmo tiende a ser fair si los procesos devuelven el token. En casos reales a veces la circulación de tokens se hace más “lenta” para no demorar los procesos en comunicaciones con los helpers. 21 -6 -2004 27 Programación Concurrente 2004 - Clase 10

Manager/Workers con un Bag of Tasks distribuido üEl concepto de bag of tasks que

Manager/Workers con un Bag of Tasks distribuido üEl concepto de bag of tasks que vimos supone que un conjunto de workers comparten una “bolsa” que contiene tareas o procesos independientes y datos compartidos. La idea es que los workers pueden hacer uso de los datos y tareas así como crear nuevas instancias o tareas quedan en la bolsa. Vimos algún ejemplo en LINDA manejando un espacio compartido de tuplas. üLa mayor virtud de este enfoque es la escalabilidad y la facilidad para equilibrar la carga de trabajo de los workers. üAhora analizaremos la implementación de este paradigma con mensajes en lugar de memoria compartida. Para esto un proceso manager implementará la “bolsa” manejando los tasks, comunicándose con los workers y detectando fin de tareas. 21 -6 -2004 28 Programación Concurrente 2004 - Clase 10

Ejemplo de Manager/Workers: Multiplicación de matrices ralas. Normalmente el producto de dos matrices A

Ejemplo de Manager/Workers: Multiplicación de matrices ralas. Normalmente el producto de dos matrices A y B de n x n elementos significa el desarrollo de n**2 productos internos de cada fila de A por las columnas de B a fin de obtener C[nxn]. Cada producto interno es la multiplicación elemento a elemento de dos vectores de dimensión n y su suma para obtener un único valor. Sin embargo cuando tenemos matrices “ralas” es decir con gran número de elementos en cero, podemos aprovechar esto para optimizar el producto. (una fila de A en 0 significa una fila de C en 0). INT length. A[n]; pair *elements. A[n]; 21 -6 -2004 # nro. De elementos no cero en una fila de A # puntero al índice y valor de cada no cero de A 29 Programación Concurrente 2004 - Clase 10

Manager/Workers: Multiplicación de matrices ralas. Proceso Manager. Module Manager TYPE pair = (INT index,

Manager/Workers: Multiplicación de matrices ralas. Proceso Manager. Module Manager TYPE pair = (INT index, DOUBLE value); op get. Task(result INT row, len; result pair [*] elems); op put. Result(INT row, len; pair [*] elems); BODY Manager INT length. A[n], length. C[n]; pair *elements. A[n], *elements. C[n]; # Se supone A inicializada INT next. Row=0, tasks. Done=0; 21 -6 -2004 30 Programación Concurrente 2004 - Clase 10

Manager/Workers: Multiplicación de matrices ralas. Proceso Manager. PROCESS Manager { WHILE (next. Row <

Manager/Workers: Multiplicación de matrices ralas. Proceso Manager. PROCESS Manager { WHILE (next. Row < n OR tasks. Done <n) { #Falta mandar tareas o recibir resultados IN get. Task(row, len, elems)----> row=next. Row; len = length. A[i]; copiar los pares de A[i] en elems next. Row++; [ ] put. Result (row, len, elems)----> length. C[row]=len; copiar los pares de elems a *elements. C[row]; task. Done++; } } 21 -6 -2004 31 Programación Concurrente 2004 - Clase 10

Manager/Workers: Multiplicación de matrices ralas. Los workers. PROCESS Worker [w = 1 to num.

Manager/Workers: Multiplicación de matrices ralas. Los workers. PROCESS Worker [w = 1 to num. Workers] { INT length. B[n]; pair *elements. B[n]; # se supone inicializada B INT row, length. A, length. C; pair *elements. A, *elements. C; INT r, c, na, nb; DOUBLE sum; WHILE (true) { #Obtener una fila de A y calcular la fila de C CALL get. Task(row, length. A, elements. A); length. C=0; FOR [ i=0 to n-1] INNER PRODUCT (i); send put. Result(row, length. C, elements. C); } } 21 -6 -2004 32 Programación Concurrente 2004 - Clase 10

Transacciones sobre un servidor Una transacción define una secuencia de operaciones realizadas por el

Transacciones sobre un servidor Una transacción define una secuencia de operaciones realizadas por el servidor, la cual debe ser conceptualmente “atómica” en presencia de múltiples clientes (usuarios) e incluso si el servidor o la estructura de soporte falla. Todos los protocolos de control de concurrencia tratan de demostrar la equivalencia con una secuencia ordenada de operaciones secuenciales. Veremos tres esquemas de control de concurrencia: bloqueos, control optimista y ordenación por tiempo. 21 -6 -2004 Programación Concurrente 2004 - Clase 10 33

Operaciones atómicas y Multithreading En un sistema concurrente con múltiples clientes y un servidor,

Operaciones atómicas y Multithreading En un sistema concurrente con múltiples clientes y un servidor, donde los clientes comparten objetos y métodos de acceso a los mismos, es imprescindible asegurar la atomicidad y consistencia de las operaciones sobre los datos multithreading + sincronización Trabajemos un poco el ejemplo de un servidor bancario y operaciones simples de los clientes Depositar, Extraer, Consultar Saldo, Consultar últimos Movimientos, Cambiar Clave, Pagar Servicios. . . Imaginemos el escenario de 3 o 4 tarjetas trabajando sobre la misma cuenta, además de otras operaciones “personales” o “demoradas”. JAVA Syncronized, Wait, Notify transparencia para el cliente. 21 -6 -2004 Programación Concurrente 2004 - Clase 10 34

Fallas en un sistema C/S. Fallas físicas del servidor= Establecer un proceso de recuperación

Fallas en un sistema C/S. Fallas físicas del servidor= Establecer un proceso de recuperación de fallas que mantenga la integridad de las transacciones y prevenga la propagación de errores. Fallas en los dispositivos de almacenamiento de datos Memoria RAM, Memoria de disco Chequeos de paridad, redundancia, discos espejados, avisos de fallas. Fallas en los sistemas de comunicación Retardos arbitrarios, duplicación o modificación de mensajes Necesidad de verificación, reenvío o cancelación de transacciones. Programación Concurrente 2004 - Clase 10 21 -6 -2004 35

Transacciones Atomicidad. Los clientes necesitan que sus solicitudes al servidor sean “atómicas”, es decir:

Transacciones Atomicidad. Los clientes necesitan que sus solicitudes al servidor sean “atómicas”, es decir: 1 - Estén libres de interferencia de otras operaciones de clientes concurrentes. 2 - Se completen exitosamente o bien se retrotraigan sin dejar ningún efecto si el servidor falla. Analicemos el caso de tres clientes sobre el mismo objeto cuenta bancaria, realizando las operaciones de Depositar, Extraer y Consultar. Supongamos un saldo inicial, que el que Deposita lo hace por un monto fijo, el que extrae por un porcentaje y el que Consulta requiere Saldo y ultimas operaciones. Programación Concurrente 2004 - Clase 10 21 -6 -2004 36

Propiedades de Transacciones Atómicas El objetivo de un servidor de transacciones es maximizar la

Propiedades de Transacciones Atómicas El objetivo de un servidor de transacciones es maximizar la concurrencia (eficiencia) Se permite la ejecución simultánea, siempre y cuando sean “secuenciables” o “secuencialmente equivalentes”. Esto significa dos aspectos relacionados con la atomicidad: 1 - Todo o nada una transacción o finaliza correctamente y los efectos de sus operaciones registrados o NO tiene ningún efecto. 2 - Aislamiento Cada transacción debe ser realizada sin interferencia con las demás. Sus resultados intermedios no debieran ser visibles a las demás. Programación Concurrente 2004 - Clase 10 21 -6 -2004 37

Propiedades ACID: Atomicity, Consistency, Isolation, Durability Atomicidad Una transacción debe ser a todo o

Propiedades ACID: Atomicity, Consistency, Isolation, Durability Atomicidad Una transacción debe ser a todo o nada. Consistencia Los datos y procesos resultantes de una transacción deben mantenerse consistentes por la ejecución de la misma. Aislamiento El tratamiento independiente y protegido de las transacciones evita que los estados intermedios condiciones otras transacciones. Durabilidad Los efectos de una transacción terminada correctamente deben reflejarse en forma estable en el sistema. 21 -6 -2004 Programación Concurrente 2004 - Clase 38 10

Acciones relacionadas con Fallas. Si falla un proceso servidor El proceso será reemplazado por

Acciones relacionadas con Fallas. Si falla un proceso servidor El proceso será reemplazado por otro que debe abortar todas las transacciones no finalizadas y usar un procedimiento de recuperación de fallas para restaurar el estado de los datos previos a la falla. Si el proceso servidor detecta una falla del cliente El servidor le da un tiempo de recuperación o de terminación a la/s transacciones del cliente y luego las aborta. Si un proceso cliente detecta una falla del servidor El cliente debiera informarse de la falla y tener una política para reiniciar las transacciones no concluídas al recuperarse el servidor. En algunos casos se requerirá la interacción humana (depósitos de cheques en los cajeros por ejemplo). 21 -6 -2004 Programación Concurrente 2004 - Clase 10 39

Conceptos de Control de Concurrencia Actualizaciones perdidas Tomemos el ejemplo de depósitos concurrentes correspondientes

Conceptos de Control de Concurrencia Actualizaciones perdidas Tomemos el ejemplo de depósitos concurrentes correspondientes al 20% del saldo, a partir de un saldo dado. Qué pasa si no se secuencializa la operación? ? Recuperaciones inconsistentes Tomemos el ejemplo de una sucursal que quiere el saldo de las cuentas en ella, mientras se están realizando una transferencia entre dos cuentas. Si bien el dinero no se extrae, la consulta puede dar errónea si no se aisla correctamente la transferencia. Equivalencia secuencial Hay que convertir las operaciones concurrentes en equivalentes secuenciales consistentes. Operaciones conflictivas Hay pares de operaciones que son naturalmente conflictivas y no se pueden realizar simultáneamente sin algún riesgo. Programación Concurrente 2004 - Clase 10 21 -6 -2004 40

Analicemos el problema de Lectores. Escritores BANCO. Discutamos primero el efecto de la prioridad

Analicemos el problema de Lectores. Escritores BANCO. Discutamos primero el efecto de la prioridad para lectores o escritores en el caso de múltiples clientes de una misma cuenta y considerando sólo Consultar/Depositar Generalicemos el problema a operaciones de Consultar/Depositar/Extraer/Listado de la cuenta, considerando diferentes prioridades. Analicemos ahora la duración temporal de las operaciones y si esta duración depende del cliente (de su ubicación física por ejemplo). Incorporemos el concepto de interacción entre cuentas sobre el mismo servidor (transferencias, débitos automáticos, operaciones en mostrador por ejemplo). 21 -6 -2004 41 Programación Concurrente 2004 - Clase 10

Recuperabilidad de transacciones abortadas Lecturas sucias El problema de leer un dato intermedio desde

Recuperabilidad de transacciones abortadas Lecturas sucias El problema de leer un dato intermedio desde un cliente, de una transacción en curso concurrentemente sobre el mismo objeto. Si esta segunda abortara (imaginemos un depósito), la lectura de la primera sería falsa y podría conducir a un error (imaginemos una extracción o consulta de saldo) Recuperación de la transacción Para evitar el efecto anterior, toda transacción que utilice algún dato intermedio dependiente de una transacción no finalizada debiera ESPERAR antes de darse por finalizada. Abortos en cascada La consecuencia inmediata de lo anterior es que pueden generarse abortos en cascada por “fallas” en transacciones de las que dependan muchas otras. Evitar esto implica MAYOR demora, evitando la lectura de datos de objetos con transacciones no terminadas. 21 -6 -2004 Programación Concurrente 2004 - Clase 10 42

Recuperabilidad de transacciones abortadas Escrituras prematuras Si tenemos dos operaciones concurrentes de escritura (supongamos

Recuperabilidad de transacciones abortadas Escrituras prematuras Si tenemos dos operaciones concurrentes de escritura (supongamos sumar 10% a una cuenta), al abortar una de ellas y tratar de recuperar el estado previo de la cuenta puede llevar a errores. Esto se debe a una “escritura prematura”. Para evitarlo las escrituras deben demorarse hasta completarse todas las demás escrituras pendientes sobre el mismo objeto. Ejecuciones estrictas de las transacciones Mayor seguridad, menor eficiencia. Versiones provisionales Son los valores transitorios de un objeto, mientras la transacción que opera sobre él no está terminada. Deben mantenerse para poder recuperarse de fallos. 21 -6 -2004 Programación Concurrente 2004 - Clase 10 43

Bloqueos. Las transacciones deben planificarse de forma que sus efectos sobre los datos compartidos

Bloqueos. Las transacciones deben planificarse de forma que sus efectos sobre los datos compartidos sean secuencialmente equivalentes. Los bloqueos exclusivos permiten asegurar esta equivalencia. Normalmente se habla de dos fases del bloqueo: una de crecimiento de la transacción, en que va bloqueando todo lo que requiere para su ejecución y otra de acortamiento o finalización, en la cual libera todos los objetos bloqueados. Bloquear es imprescindible para poder asegurar la consistencia. El grado de bloqueo definirá la eficiencia de la ejecución concurrente. 21 -6 -2004 44 Programación Concurrente 2004 - Clase 10

Bloqueo de dos fases estricto. Las transacciones pueden abortar = se requieren ejecuciones estrictas

Bloqueo de dos fases estricto. Las transacciones pueden abortar = se requieren ejecuciones estrictas para evitar las lecturas sucias y las escrituras prematuras. Bajo un régimen de ejecución estricta, una transacción que necesita leer o escribir un objeto debe ser retrasada hasta tanto toda otra transacción que haya escrito el mismo objeto esté terminada o abortada. Para hacer cumplir esta regla, se mantienen todos los bloqueos aplicados durante el progreso de una transacción hasta que ésta se consuma o aborta Bloqueo de dos fases estricto mayor seguridad y menor eficiencia. ES IMPORTANTE REGULAR LA GRANULARIDAD DE LOS BLOQUEOS. 21 -6 -2004 45 Programación Concurrente 2004 - Clase 10

Implementación de Bloqueos. En los servidores, normalmente hay un gestor de bloqueos que mantiene

Implementación de Bloqueos. En los servidores, normalmente hay un gestor de bloqueos que mantiene el conjunto de bloqueos (por ejemplo una tabla), donde cada bloqueo es una instancia de la clase BLOQUEO y mantiene al menos la siguiente info: üIdentificador del objeto bloqueado. üIdentificadores de las transacciones que mantienen el bloqueo. üTipo de Bloqueo. Notar que el gestor de bloqueo es un “scheduler” de recursos compartidos y como tal debe definirse una política de prioridades y/o asignación de los bloqueos. 21 -6 -2004 46 Programación Concurrente 2004 - Clase 10

Bloqueos indefinidos Un bloqueo indefinido es un estado en el que cada miembro de

Bloqueos indefinidos Un bloqueo indefinido es un estado en el que cada miembro de un grupo de transacciones está esperando por algún otro miembro para liberar el bloqueo. Se puede ver en un grafo como un ciclo equivalente a un deadlock. La prevención de un bloqueo indefinido es difícil, porque requeriría convertir en estático todo el pedido de recursos, y realizarlo al inicio de la transacción (tipo semáforo de sección crítica). La detección de un bloqueo indefinido debe llevar a elegir alguna transacción a abortar, para romper el bloqueo. Timeouts Ventajas para romper bloqueos indefinidos. Problemas cuando los sistemas están sobrecargados. 21 -6 -2004 Programación Concurrente 2004 - Clase 47 10

Análisis del problema de los múltiples clientes de Banco y los bloqueos Base de

Análisis del problema de los múltiples clientes de Banco y los bloqueos Base de datos general de los clientes. Datos distribuidos del cliente en las sucursales del Banco. Acceso concurrente del mismo cliente. Operaciones multicliente, concurrentes en el tiempo y distribuidas geográficamente. Dificultades para hacer bloqueos exclusivos seguros que no resulten en operaciones muy ineficientes. El problema de las comunicaciones. 21 -6 -2004 48 Programación Concurrente 2004 - Clase 10

Preguntas y Tareas para la promoción 1 - En la solución del autómata celular

Preguntas y Tareas para la promoción 1 - En la solución del autómata celular vista, qué cambiaría si los mensajes fueran sincrónicos? Sería más fácil de resolver en OCCAM o en ADA? 2 - Qué crítica le haría al algoritmo de pipelining para multiplicación de matrices? Cómo lo mejoraría? 3 - En su concepto, cuál es la mayor virtud del paradigma “bag of tasks”? 4 - Si Ud. recuerda el problema de las 8 reinas, cuál paradigma utilizaría para resolverlo en paralelo? Qué defecto le ve a su idea para resolverlo? MATERIAL PARA LEER QUE DEJO EN LA PAGINA WEB: Trabajo sobre el lenguaje SR Trabajo sobre el método de JACOBI Trabajo sobre los dining philosophers. 21 -6 -2004 49 Programación Concurrente 2004 - Clase 10