La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Coordinación en sistemas distribuidos

Presentaciones similares


Presentación del tema: "Coordinación en sistemas distribuidos"— Transcripción de la presentación:

1 Coordinación en sistemas distribuidos
Jose A. Gil Salinas Universidad Politécnica de Valencia Departamento de Informática de Sistemas y Computadores

2 Desarrollo Sincronización de relojes fiscos
Tiempo Universal Coordinado (UTC) Compensación de derivas Sincronización de relojes en sistemas distribuidos Tiempo lógico y relojes lógicos Diagramas de tiempo Relación causal y de concurrencia Vector de tiempo Tiempo real y de Lamport Coordinación distibuida Exclusión mutua distribuida Elección © José A. Gil

3 Sincronización de relojes físicos (I)
Tasa de deriva Diferencia entre la cuenta de un reloj y la de uno perfecto (10-6 aprox. 1 seg. cada días en un reloj de cuarzo) UTC Estándar internacional basado en relojes atómicos (10-13). Se le inserta ocasionalmente algún segundo “bisiesto” para sincronizarlo con el tiempo astronómico. Las señales UTC son sincronizadas y difundidas vía radio desde tierra y satélites (GOES, GPS, etc.) Existen receptores comerciales © José A. Gil

4 Sincronización de relojes físicos (II)
Compensación de la deriva Cuando un reloj “atrasa”  Se adelanta. Se habrán perdido algunos tics pero el tiempo continuará transcurriendo normalmente. Si un reloj “adelanta”  No se puede atrasar simplemente. La solución es hacerlo correr más despacio (Sw) Compensación lineal (atrasar o adelantar) Sea S la lectura del reloj Sw, sea H la lectura del reloj Hw y  el factor de compensación tal que: S(t) = H(t) + (t) La forma más sencilla de que  cambie S es linearmente con el reloj Hw: (t) = a H(t) + b Luego: S(t) = (1 + a) H(t) + b Supóngase que en un tiempo T, H = Th y S = Ts y que queremos actualizar el reloj en N ticks. Ts = (1 + a) Th + b T + N = (1 + a) (Th + N) + b Luego a = (T - Ts) / N b = Ts - (1 + a) Th © José A. Gil

5 Sincr. de relojes en sistemas distribuidos (I)
Método de Cristian [1989] S: Servidor de tiempo (sincronizado UTC) P: proceso que pide el tiempo actual (t) P S mr mt P debe actualizar su reloj a t + Ttrans (mt) ¿Cómo estimar Ttrans (mt)? Ttrans (mt)  Tround / 2 © José A. Gil

6 Sincr. de relojes en sistemas distribuidos (II)
Algoritmo de Berkeley (Gusella, Zatti [1989]) El maestro (servidor) muestrea periódicamente a los esclavos que le mandan sus tiempos. El maestro estima sus tiempos locales, observando los tiempos de round-trip y promediando los valores (incluido su reloj) El maestro envía un entero (positivo o negativo) indicando la cantidad de ajuste a cada esclavo. En el promedio de valores se desestiman lecturas espúreas (promedio tolerante a fallos). Problemas potenciales Fallos del maestro  Grupo de maestros, el cliente difunde la petición y utiliza la primera respuesta. Fallos en el reloj del maestro o servidor impostor. © José A. Gil

7 Sincr. de relojes en sistemas distribuidos (III)
NTP (Mills [1991]) Estándar de sincronización de relojes en internet. Sincronización con UTC Técnicas estadísticas de filtrado de tiempos, discriminando entre la calidad de diferentes servidores Servicio fiable Mediante redundancia de servidores y caminos y reconfiguración en caso de fallo. Sincronización con suficiente frecuencia Diseñado para ampliarse a un gran número de servidores y clientes. Protegido contra interferencias (maliciosas o accidentales) Mediante técnicas de autentificación. © José A. Gil

8 Sincr. de relojes en sistemas distribuidos (IV)
NTP Servidores primarios Conectados a reloj UTC Servidores secundarios Sincronizados con otros Jerarquía lógica Red de sincronización organizada por estratos El último estrato (hojas) los servidores se ejecutan en las workstations Los relojes de los estratos superiores son más precisos que los de estratos inferiores La subred de sincronización es reconfigurable en caso de fallos. 1 2 3 © José A. Gil

9 Sincr. de relojes en sistemas distribuidos (V)
NTP Modos de sincronización Multicast Redes locales Uno o más servidores difunden el tiempo Baja exactitud (suficiente para muchas aplicaciones) Llamada a procedimiento Similar al algoritmo de Cristian El servidor acepta peticiones y suministra su tiempo local. Modo simétrico Entre los servidores locales maestros y los estratos superiores En todos los modos se utiliza UDP estándar © José A. Gil

10 Sincr. de relojes en sistemas distribuidos (VI)
NTP En los modos de llamada a procedimiento y asimétrico los mensajes se procesan por parejas. En cada mensaje figuran lecturas de tiempo Tiempo local cuando el mensaje previo fue enviado Tiempo local cuando el mensaje previo fue recibido Tiempo local cuando el mensaje actual fue enviado m m’ Server B Server A Ti-3 Ti-1 Ti-2 Ti Tiempo Para cada par de mensajes (m, m’) se calcula una estimación del “offset” oi y del retardo di (tiempo de transmisión de los dos mensajes) © José A. Gil

