ALGORITMOS DISTRIBUIDOSDr. Dennis Barrios [email protected]
QUÉ ES PROGRAMACIÓN CONCURRENTE?
Programa “ordinario” Programa Concurrente
Declaraciones
.
.
.
Instrucciones
Ejecución Secuencial
Declaraciones
.
.
.
Instrucciones
Declaraciones
.
.
.
Instrucciones
Declaraciones
.
.
.
Instrucciones
...
Ejecución en Paralelismo Abstracto
SINCRONISMO Es importante que:
Varios procesos no accesen a un recurso compartido al mismo tiempo
Aceso exclusivo temporal Algunos procesos pueden necesitar ponerse
deacuerdo en el orden de ejecución de ciertos eventos
ALGORITMOS DE ELECCIÓN Se requiere de un processo que actue
como: Coordinador Iniciador Ejecute algun rol especial
El objetivo de la elección es que cuando la misma concluya, todos los procesos debe estar de acuerdo en quien debe ser el coordinador
Bully Algorithm – Algoritmo Abusón Ring Algorithm – Algoritmo basado en anillo
BULLY ALGORITHM Garcia-Molina 1982 Sistema Síncrono
Timouts para fallas Conocimiento de los
otros procesos ID de los mayores
Permite la caida de procesos durante elección
Construcción de detector de fallas T = 2*Ttrans + TProcesa
4
1
2
63
5
0
7
4
1
2
63
5
0
7X
4
1
2
63
5
0
7X
ElecciónElección
Elección
4
1
2
63
5
0
7X
Ok
Ok
4
1
2
63
5
0
7XElección
4
1
2
63
5
0
7XOk
4
1
2
63
5
0
7X
Coordinador
RING ALGORITHM Chang y Roberts
1979 pi tiene un canal de
comunicación con el siguiente proceso del anillo, p(i+1) mod N
Supuestos No hay fallas Sistema asíncrono
Se elige el proceso con identificador mas grande
4
1
2
63
5
0
7X[5]
[5,3]
[5,3,4][5,3,4,1]
[5,3,4,1,2]
[5,3,4
,1,2,6
]
[5,3,4,1,2,6,0]
[5,3,4,1,2,66,0]
[5,3,4,1,2,66,0]
[5,3,4,1,2,66,0] [5,3,4,1,2,66,0]
[5,3,4,1,2,66,0]
[5,3,4,1,2,66,0][5,3,4,1,2,66,0]
ALGORITMOS DE CONSENSO Consenso frente a caídas o fallas bizantinas Cuando existe replicación se debe llegar a un consenso para saber que información se envia Problemas:
Sensores replicados no necesariamente dan el mismo valor Sensor malogrado o procesador que falla
Como lograr consenso Cada proceso elige un valor inicial y Se requiere que todos los procesos decidan por uno de esos valores
Fallas Por caídas: proceso no envia mensajes Bizantinas: proceso envia mensajes arbitrarios
Algoritmo de una ronda Algoritmo de los generales bizantinos Algoritmo del rey (King Algorithm)
ALGORITMO DE UNA RONDA Si unos cuantos caen no
se llega a consenso Cada uno hace su tabla
de valores escojidos por los otros
1
2 3
A-
A
A
B
B
-AB AAB
B A
ALGORITMO DE LOS GENERALES BIZANTINOS
Se ejecutan mas rondas Primera ronda: igual a
anterior Segunda Ronda: enviar
a cada proceso la elección de los otros
1
2 3
A-
A
A
B
B
3:B
1:-
2:A
1:AAAB AAB
A A
ALGORITMO DEL REY Requiere menos mensajes
que el algoritmo de los generales bizantinos
En cada ronda un proceso recibe el titulo de rey y su voto vale mas
Algoritmo Cada general almacena el
voto de la mayoria en la primera ronda
Segunda ronda: Cuando el nodo recibe el plan
del rey Si mi mayoria es amplia:
>(n/2)+1 considerar mi voto mayoria
Caso contrario considerar voto del rey
Tercera ronda: Repetir segunda ronda con otro
rey
1
2 3
4 5
A:1B:0
A
A:1B:0
A
A:1B:0
A
A:1B:0
A
A:1B:0
A:1B:1
B
A:1B:1
B
A:1B:1B
A:1B:1
B
A:1B:1
BIBLIOGRAFIA UTILIZADA Distributed Systems: Principles and
Paradigms (Prentice Hall) Andrew S. Tanembaum Maarten Van Sten
Principles of Concurrent and Distributed Programming (Adison Wesley) M. Ben-Ari
TRABAJO EN GRUPO (GRUPOS DE 4) Realizar un trabajo sobre programación con
hebras en: Java C++ con POSIX Threads sobre Linux Las librerias process.h y windows.h para C/C++
en Windows La MFC de Microsoft Visual Studio
Presentar un informe Realizar una presentación con Slides, la cual
será expuesta por un miembro del grupo elegido al azar.