Sei sulla pagina 1di 12

SISTEMAS DISTRIBUIDOS

TEMA 6: Coordinación y comunicación en grupos


Este tema presenta una colección de algoritmos con objetivos variados, pero que comparten un
fin que es fundamental en los sistemas distribuidos: dado un conjunto de procesos, coordinar
sus acciones o ponerse de acuerdo en uno o más valores.

-Exclusión mutua.

-Elección del coordinador.

-Comunicación por multidifusión.

-Consenso y acuerdos bizantinos.

1. Exclusión mutua distribuida.


Los procesos distribuidos necesitan frecuentemente coordinar sus actividades. Si una colección
de procesos comparte un recurso, entonces se requiere la exclusión mutua para asegurar la
consistencia cuando se accede a los recursos. Por tanto, la exclusión mutua distribuida es la
extensión a los sistemas distribuidos del conocido problema de evitar condiciones de carrera en
las aplicaciones multihilo.

Sin embargo, en un sistema distribuido ni las variables compartidas ni las facilidades


suministradas por un único kernel local pueden usarse para resolver este problema en general.
Se requiere una solución para la exclusión mutua distribuida que esté basada únicamente en el
paso de mensajes.

Considere un sistema de N procesos pi, i = 1,2, …, N que acceden a recursos compartidos


comunes a través de una sección crítica. Los procesos ejecutan el siguiente fragmento de código:

Los requisitos para resolver el problema de la sección crítica son los siguientes:

 Exclusión mutua. Si un proceso está ejecutando código de la sección crítica,


ningún otro proceso lo podrá hacer.

 Progreso. Si ningún proceso se está ejecutando dentro de la sección crítica, la


decisión de qué proceso entra en la sección se hará sobre los procesos que
desean entrar. Los procesos que no quieren entrar no pueden formar parte de
esta decisión, la cual debe tomarse en un tiempo finito.

 Espera acotada. Existe un límite en el número de veces que se permite entrar a


otros procesos en sus secciones críticas antes de que otro proceso haya
solicitado entrar en su propia sección crítica. Es decir, si un proceso está
intentando acceder a la sección crítica, en algún momento tiene que poder
acceder.

1
Los algoritmos de exclusión mutua deben satisfacer los siguientes requisitos:

 Seguridad. Como máximo un proceso puede estar ejecutándose cada vez en la


sección crítica.

 Liveness Todo proceso que solicita entrar a la región crítica, al final lo consigue.

 Orden. Si una petición para entrar en la sección crítica ocurrió antes que otra,
entonces la entrada a la sección crítica se garantiza en ese orden.

1.1 Algoritmo centralizado.


En el algoritmo centralizado existe un proceso servidor denominado coordinador que se encarga
de permitir a los procesos entrar en la sección crítica. Para entrar en la sección crítica, un
proceso envía un mensaje de petición al servidor y espera una respuesta por su parte.
Conceptualmente, la respuesta significa permiso para entrar en la sección crítica.
El servidor mantiene una cola de peticiones, de forma que, si ningún otro proceso está
ejecutando la sección crítica, responde inmediatamente. Si en ese momento, otro proceso está
en la sección crítica, entonces el servidor encola la petición sin responder. Cuando un proceso
sale de la sección crítica, envía un mensaje al servidor. En ese momento, si la cola de procesos
en espera no está vacía, el servidor escoge la entrada más antigua, la elimina y responde al
proceso correspondiente.

Análisis del algoritmo:

-Las condiciones de seguridad y liveness se consiguen mediante este algoritmo. No


obstante, la ordenación no puede cumplirse.

-La entrada en la sección crítica conlleva dos mensajes: una petición y una concesión.

-Salir de la sección crítica implica otro mensaje.

-Al ser un algoritmo centralizado, existe un único punto de fallo.

-Una pérdida del mensaje de respuesta del servidor deja bloqueado al proceso.

2
1.2 Algoritmo en anillo
Una de las formas más simples de conseguir la exclusión mutua entre los N procesos sin que se
necesite un proceso adicional es organizarlos como un anillo. La idea se basa en conseguir la
exclusión mutua obteniendo un token o testigo mediante un mensaje que se pasa de un proceso
a otro en una única dirección alrededor del anillo.
De esta forma, cuando un proceso quiere entrar en la sección crítica
espera a recibir el testigo y lo retiene, y cuando sale de la sección crítica
envía el testigo al siguiente proceso del anillo. Si un proceso no quiere
entrar en la sección crítica, cuando recibe el testigo inmediatamente lo
hace avanzar hasta su vecino.