11 Sincr. de relojes en sistemas distribuidos (VII)
NTP Sea o el offset real y t, t’ los tiempos de transmisión de los mensajes m, m’ Entonces Ti-2 = Ti-3 + t + o Ti = Ti-1 + t’ - o Definiendo a = Ti-2 - Ti-3 b = Ti-1 - Ti Obtenemos o = oi + (t’ - t) / 2 con oi = (a + b) / 2 (estimador) di = t + t’ (precisión) m m’ Server B Server A Ti-3 Ti-1 Ti-2 Ti Tiempo © José A. Gil

12 Sincr. de relojes en sistemas distribuidos (VIII)
NTP Los servidores aplican un algoritmo de filtrado a los últimos 8 pares <oi, di> calculando la calidad de las medidas mediante un estimador (filtro de dispersión). Se escoge el oj que corresponde al menor dj para estimar o En general, un servidor NTP puede intercambiar mensajes con varios servidores. Además del filtrado de datos de cada servidor, se aplica una selección de servidores basada en la dispersión de sincronización (suma de filtros de dispersión desde la raíz hasta el servidor). En 1991 operaban alrededor de servidores primarios y unos 2000 servidores secundarios con unas tasas de errores de sincronización inferiores a 30 ms en el 99% de las muestras. © José A. Gil

13 Tiempo lógico y relojes lógicos
Sistema distribuido N procesos secuenciales (hilo simple) P1, ..., PN Comunicación mediante mensajes (uno a uno) Entrega de mensajes no FIFO Retardos de transmisión no nulos No memoria común Los cambios de estado de los procesos se denominan eventos (atómicos) Sea Ei el conjunto de eventos del proceso Pi Ei esta totalmente ordenado (Pi es secuencial) Ei = {ei1, ei2, ei3, ...} (enumeración estándar) E = E1  ···  EN Tres clases de eventos (envío, recepción e internos) Los eventos de recepción producen tanto la recepción del mensaje como el cambio de estado del proceso © José A. Gil

14 Diagramas de tiempo Diagramas de tiempo P1 P2 P3 e11 e12 e13 e14 e21
Instante de tiempo-real El evento e puede afectar causalmente al evento e’ sii hay un camino de izquierda a derecha en el diagrama temporal de e a e’ © José A. Gil

15 Relación causal y de concurrencia (I)
Definición Dada la enumeración de Ei, la relación causal   E×E es la menor relación transitiva que satisface: (1) Si eij, eik suceden en el proceso Pi, y j < k entonces eij  eik (2) Si s  Ei es un envío y r  Ej es su recepción, entonces s  r Relación de concurrencia: Definición: Se define la relación de concurrencia   E×E como: e  e’ sii  (e  e’) y  (e’  e) Observese que la relación de concurrencia no es transitiva e11  e 31; e31  e22; e11  e22 P1 P2 P3 e11 e12 e13 e14 e21 e22 e23 e31 e32 e33 Instante de tiempo-real © José A. Gil

16 Relación causal y de concurrencia (II)
Historia causal Se pueden determinar las relaciones causales asignando a cada evento e su historia causal C(e) Definición: Se define la historia causal de e, denotada como C(e) como: C(e) = {e’  E | (e’  e)}  {e} Se define la proyección de C(e) en Ei, denotada como C(e)[i] como: C(e)[i] = C(e)  Ei Lema: Si e  e’ la causalidad y la historia causal se relacionan de la siguiente forma: e  e’ sii e  C(e’) e  e’ sii e  C(e’)  e’  C(e) Las historias causales C(e) y C(e’) bastan para determinar la causalidad o concurrencia de ambos eventos © José A. Gil

17 Relación causal y de concurrencia (III)
Algoritmo de cálculo de C(e) Sea Ei = {ei1, ei2, ei3, ...} la enumeración estándar del proceso Pi, se definen los eventos vacíos ei0 para cada proceso tal que C(ei0) =  Si eij  Ei es un evento interno o un evento de envío y eij-1 es su predecesor local computar C(eij) C(eij) = C(eij-1)  {eij} Si eij  Ei es un evento de recepción, s su correspondiente evento de envío y eij-1 es su predecesor local computar C(eij) C(eij) = C(eij-1)  C{s}  {eij} El principal inconveniente de este algoritmo es que los conjuntos de historia casual son del orden del total número de eventos producidos durante una computación distribuida. © José A. Gil

18 Vector de Tiempo (I) Vector de tiempo
Obsérvese que C(e) = C(e)[1]  ···  C(e)[N] Si Ek = {ek1, ..., ekm} es una enumeración estándar, entonces ekj  C(e)[k] implica que ek1, ..., ekj-1  C(e)[k] Es más, para cada k el conjunto C(e)[k] está caracterizado suficientemente por el índice mayor de todos sus miembros (su cardinalidad) Luego C(e) puede representado de forma única por un vector V(e) de dimensión N en el que cada componente V(e)[k] = |C(e)[k]| ; (k = 1, ..., N) Ejemplo, V(e23) = [3, 3, 0] P1 P2 P3 e11 e12 e13 e14 e21 e22 e23 e31 e32 e33 Instante de tiempo-real © José A. Gil

19 Vector de Tiempo (II) Aplicando V(C(e)  C(e’)) = sup{V(e), V(e’)} y transladando las operaciones de causalidad a operaciones con vectores el algoritmo queda: Algoritmo de cálculo del vector de tiempo Vi del proceso Pi Inicialmente Vi[k] := 0 para k = 1, ..., N En cada evento interno e, el proceso Pi incrementa la componente i de Vi; Vi[i] := Vi[i] + 1 En cada envío de mensaje m, el proceso Pi incrementa la componente i de Vi; Vi[i] := Vi[i] + 1 y añade el nuevo vector al mensaje. En cada recepción de mensaje m con vector de tiempo añadido V(m), el proceso Pi incrementa la componente i de Vi; Vi[i] := Vi[i] + 1 y luego lo actualiza Vi := sup{Vi, V(m)} V(e) es el vector de estampación de tiempo del evento e © José A. Gil

20 Vector de Tiempo (III) Ejemplo de vectores de estampación de tiempo P1
1 0 0 0 1 1 2 2 3 3 2 3 © José A. Gil

21 Vector de Tiempo (IV) Caracterización de la causalidad con el vector de tiempo Definición: Sea E el conjunto de eventos, (S, <) un conjunto arbitrario parcialmente ordenado y : E  S una proyección. (1) (, <) se dice que es consistente con la causalidad si e, e’  E: (e) < (e’) si e  e’ (2) (, <) se dice que caracteriza la causalidad si e, e’  E: (e) < (e’) sii e  e’ Sean u, v vectores de tiempo de dimensión m (1) u  v sii u [k]  v [k] para k = 1, ..., m (2) u < v sii u  v  u  v (3) u  v sii (u < v)  (v < u) © José A. Gil

22 Vector de Tiempo (V) Caracterización de la causalidad con el vector de tiempo (cont.) Teorema: Para dos eventos e, e’ se cumple (1) e  e’ sii V(e) < V(e´) (2) e  e’ sii V(e)  V(e´) Lema: Para dos eventos e  Ei, e’  Ej, e  e’ se cumple (1) e  e’ sii V(e)[i]  V(e´)[i] (2) e  e’ sii V(e)[i] > V(e´)[i]  V(e’)[j] > V(e)[j] Esto es, se puede determinar la relación causal entre dos eventos comparando solamente dos componentes de sus vectores si se conocen sus orígenes Pi y Pj Ejemplo El Vector de tiempo caracteriza la causalidad © José A. Gil

23 Tiempo real y tiempo de Lamport (I)
Sea t(e) el instante de tiempo real en el que ocurre e El tiempo real ideal (t, <) es consistente con la causalidad Sin embargo, no caracteriza la causalidad porque t(e) < t(e’) no necesariamente implica que e  e’ Otro problema adicional es que generalmente no es posible implementar un conjunto de relojes de tiempo real distribuidos. Lo que si se puede implementar es un sistema de relojes lógicos que garantice que las estampaciones de tiempo sean consistentes con la causalidad (tiempo de Lamport) © José A. Gil

24 Tiempo real y tiempo de Lamport (II)
Definición: El tiempo de Lamport es una proyección L: E   que proyecta eventos sobre naturales y que se define recursivamente como: (1) si e es un evento interno o de envío si e no tiene predecesor local, entonces L(e) = 1 si e tiene un (único) predecesor e’, entonces L(e) = L(e’) + 1 (2) si r es un evento de recepción y s es el correspondiente evento de envío si r no tiene predecesor local, entonces L(r) = L(s) + 1 si r tiene un (único) predecesor e’, entonces L(r) = max{L(s), L(e’)} + 1 © José A. Gil

25 Tiempo real y tiempo de Lamport (III)
Ejemplo de estampación de Lamport P1 P2 P3 [1] [4] [5] [7] [6] [2] [3] e11 e12 e13 e14 e21 e22 e23 e31 e32 e33 El tiempo de Lamport (L, <) Es consistente con la causalidad No caracteriza la causalidad L(e11) < L(e22) siendo causalmente independientes El tiempo de Lamport implica un orden parcial distinto de la relación causal. © José A. Gil

26 Tiempo real y tiempo de Lamport (IV)
Extensión de la estampación de Lamport Definición: Sean e  Ei, e’  Ej, y sean L(e), L(e’) su estampaciones de Lamport. Se define el orden total de eventos   E  E como: (1) Si L(e) < L(e’), entonces e  e’ (2) Si L(e) = L(e’), y se cumple que i < j entonces e  e’ (L, ) es consistente con la causalidad aunque no es consistente con el tiempo real En el ejemplo t(e32) < t(e11) y L(e32) > L(e11) El tiempo de Lamport puede ser utilizado como un sustituto del tiempo real. Ni el tiempo de Lamport ni el tiempo real caracterizan la causalidad y no pueden ser usados para probar que dos eventos no están relacionados causalmente Se necesitan conceptos mas potentes: Vector de Tiempo. © José A. Gil

27 Compresión de estampaciones (I)
Compresión de las estampaciones de mensajes Todos los mensajes deben ser estampados. Si el núm. De procesos (N) es muy grande, el volumen de la informació de estampación puede ser inaceptable. Observación: (1) Incluso para un número N elevado de procesos pocos de ellos interactúan frecuentemente por paso de mensajes. (2) Si se compara un evento e con su sucesor local e’ solamente cambian unas pocas componentes de sus vectores de tiempo © José A. Gil

28 Compresión de estampaciones (II)
Técnica de compresión de Singal y Kshemkalyani Cada proceso Pi mantiene dos vectores adicionales: LSi (last sent) y LUi (last update). LSi[j] := Vi[i] cuando Pi envía un mensaje a Pj LUi[j] := Vi[i] cuando Pi modifica la componente Vi[j] En vez de estampar los mensajes con V(m) = Vi, después de incrementar Vi[i] y modificar LUi[i] := Vi[i], el proceso se comporta como sigue: Para k = 1, ..., N si LUi[k] > LSi[j] Se añade un par (k, Vi[k]) a un conjunto (inicialmente vacío) S(m) El conjunto S(m) es enviado en m a Pj y LSi[j] := Vi[i] S(m) contiene exactamente aquellas componentes de Vi que han sido modificadas desde la última transmisión a Pi Se requiere un comportamiento FIFO de los canales © José A. Gil