Análisis del algoritmo:

-La topología en anillo no tiene por qué estar relacionada con las
interconexiones físicas subyacentes entre los computadores.

-Las propiedades de seguridad y liveness se cumplen. Sin embargo, el testigo no se


necesariamente en el orden en que sucedió.

-Este algoritmo consume continuamente ancho de banda.

-Entrar en la sección crítica cuesta tantos mensajes como procesos en el allí menos uno.
(En el peor caso)

-Para salir de la sección crítica se requiere solamente un mensaje.

1.3 Algoritmo de Ricart y Agrawala


Ricart y Agrawala desarrollaron un algoritmo para implementar la exclusión mutua entre N
procesos basado en la técnica de multidifusión. La idea básica es que los procesos que necesitan
entrar en la sección crítica envían un mensaje broadcast a todos los procesos (y a él mismo) con
una marca de tiempo lógica.

Cuando un proceso recibe un mensaje:

-Si el proceso receptor no quiere entrar en la sección crítica le envía el mensaje de


respuesta “OK”.

-Si el receptor está en la sección crítica no envía nada.

-Si el receptor quiere entrar en la sección crítica, compara su marca de tiempo con la
que le ha llegado en el mensaje. Si el mensaje tiene una marca de tiempo menor, le dice
“OK”. Si, por el contrario, él tiene la marca de tiempo menor, entra él a la sección crítica
y no envía nada.

Cuando un proceso sale de la sección crítica dice “OK”.

Cuando el proceso que envío el mensaje broadcast recibe la respuesta de todos los procesos,
puede entrar en la sección crítica.

3
Ejemplo:

-Dos procesos (P0, P2) quieren entrar en la sección critica al mismo tiempo.

-El proceso P0 tiene la marca de tiempo más baja, entra él.

-Cuando el proceso 0 acaba, envía un mensaje OK. De esta forma, el proceso P2 entra.

Análisis del algoritmo:

-Este algoritmo cumple las propiedades de seguridad, liveness y ordenación.

-Conseguir la entrada en la sección crítica supone 2(N-1) mensajes: (N - 1) mensajes para


difundir la solicitud y (N – 1) mensajes de respuesta. En el caso de que hubiese un
hardware que diese soporte a la multidifusión, solo se requeriría un mensaje para la
petición, entonces el número total de mensajes sería N.

1.4 Comparación de los algoritmos.

1.5 Algoritmo de Maekawa


Maekawa observó que para que un proceso entrase en la sección crítica no era necesario que
todos los procesos le permitiesen el acceso. Podemos pensar en los procesos votando para otro
pueda entrar en la sección crítica.

Un proceso candidato debe recoger suficientes votos para entrar en la sección crítica. Para ello,
hay que agrupar a los procesos en grupos no disjuntos, de forma que:

-El tamaño óptimo del grupo es √n.

4
-Identificar cuándo se está en proceso de votación.

-Los conjuntos de dos procesos cualesquiera deben solapar.

El algoritmo de Maekawa se muestra en la siguiente figura.

Análisis del algoritmo:

-Este algoritmo tiene el problema de que es propenso a situaciones de interbloqueo.


Como solución, Saunders modifica ligeramente el algoritmo para evitar estas
situaciones.

-Entrar en la sección crítica cuesta 2 √n.

-Salir de la sección crítica cuesta √n.

-El ancho de banda en general es menor que para el caso de Ricart y Agrawala. Es menor
en el caso de que no contemos con un sistema multicast que afecte a todos.

2. Algoritmos de elección.
Los algoritmos de elección son útiles en aplicaciones donde existe un coordinador, ya que se
utilizan para escoger un proceso único que juegue un papel específico. Por ejemplo, en una
variante de nuestro algoritmo de “servidor central” para exclusión mutua que hemos visto
anteriormente, el servidor se escoge entre los procesos que necesitan usar la sección crítica.

El algoritmo se ejecuta, cuando falla el coordinador, en todos los procesos para seleccionar de
manera común un coordinador. Se requiere que el proceso elegido sea escogido como aquel de

5
con el mayor identificador. Este “identificador” puede ser cualquier marca con orden total
(carga, fiabilidad, posición, etc)
Un requisito importante es que la selección del proceso elegido sea única, incluso aunque el
algoritmo de elección se inicie de forma concurrente en varios procesos. Por ejemplo, dos
procesos podrían decidir de forma independiente que un proceso coordinador ha fallado y pedir
ambos elecciones.

Requisitos para los algoritmos de elección:

Nuestros requisitos serán que durante una ejecución en particular del algoritmo:

-Seguridad. Si finalmente se elige un proceso deberá ser el de mayor identificador que


no se ha caído al final del algoritmo.

-Pervivencia. Si no caen todos los procesos eventualmente será elegido un proceso.

2.1 Algoritmo del anillo (Chang y Roberts)


El objetivo de este algoritmo es elegir a un proceso coordinador que será el proceso con el
identificador más grande.
Inicialmente, cada proceso se marca como no participante en una elección. Cualquier proceso
puede comenzar la elección enviando un mensaje de elección a su vecino, el que incluye su
identificador y se marca como participante.

Cuando un proceso recibe un mensaje de elección, compara el identificador del mensaje con el
suyo:

-Si el identificador que le llega es mayor, entonces hace avanzar el mensaje hacia su
vecino.

-Si el identificador que le llega es más pequeño y el receptor es un no participante,


entonces cambia el identificador del mensaje por el suyo y lo vuelve a enviar. Si en este
mismo caso, el receptor ya fuera un participante, no reenviaría el mensaje. En cualquier
caso, en el momento en el que se envía un mensaje de elección, el proceso se etiqueta
a si mismo como participante.
-Si el identificador que se recibe es el del propio receptor, entonces ese identificador ha
de ser el mayor y el se convierte en coordinador. El coordinador se señala a si mismo
como no participante y envía un mensaje de elegido a su vecino, anunciando su elección
e incluyendo en el mensaje su identidad.

El algoritmo del anillo es apropiado para un conjunto de procesos en el cual cada proceso pi
tiene un canal de comunicación con el siguiente proceso del anillo. De tal forma, que todos los
mensajes se envían en el mismo sentido a través del anillo.

6
Ejemplo: 1 2 2
6
Los procesos 2 y 5 generan mensajes de elección y lo envían al
siguiente. Se elige coordinador el proceso que recibe un mensaje 0 3
con su número y es el mayor.
3
Este proceso a continuación envía mensajes a todos informando 6
que es el coordinador. 7 4

6 5
5

2.2 Algoritmo del abusón (García-Molina, 1982)


A diferencia del algoritmo basado en anillo, este algoritmo supone que el sistema es síncrono,
esto es, que utiliza timeouts para detectar un fallo en un proceso. Otra diferencia es que este
algoritmo asume que cada proceso conoce qué procesos tienen identificadores más altos y que
puede comunicarse con todos esos procesos.

Hay tres tipos de mensajes en este algoritmo:

 Mensaje de elección se envía para anunciar un proceso de elección.


 Mensaje de respuesta se envía para responder a un mensaje de elección.
 Mensaje coordinador se envía para anunciar la identidad del proceso elegido.

Un proceso comienza una elección cuando se da cuenta, a través de timeouts, que el


coordinador ha fallado. El proceso que sabe que posee el identificador más alto puede elegirse
a si mismo como el coordinador, simplemente enviando un mensaje coordinador a todos los
procesos con identificadores más bajos. Por otro lado, un proceso con identificador más bajo
comienza una elección con un mensaje de respuesta.

Ejemplo:

a) Proceso 4 envía elección

b) Proceso 5 y 6 paran la elección de 4 con un mensaje de respuesta.

c) Ahora 5 y 6 comienzan la elección …

d) Proceso 6 para la elección de 5

e) Proceso 6 indica a todos que es el coordinador

7
3. Multidifusión.
La característica principal de la comunicación por multidifusión es que un proceso realiza
solamente una operación multicast para enviar un único mensaje que llega a cada uno de los
miembros de un grupo, en lugar de realizar múltiples operaciones de enviar sobre los procesos
individuales.