29 Compresión de estampaciones (III)
Ejemplo compresión de Singal y Kshemkalyani P1 P2 P3 e11 e12 e13 e14 e21 e22 e23 e31 e32 e33 1 0 0 2 1 2 3 4 3 3 5 0 2 1 {(2, 1)} {(2, 1), (3, 2)} {(2, 1), (3, 3)} {(2, 3), (3, 3)} e15 © José A. Gil

30 Compresión de estampaciones (IV)
Pérdida de información causal P1 P2 P3 1 0 0 0 1 2 3 1 2 2 3 {(1, 1)} {(1, 2)} 4 {(2, 2)} {(2, 3)} P1 P2 P3 1 0 0 2 1 2 3 1 2 3 {(1, 1)} {(1, 2)} 4 {(1, 2), (2, 2)} {(2, 3)} © José A. Gil

31 Reconstrucción de los vectores de tiempo (I)
El tamaño de las estampaciones en la compresión presentada es lineal con N en el caso peor Se puede reducir más la información a costa de de incrementar el tiempo de cálculo de los vectores de tiempo. En algunos casos, este tiempo es demasiado elevado para aplicaciones on-line. Sin embargo se pueden utilizar para aplicaciones off-line (trazas). Un diagrama de tiempo es básicamente un grafo dirigido acíclico (ejemplo) © José A. Gil

32 Reconstrucción de vectores de tiempo (II)
Ejemplo de grafo de un diagrama de tiempo e11 e12 e13 e14 e15 e21 e22 e23 e31 e32 e33 © José A. Gil

33 Reconstrucción de los vectores de tiempo (III)
Existen algoritmos para computar los vértices alcanzables en grafos dirigidos, pero no explotan convenientemente la estructura de los diagramas de tiempo, en particular: Cada vértice (evento) tiene como mucho dos predecesores directos Los vértices pertenecientes al mismo proceso están ordenados totalmente. Un grafo de N procesos contiene N cadenas “locales” Ej. El algoritmo de Floid-Warshall necesita O(K3) pasos para determinar la matriz de alcanzabilidad de un grafo acíclico con K vértices. Se pueden obtener soluciones más eficientes para el caso de los diagramas de tiempo © José A. Gil

34 Reconstrucción de los vectores de tiempo (IV)
Algoritmo de búsqueda del vector de tiempo V(e) TimeVector (e: Event) Assign 0 to all components of V(e); GraphSearch(e); return V(e); end TimeVector; GraphSearch (z: event) Mark z as visited; Determine i such that z  Ei; V(e)[i] := V(e)[i] + 1; if z has an unmarked direct local predecessor x  Ei, then GraphSearch(x) endif; if z has an unmarked direct non-local predecessor y  Ei, then GraphSearch(y) endif; end GraphSearch; La complejidad es lineal con con el número de eventos Se puede acortar la búsqueda (N cadenas ordenadas de eventos) © José A. Gil

35 Reconstrucción de los vectores de tiempo (V)
Para acceder a las cadenas ordenadas de eventos es necesario que cada proceso mantenga el evento más reciente de cada proceso que lo influenció directamente e11 e12 e13 e14 e21 e22 e23 e31 e32 e33 e15 © José A. Gil

36 Reconstrucción de los vectores de tiempo (VI)
Aproximación de Fowler y Zwaenepoel En “sus vectores de tiempo” (D) sólo se recogen dependencias directas Se pueden calcular las dependencias transitivas del vector de tiempos (V) con menos esfuerzo que con el algoritmo anterior. Cada proceso Pi mantiene un vector de dependencia Di Inicialmente Di[j] := 0  j = 1, ..., N A cada evento en Pi Di[i] := Di[i] + 1 Al enviar el mensaje m, Pi añade (una vez incrementado) D(m) D(m) = Di[i] Al recibir el mensaje m de Pj con D(m) añadido, Pi actualiza Di[j] := max{Di[j], D(M)} © José A. Gil

37 Reconstrucción de los vectores de tiempo (VII)
Ejemplo de vectores de dependencia directa P1 P2 P3 e11 e12 e13 e14 e21 e22 e23 e31 e32 e33 1 0 0 2 2 3 4 3 5 0 1 2 3 1 1 2 3 e15 © José A. Gil

38 Reconstrucción de los vectores de tiempo (VIII)
Ejemplo de grafo de dependencia directa Los vectores de dependencia directa son vectores de punteros e11 e12 e13 e14 e21 e22 e23 e31 e32 e33 1 0 0 2 2 3 4 3 3 5 0 1 2 1 e15 © José A. Gil

39 Reconstrucción de los vectores de tiempo (IX)
Algoritmo de Baldy de reconstrucción del vector de tiempo VectorTime (e: Event) V(e) := D(e); repeat /* bucle exterior: ejecutado como mucho N veces */ old_V := V(e); for k := 1 to N do /* bucle interior: ejecutado N veces */ V(e) := sup (V(e), Dk(old_V[k])); /* N comparaciones */ endfor until old_V = V(e) endrepeat; return V(e) end VectorTime e11 e12 e13 e14 e21 e22 e23 e31 e32 e33 1 0 0 2 2 3 4 3 3 5 0 1 2 1 e15 © José A. Gil

40 Caracterización de la concurrencia
Se puede representar plenamente la causalidad mediante los vectores de tiempo Sin embargo, pese a que existen varios refinamientos a la aproximación básica de los vectores de tiempo, la caracterización de la causalidad es intrínsecamente compleja. Existen formas alternativas de evaluar la causalidad. Una aproximación muy utilizada es la de las REGIONES CONCURRENTES. Para determinadas aplicaciones (ej.: detección de condiciones de carrera) es suficiente conocer cuando dos eventos son concurrentes o no (no interesa conocer e  e’ ó e’  e) © José A. Gil

41 Regiones concurrentes y mapas de concurrencia (I)
Determinar la concurrencia es simple. Ejemplo: Regiones concurrentes (o causalmente independientes) respecto a x P1 P2 P3 x © José A. Gil

42 Regiones concurrentes y mapas de concurrencia (II)
Definición Sean x, y  Ei, se cumple la relación x ~ y sii  z  E\Ei, se satisface: x || z sii y || z x  z sii y  z z  x sii z  y Definición de BLOQUE DE DEPENDENCIA El bloque de dependencia DB de un evento eij se caracteriza como una clase de equivalencia con respecto a (Ei, ~), esto es DB(eij) ::= {x  Ei | x ~ eij} La definición implica que las fronteras entre los bloques de dependencia dentro de un mismo proceso necesariamente se encuentran después de un evento de emisión o antes de un evento de recepción. © José A. Gil

43 Regiones concurrentes y mapas de concurrencia (III)
Ejemplo de bloques de dependencia P1 P2 P3 © José A. Gil

44 Regiones concurrentes y mapas de concurrencia (IV)
La relación de causalidad entre eventos introduce dependencias entre los diferentes bloques El primer evento de un bloque (evento sucesor) puede depender de la aparición del último evento (evento predecesor) de otro bloque en otro proceso Los MAPAS DE CONCURRENCIA se obtienen particionando el diagrama de tiempo mediante líneas verticales en SEGMENTOS DE HISTORIA de forma que: Bloques de dependencia dependientes causalmente en distintos procesos estén en segmentos distintos Bloques de dependencia de procesos distintos que aparezcan dentro del mismo segmento deben de ser concurrentes. © José A. Gil

45 Regiones concurrentes y mapas de concurrencia (V)
Ejemplo de mapa de concurrencia P1 P2 P3 © José A. Gil

46 Regiones concurrentes y mapas de concurrencia (VI)
Transformaciones los mapas de concurrencia que no afectan a las relaciones causales: Se puede aumentar o disminuir el tamaño horizontal de un bloque de dependencia, siempre y cuando no se solapen bloques del mismo proceso. Se puede cambiar la posición de los eventos dentro de un bloque siempre y cuando no se altere el orden relativo de los mismos Los bloque de dependencia pueden ser trasladados a la izquierda o a la derecha, incluso atravesando líneas de segmentos de historia, siempre y cuando el bloque de dependencia de un evento predecesor y el bloque de dependencia del evento sucesor correspondiente se encuentren en segmentos de historia distintos. © José A. Gil

47 Regiones concurrentes y mapas de concurrencia (VII)
Un mapa de concurrencia, junto con sus transformaciones válidas representan todas las ordenaciones posibles consistentes con la causalidad. Para dos eventos dados e, e’ se cumple que son concurrentes si y solo si existe una transformación del mapa de concurrencia tal que ambos aparecen en el mismo segmento de historia. © José A. Gil

48 Regiones concurrentes y mapas de concurrencia (VIII)
Ejemplo P1 P2 P3 P1 P2 P3 © José A. Gil

49 Regiones concurrentes y mapas de concurrencia (IX)
El problema de caracterizar la causalidad es reducible esencialmente a caracterizar la concurrencia. Notese que una vez determinada la no concurrencia entre dos eventos x e y se puede utilizar el tiempo de Lamport para distinguir entre x  y ó y  x © José A. Gil

50 Evaluación de predicados globales
A veces es necesario conocer cuando se cumple o no una determinada propiedad en una computación distribuida (ej.: debugging) Formalmente las propiedades son predicados del estado global. Los estados globales en los que se evalúan los predicados deben ser consistentes con la causalidad Si el efecto de un evento es reflejado por el estado, entonces su causa también lo debe ser. O lo que es lo mismo, un observador de la computación nunca debe observar el efecto antes de su causa. Sin embargo, es posible el caso de que distintos observadores vean diferentes estados globales consistentes mutuamente exclusivos. Puede suceder por tanto que un observador establezca la veracidad de un predicado, mientras que otro establezca su falsedad. © José A. Gil

51 Computación, observación y estado global (I)
Una computación distribuida es una ejecución de un programa distribuido que consiste en comunicar procesos secuenciales. Debido al no-determinismo de la transferencia de los mensajes, un mismo programa puede dar origen a múltiples computaciones. Toda computación se corresponde con un único diagrama en los ejes de tiempo-real Toda observación de una computación está sometida retardos de notificación no predecibles. Una computación distribuida permite diferentes vistas (diagramas de tiempo diferentes pero equivalentes) Dos diagramas de tiempo se consideran equivalentes si uno puede ser transformado en el otro comprimiendo o expandiendo los ejes de los procesos o parte de ellos sin cambiar el orden relativo de los procesos. © José A. Gil

52 Computación, observación y estado global (II)
Ejemplo de vistas equivalentes P1 P2 e11 e12 e21 e22 e21 e11 e22 e12 Observación 1 P1 P2 e11 e12 e21 e22 Computación original e11 e12 e21 e22 Observación 2 e11 e12 P1 P2 e21 e22 © José A. Gil

53 Computación, observación y estado global (III)
Definición: Una observación de una computación distribuida es una extensión lineal (E, «) de la relación de causalidad (E, ), tal que para todos lo eventos e  E el conjunto {e’  E | e’ « e} es finito. Al requerir una cardinalidad finita se asegura que, incluso para un conjunto infinito de eventos, cada evento de un proceso es observado en tiempo finito. Una entidad que es capaz de obtener una observación específica es denominada un observador. Estado global: Es una colección de los estados locales de todos los procesos en un determinado instante de tiempo (real). Definición de corte consistente Un subconjunto finito C  E se denomina corte consistente si y solo si e  C implica e’  C para todo e’  e © José A. Gil