Se dice que un grupo está cerrado si sólo los miembros del grupo pueden multidifundir dentro
de él. Un proceso dentro de un grupo cerrado se entrega a sí mismo cualquier mensaje que
multidifunde al grupo. Un grupo se dice abierto si los procesos que no están en el grupo le
pueden mandar mensajes a los procesos del grupo.

Ventajas

- El uso de una única operación multicast en lugar de múltiples operaciones de enviar, permite
una eficiente utilización del ancho de banda.

- Mayor garantía de entrega. Si un proceso realiza múltiples operaciones de envío


independientes a procesos individuales, no tiene medios para proporcionar garantías de
entrega que afecte al grupo de procesos en su conjunto.

3.1 IP Multicast
La multidifusión IP se construye sobre Internet Protocol, y permite que el emisor transmita un
único paquete IP a un conjunto de computadores que forman un grupo de multidifusión. Tiene
las siguientes características:

-El emisor no tiene que por qué conocer las identidades de los receptores ni el tamaño
del grupo.

-Los grupos de multicast se especifican utilizando las direcciones de Internet de clase D,


esto es, una dirección cuyos primeros cuatros bits son 1110 en IPv4.

-La pertenencia a los grupos de multicast es dinámica, permitiéndose que los


computadores se apunten o se borren a un número arbitrario de grupos en cualquier
instante.

-Existen grupos permanentes gestionados por la Internet Authority.

8
3.2 Basic (B-) Multicast
B-multicast es la mínima primitiva de multidifusión que garantiza, a diferencia de IP Multicast,
que un proceso correcto entregará el mensaje siempre que el sistema que realiza la
multidifusión no se caiga. Además, permite que los procesos pertenezcan a varios grupos.

Una forma de implementar el B-multicast es utilizar una operación envía fiable uno-a-uno de la
siguiente forma:

Para realizar B-multicast (g,m): para cada proceso p ∈ g, g envía (p,m);

Al recibir(m) en p: B-entrega(m) en p

3.3 Reliable (R-) multicast


Un proceso de multidifusión fiable será aquel que satisfaga las siguientes propiedades:

-Integridad. Un proceso entrega un mensaje como mucho una vez. Además, los
mensajes pueden distinguirse utilizando números de secuencia.

-Validez. Si un proceso multidifunde un mensaje m, entonces m será entregado.

-Acuerdo. O todos los procesos entregan, o ninguno.

-Acuerdo uniforme. Si un proceso (correcto o no) entrega m, entonces todos los


procesos correctos entregan m.

 Implementación de la multidifusión fiable sobre B-multicast.

La siguiente figura proporciona un algoritmo de multidifusión fiable con la primitiva R-multicast,


que permiten a los procesos pertencer a distintos grupos cerrados de forma simultánea. Para
enviar un mensaje mediante F-multicast, un proceso envía el mensaje mediante B-multicast a
los procesos miembros del grupo. Cuando el proceso ha sido entregado, el receptor a cambio
realizar un B-multicast del mensaje al grupo, y a continuación entrega el mensaje con R-Reliable.

9
 Implementación de la multidifusión fiable sobre IP-multicast.

Una alternativa para obtener R-mcast es combinar la multidifusión IP, ack empotrados en otros
mensajes (piggy backed) y negative acknowledge. Este protocolo se basa en la premisa de que
la comunicación por multidifusión IP casi siempre tiene éxito.

En el protocolo, los procesos no envían ACK separados de los mensajes, si no que en su lugar
adhieren los reconocimientos en los mensajes que envía al grupo. Los procesos envían un
mensaje de respuesta por separado solo cuando detectan que han perdido un mensaje
(negative acknowledge). Esta descripción supone que los grupos son cerrados.

¿Cómo funciona?

Cada proceso p mantiene un número de secuencia Seq para cada grupo g al que pertenece. El
número de secuencia es inicialmente 0. Cada proceso almacena además Rp, el número de
secuencia del último mensaje que ha sido entregado por el proceso p y que fue enviado desde
el grupo g.