54 Computación, observación y estado global (IV)
Ejemplo de cortes consistentes P1 P2 e11 e21 e22 e12 e13 e14 e15 e16 e23 e24 e25 Corte C1 C2 La historia causal de un evento C(e) es un corte consistente. © José A. Gil

55 Computación, observación y estado global (V)
El estado global de un corte consistente S(C) consiste en en los estados locales de todos los procesos tomados justo después del último evento del proceso que pertenezca a C (o el estado inicial si no existe tal evento) El estado global de un corte consistente S(C) se alcanza ejecutando sucesivamente, a partir del estado inicial, todos los eventos e  C en un orden lineal que sea consistente con la relación causal. Rejilla de estados: Una forma conveniente de representar los cortes consistentes de una computación distribuida es mediante la rejilla de estados N-dimensional © José A. Gil

56 Computación, observación y estado global (VI)
Ejemplo de rejilla de estados e11 e12 e13 e14 e15 e16 e25 e24 e23 e22 e21 P1 P2 P1 P2 e11 e21 e22 e12 e13 e14 e15 e16 e23 e24 e25 Corte C1 C2 © José A. Gil

57 Computación, observación y estado global (VII)
Camino completo Definición: Sea L la rejilla de estados de una computación distribuida de N procesos y sea C(p) el corte consistente de un punto de intersección válido La secuencia p0, p1, p2, ... de puntos de intersección válidos se denomina camino a través de L si C(p0)  C(p1)  C(p2)  ... y si |C(pi)| = i para todo pi contenido en la secuencia Un camino se denomina completo si para todo e  E existe algún punto de intersección válido pi en él tal que e  C(pi) e11 e12 e13 e14 e15 e16 e25 e24 e23 e22 e21 P1 P2 © José A. Gil

58 Computación, observación y estado global (VIII)
Nótese que cada estado global consistente se corresponde con un corte consistente C(p) y que siempre hay un camino completo que contiene a p cada estado global consistente es observado por al menos un observador Sin embargo, un camino completo no tiene por que contener todos los puntos de intersección válidos una observación solo contiene un subconjunto de todos los estados globales posibles Como consecuencia, dos observadores pueden observar diferentes conjuntos de estados globales consistentes si un predicado determinado se cumple para un determinado estado global y no se cumple para el resto, es posible que un observador lo de cómo válido, mientras que otro lo da como inválido. © José A. Gil

59 Posiblemente y definitivamente (I)
Definición: Sea  un predicado definido en los estados globales de una computación distribuida, L su rejilla de estados, y “ se mantiene en p” significa que el predicado se cumple en el correspondiente punto de intersección. Posiblemente  se cumple sii existe un camino P a través de L y un punto de intersección p en P tal que  se cumple en p Definitivamente  se cumple sii todo camino completo a través de L contiene un punto de intersección p tal que  se cumple en p Estabilidad Un predicado  se denomina estable sii satisface: Si  se cumple en el estado S(C) correspondiente a un corte consistente C entonces  se cumple en S(C’) tal que C  C’ Lema Para un predicado estable , posiblemente  y definitivamente  son equivalentes © José A. Gil

60 Posiblemente y definitivamente (II)
Cálculo de definitivamente en cómputos finitos Sea |C(p)| el nivel del punto de intersección p Se basa en calcular iterativamente los conjuntos A0, A1, A2, ... donde Ai es el conjunto de puntos de intersección válidos de nivel i, tal que todos los p de Ai son accesibles mediante un camino que no contenga ningún punto de intersección de nivel inferior que satisfaga . A0 es el origen de la rejilla de estados Ai+1 comprende aquellos puntos de intersección válidos p para los cuales existe un predecesor inmediato p’  Ai tal que  no se cumple en p’. Si se llega a Aj vacío, entonces se cumple definitivamente  Si se alcanza el nivel máximo l = |E| y todos los elementos de Al no satisfacen , entonces no se cumple definitivamente  © José A. Gil

61 Posiblemente y definitivamente (III)
Cálculo de posiblemente en cómputos finitos El algoritmo es similar al de definitivamente Tan pronto como Ai contenga un punto de intersección válido que satisfaga , el algoritmo termina y posiblemente  se cumple. Si no, se computa Ai+1 Para la determinación de los puntos de intersección válidos se utiliza el vector de tiempo. Ambos algoritmos se basan en la enumeración de puntos de intersección válidos, luego son lineales con el número de intersecciones válidas. Desafortunadamente, estas pueden ser del orden de O(KN) © José A. Gil

62 Navegando por la rejilla de estados (I)
Existen algunos casos en los que se puede detectar posiblemente o definitivamente más eficientemente. Determinados predicados globales pueden descomponerse en conjunciones o disyunciones de predicados locales. Podemos navegar por la rejilla de estados buscando un punto de intersección donde se cumpla  moviéndonos en una sola dimensión, y cambiando de dirección solamente cuando sea necesario. Esto es, se ejecutan los eventos de un determinado proceso hasta que se alcanza un estado local que puede contribuir a  o hasta que las relaciones causales nos fuerzan a cambiar de dirección. De esta forma se reduce la complejidad computacional de O(KN) a O(KN) = O(|E|) © José A. Gil

63 Navegando por la rejilla de estados (II)
Sin embargo, ejecutar una computación distribuida de esta forma puede introducir distorsiones (efecto prueba). Una forma de evitarlo es mediante la recogida de trazas y la reconstrucción (off-line) a posteriori. Se pueden ir almacenando los eventos en colas (una por proceso). Más tarde se irán extrayendo de la cola correspondiente para realizar un paso en un proceso. Desventajas: El número de eventos relevantes es elevado El manejo de las colas de eventos puede ser un cuello de botella por lo que las trazas pueden producir efectos prueba. Alternativa: Reproducción (“on-line”) de la computación original Trazar exclusivamente los eventos no deterministas (selección de mensajes, lectura de datos volátiles, ...), en lugar de todos los que afectan a  Durante la reproducción, cada proceso consulta sus trazas cuando se ha de tomar una decisión no determinista. © José A. Gil

64 Navegando por la rejilla de estados (III)
Algoritmo que detecta posiblemente  para un predicado  descomponible localmente. (1) Poner el sistema en su estado inicial (2) Comprobar si se cumple  para el estado global actual Si se cumple  terminar con posiblemente  = TRUE (3) Seleccionar algún proceso ejecutable P (cuyo siguiente paso de ejecución no dependa de un evento externo que todavía no haya sido ejecutado) de acuerdo con las siguientes preferencias: a) un proceso que no satisfaga su predicado local, sino: b) un proceso que esté bloqueando a otro (4) Ejecutar el siguiente paso en el proceso P seleccionado hasta que: a) Si el predicado local de P se cumple Continuar en el paso (2) b) Si P se bloquea en un evento de recepción Continuar en el paso (3) c) Si P termina Terminar el algoritmo con posiblemente  = FALSE © José A. Gil

65 Navegando por la rejilla de estados (IV)
Ejemplo: Detección de posiblemente    ((x = 1)  (y = 1)) 1  (x = 1); 2  (y = 1) P1 P2 e11 e21 e22 e12 e13 e14 e15 e16 e23 e24 e25 x:=4 x:=1 x:=2 y:=2 y:=1 e11 e12 e13 e14 e15 e16 e25 e24 e23 e22 e21 P1 P2 © José A. Gil

66 Navegando por la rejilla de estados (V)
Ventajas del método No requiere estampación de mensajes No requiere vectores de tiempo No requiere la construcción explícita de la rejilla de estados. La información causal requerida está representada implícitamente por la forma en que evoluciona el estado global. Inconvenientes Sólo puede comprobar un predicado global al mismo tiempo © José A. Gil