Un proceso entrega un mensaje destinado para g con el número de secuencia Seq y proveniente
de p si y solo si Seq = Rp + 1, e incrementa Rp en uno tras la entrega. Además, cualquier mensaje
que no haya podido entregar es retenido en una cola de retención.
Si por otro lado, un mensaje que llega tiene Seq < Rp, entonces otro proceso ha entregado el
mensaje antes y lo descarta.

3.4 Multicast ordenado.


El algoritmo de multidifusión básico entrega los mensajes a los procesos en un orden arbitrario,
debido a los retrasos arbitrarios asociados a las operaciones subyacentes de envío. Los requisitos
de ordenación más frecuentes son la ordenación total, la ordenación causal y la ordenación
FIFIO:

-FIFO (FO-mcast). Las difusiones de un mismo proceso preservan el orden de la entrega.


En otras palabras, si un proceso realiza un multicast (g,m) y a continuación un
multicast(g, m’), entonces m ha de ser entregado antes que m’.

-Causal (CO-mcast) Las difusiones relacionadas casualmente preservan el orden de la


entrega. Eso es, si multicast (g,m)  multicast (g,m’), donde  implica la relación
sucedió antes, entonces m ha de ser entregado antes que m’.

-Total (TO-mcast). Si un proceso entrega el mensaje m antes de que entregue m’,


entonces otro cualquier proceso que entregue m’ debe haber entregado antes m.

 Ejemplo de multicas sin ordenación

10
 Ejemplo de ordenación total y causal.

 Garantías de orden.

- El algoritmo de R-mcast sobre IP-mcast garantiza orden FIFO (RFO-mcast).


- Orden total se puede implementar con un secuenciador (TO-mcast)
- Orden causal se puede implementar con relojes vectoriales (CO-mcast).
- No es posible implementar RTO-mcast en sistemas asíncronos.

4. El problema del consenso.


En ocasiones los procesos tienen problemas para ponerse de acuerdo en un valor después de
que uno o más de dichos procesos haya propuesto cual debería ser ese valor. Por ejemplo, se
puede necesitar que todos los computadores que controlan los motores de una nave espacial
decidan “proseguir” o que todos decidan “abortar la operación”.

Existen algoritmos que solucionan de forma específica estos tipos de acuerdo, y han de cumplir
las siguientes condiciones:

 Terminación. Cada proceso ha de fijar un valor para la variable de decisión.


 Acuerdo. El valor de decisión de todos los procesos es el mismo.
 Integridad. Si todos los procesos han propuesto el mismo valor, entonces cualquier
proceso ha elegido dicho valor.

 El problema de los generales bizantinos.

En la definición informal del problema de ellos generales bizantinos, tres o más generales han
de ponerse de acuerdo en si atacar o retirarse. Uno de ellos, el comandante, cursa la orden. Los
otros, los tenientes del comandante deben decidir si atacar o retirarse. Pero uno o más de los
generales puede ser un “traidor”, o lo que es lo mismo, pueden fallar. Si el comandante es el
traidor, mandar atacar a un general y retirarse a otro. Si el traidor es un teniente, informa a uno
de sus iguales que el comandante le mandó atacar mientras que a otro le dice que le ordenó
retirarse.

11
El problema de los generales bizantinos se distingue de los problemas de consenso en que un
proceso destacado proporciona un valor en el que los otros han de ponerse de acuerdo, en vez
de que cada uno proponga un valor. Los requisitos son:

 Terminación. Cada proceso ha de fijar un valor para la variable de decisión.


 Acuerdo. El valor de decisión de todos los procesos es el mismo.
 Integridad. Si el comandante es un proceso, entonces todos los procesos han de decidir
el valor propuesto por el comandante.

 El problema de la consistencia interactiva.

Este problema es otra variante del consenso, en el cual todo proceso propone un solo valor. El
objetivo del algoritmo es que los procesos se pongan de acuerdo en un vector de valores, uno
para cada proceso. A éste se le llamará vector de decisión.

Los requisitos para la consistencia interactiva son:

 Terminación. Cada proceso ha de fijar un valor para la variable de decisión.


 Acuerdo. El valor de decisión de todos los procesos es el mismo.
 Integridad. Si pi es correcto, entonces todos los procesos correctos deciden que vi es la
i-ésima componente de su vector.

12

Potrebbero piacerti anche