67 Navegando por la rejilla de estados (VI)
Ejemplo: Detección de posiblemente    (((x = 1)  (y = 1))  ((x = 2)  (y = 2)) 1  ((x = 1)  (x = 2)) ; 2  ((y = 1)  (y = 2)) P1 P2 e11 e21 e22 e12 e13 e14 e15 e16 e23 e24 e25 x:=1 x:=4 y:=2 y:=1 El algoritmo no es aplicabe a la detección de predicados globales arbitrarios e11 e12 e13 e14 e15 e16 e25 e24 e23 e22 e21 P1 P2 © José A. Gil

68 Actualmente (I) Otras aproximaciones se basan en detectar predicados globales en tiempo real mediante observadores Definición: El orden toral (E, <) de los eventos de una computación distribuida de acuerdo con su aparición en tiempo-real se denomina observación en tiempo-real. El predicado global actualmente  definido en los estados locales de los procesos de una computación distribuida se dice que se cumple Si  todavía se cumple en el momento en el que es informado por algún proceso dedicado a la monitorización. La detección de actualmente  es superior a posiblemente , ya que esta última puede ser detectada mucho tiempo después de que fuese satisfecha por primera vez. La detección de actualmente  implica comúnmente la introducción de “efectos prueba”. © José A. Gil

69 Actualmente (II) Algoritmo de detección de actualmente  de Cooper y Marzullos Antes de iniciar la computación el monitor es informado del estado inicial de los procesos Cuando un proceso ejecuta un evento “no invalidante” que puede hacer verdadero  informa (asíncronamente) al monitor, el cual mantiene el último estado recibido de cada proceso. Cuando un proceso va a ejecutar un evento invalidante (que puede hacer  falso), informa al monitor de su estado y se bloquea antes de ejecutarlo. Ante esta notificación el monitor posiciona el estado del proceso a “indefinido” (indefinido = no se debe extraer ninguna conclusión hasta que se reciba su información de estado) y drena todos los enlaces del resto de procesos (recogiendo sus estados actuales) mediante mensajes REQ-ACK. Cuando todos los ACK han sido recibidos: Si no se cumple  el monitor desbloquea el proceso Si se cumple  se notifica y se termina el algoritmo Cuando un proceso que estaba bloqueado recibe el mensaje de desbloqueo ejecuta el evento por el que estaba esperando y envía su nuevo estado al monitor. © José A. Gil

70 Actualmente (III) Ejemplo de detección de actualmente  ?
Detección de actualmente   (x1 + x2  5) x1 := 2 wait_on(x1 := 1) x1 := 1 P1 “block” “unblock” x2 := 1 x2 := 2 P2 REQ ACK P2 ? © José A. Gil

71 Actualmente (IV) Ejemplo de detección de actualmente  ? ?
Detección de actualmente   (x1 + x2  5) x1 := 2 wait_on(x1 := 1) x1 := 1 P1 “block” “unblock” x2 := 1 x2 := 2 x2 := 3 P2 REQ ACK P2 ? ? © José A. Gil

72 Actualmente (V) Ejemplo de detección de actualmente 
Detección de actualmente   (x1 + x2  5) x1 := 3 wait_on(x1 := 1) x1 := 1 P1 “block” “unblock” x2 := 1 x2 := 2 x2 := 3 P2 REQ ACK P2 © José A. Gil

73 Coordinación distribuida
Exclusión mutua distribuida Requerimientos de exclusión mutua: ME1: (seguridad) En un instante de tiempo puede haber como mucho un proceso en la sección crítica (SC). ME2: (vivacidad) La petición de entrada de un proceso en la SC será concedida eventualmente (siempre y cuando cualquier proceso que se ejecute en la SC la abandone) ME3: (orden) La entrada a la SC debe realizarse según el orden sucedió-antes Elecciones En algunos casos es necesario escoger un proceso de un grupo. El proceso elegido debe se único, incluso si varios procesos convocan elecciones concurrentemente. © José A. Gil

74 Exclusión mutua distribuida (I)
Algoritmo del servidor central Es la manera más simple de conseguir exclusión mutua. Antes de entrar en una sección crítica el proceso envía un mensaje de petición al servidor y espera una respuesta (testigo) Después de abandonar una sección crítica el proceso envía un mensaje de notificación al servidor (testigo) Cuando llega una petición al servidor: Si no hay ningún otro proceso en la sección crítica (el testigo está libre) Contesta con el testigo Si otro proceso está en la sección crítica La petición es encolada Cuando llega una notificación al servidor: Si la cola no está vacía El servidor extrae al proceso más antiguo y le manda el testigo © José A. Gil

75 Exclusión mutua distribuida (II)
Algoritmo del servidor central Cumple las condiciones de seguridad, vivacidad y orden si no hay caídas o pérdidas de mensajes El servidor es un elemento crítico Ante caídas del servidor deben convocarse elecciones Una vez elegido, el nuevo servidor debe obtener el estado de los clientes Otro elemento crítico es la caída del cliente que está en la sección crítica. © José A. Gil

76 Exclusión mutua distribuida (III)
Algoritmo distribuido con relojes lógicos Los procesos que desean entrar en la sección crítica difunden un mensaje de petición, solamente entrarán cuando hayan recibido respuesta del resto de los procesos. Ricart y Agrawala 1981 Al iniciar: estado := LIBERADO; Para obtener el testigo: estado := PIDIENDO; T := estampación de la petición; Difundir petición al resto de procesos; Esperar hasta (num. de respuestas = n - 1); estado := OBTENIDO; Al recibir una petición <Ti, pi> en el proceso pj (i  j) Si (estado = OBTENIDO) o (estado = PIDIENDO y (T, pj) < (Ti, pi) Encolar la petición de pi sin contestar Si no Contestar inmediatamente a pi Al liberar el testigo estado = LIBERADO; Responder a todas las peticiones encoladas. © José A. Gil

77 Exclusión mutua distribuida (IV)
Algoritmo distribuido con relojes lógicos Se utiliza el tiempo de Lamport extendido para estampar los mensajes <41, p1> respuesta P1 P3 respuesta respuesta <34, p2> <34, p2> <41, p1> P2 © José A. Gil

78 Exclusión mutua distribuida (V)
Algoritmo basado en anillo Los procesos se encuentran organizados en un anillo lógico. El testigo se pasa de un proceso a otro siguiendo el anillo en una dirección Si un proceso no necesita acceder a la SC le pasa el testigo al siguiente Si un proceso necesita acceder a la SC espera el testigo y lo retiene mientras está en ella. No mantiene estrictamente el orden sucedió-primero. P8 P1 P7 P2 P6 P3 P5 P4 © José A. Gil

79 Elecciones (I) Algoritmo con intimidación. Silberschatz 1993
Todos los miembros del grupo conocen la identidad y dirección del resto. Se intenta seleccionar al miembro superviviente con identificador mayor. Se supone comunicación fiable, pero los procesos pueden fallar. © José A. Gil

80 Elecciones (II) Algoritmo con intimidación
La elección comienza cuando un proceso envía un mensaje de elección a los miembros con mayor identificador que él. El proceso espera un mensaje de respuesta. Si no llega ninguno, el proceso se considera elegido y envía un mensaje de coordinador a los que tienen identificador menor. Si llega al menos un mensaje de respuesta el proceso espera un mensaje de coordinador. Si no llega ninguno, comienza una nueva elección. Si un proceso recibe un mensaje de coordinador toma al proceso que lo envía como coordinador electo. Si un proceso recibe un mensaje de elección devuelve un mensaje de respuesta y comienza una nueva elección (si no lo había hecho ya). Cuando un proceso es restaurado después de una caída Si tiene el identificador mayor se considera el coordinador electo y envía un mensaje de coordinación al resto. Si no, comienza una elección. © José A. Gil

81 Elecciones (III) Ejemplo de elección con intimidación P2 P1 P3 P4 P2
respuesta elección P2 P1 P3 P4 respuesta elección P2 P1 P3 P4 P2 P1 P3 P4 coordinador © José A. Gil

82 Elecciones (IV) Algoritmo basado en anillo. Chang y Roberts 1979.
Los procesos sólo conocen a su sucesor. Todos los procesos están funcionales y alcanzables durante la elección. Inicialmente todos los procesos están marcados como no-participantes El proceso que inicia la elección envía un mensaje de elección con su identificador a su vecino. Cuando un proceso recibe un mensaje de elección. Compara el identificador del mensaje con el suyo Si el suyo es menor Lo retransmite a su vecino. Si el suyo es mayor Sustituye su identificador en el mensaje y lo retransmite Si son iguales Se considera coordinador electo y envía un mensaje de coordinador © José A. Gil


Descargar ppt "Coordinación en sistemas distribuidos"

Presentaciones similares


Anuncios Google