Explora Libros electrónicos
Categorías
Explora Audiolibros
Categorías
Explora Revistas
Categorías
Explora Documentos
Categorías
Sistemas
Distribuidos
1. Introduccin
2. La Comunicacin
3. Sistemas Operativos Distribuidos
4. Sincronizacin y Coordinacin
1. Sincronizacin de Relojes
- Relojes fsicos
- Relojes lgicos
2. Coordinacin
- Exclusin mutua
- Eleccin de coordinador
- Consenso distribuido
Sistemas Distribuidos
Sistemas Distribuidos
Sincronizacin y Coordinacin - 1
Sincronizacin y Coordinacin - 1
Sincronizacin de Relojes
Sincronizacin
Sistema
Centralizado
Un Reloj
Sistema
Distribuido
Mltiples
Relojes
Una
Referencia Horaria
Mltiples
Referencias
Horarias
Hora
Externa
2.145
2.150
Equipo A
2.144
cc prueba.c
prueba.o
2.155
Equipo B
2.143
edit prueba.c
La medida del tiempo es una cuestin muy importante en los sistemas distribuidos. En
los sistemas centralizados tambin lo es, pero no se le da importancia debido a que no
es ningn problema conseguir que todos los procesos tengan una misma referencia: el
reloj compartido. En cambio en los sistemas distribuidos cada ordenador tiene su propio
reloj y, como veremos, no resulta fcil sincronizarlos.
Como hemos dicho, la medida del tiempo es muy importante, pues resulta normal tener
que saber a qu hora del da han sucedido los distintos eventos que se producen en un
ordenador. La precisin requerida en cada caso vara, siendo los sistemas de tiempo
real los que posiblemente requieren una mayor precisin. No obstante, incluso en
sistemas de propsito general se hace necesario el disponer de una sincrona horaria.
La herramienta make sirve como ejemplo claro de esta necesidad. Supongamos que
tenemos un programa compuesto por mltiples mdulos que se estn escribiendo y
actualizando por diversos programadores desde equipos distintos. En cualquier
momento, desde cualquier puesto, puede solicitarse la generacin de un programa
ejecutable mediante el comando make. Pero ahora estamos en un entorno distribuido
con reparto de carga, de tal manera que la compilacin de un fichero no tiene por qu
realizarse en la misma estacin en la que se edit. El comando make comprueba que la
hora de un fichero objeto debe ser posterior a la del correspondiente fichero fuente, pues
de no ser as significa que no se ha actualizado el fichero objeto, y se genera la
compilacin del fichero fuente. Pues bien, supongamos que un fichero compilado genera
un objeto con la hora 2144. Poco despus el encargado de ese fichero fuente lo edita
con su hora local 2143 (obviamente, el equipo donde se edita va retrasado respecto a la
estacin en la que se compila). Cuando el programador ejecuta el comando make, ste
se encuentra con que el fichero fuente se modific con la hora 2143, mientras que el
objeto lo gener una compilacin en el momento 2144, lo que le hace suponer que es
resultante de la ltima actualizacin del fichero fuente. Claramente se observa que el
programa ejecutable resultante estar formado a partir de un mdulo objeto obsoleto,
con lo que su comportamiento no ser el esperado, y el programador no entender por
qu no funciona.
Tambin se tiene necesidad de una sincronizacin horaria en algunos programas de
autenticacin de mensajes, como Kerberos, o sistemas de respaldos de ficheros
(backups) que se realizan en funcin de las horas de ltima modificacin de los ficheros.
Ya que la medida del tiempo es tan bsica para nuestra forma de pensar, y el efecto de
no tener los relojes sincronizados puede ser dramtico, comenzaremos por ver cmo
podra conseguirse la sincronizacin de los relojes de todas las estaciones del sistema
distribuido o, lo que es lo mismo, que todos tengan la misma hora simultneamente. A
esto se le conoce como la sincronizacin de los relojes fsicos.
2.160
Sistemas Distribuidos
Sincronizacin y Coordinacin - 2
Sincronizacin y Coordinacin - 2
Relojes Fsicos
Sincronizacin de Relojes
RELOJ DE ORDENADOR
int.
reloj
Cristal de
Cuarzo
Contador
Deriva: 10-6
Fecha y Hora
(Marca de Tiempo)
Para Comparar
Marcas de Tiempo de
dos Relojes Iguales
Restar Diferencias?
DISTINTA
DERIVA
NO!
...........
Cada ordenador dispone de su propio reloj fsico. Este reloj es un dispositivo electrnico basado
en un cristal de cuarzo que oscila a una determinada frecuencia, y que adems puede
programarse para generar interrupciones a intervalos determinados (cada cierto nmero de
oscilaciones). Sabiendo cada cuanto tiempo se producen estas interrupciones (llamadas
interrupciones de reloj), pueden aprovecharse para llevar la cuenta del tiempo, y por
consiguiente de la fecha y la hora actual. Los sistemas operativos lo hacen mediante un contador
que se va incrementando a medida que se producen las interrupciones de reloj.
Esta fecha y hora se suele utilizar para indicar el momento en el que suceden ciertos eventos del
sistema, como por ejemplo, la hora de creacin o modificacin de un fichero de datos. La
indicacin del momento en que sucede un cierto evento se denomina marca de tiempo (time
stamp). Para comparar marcas de tiempo producidas por ordenadores que cuentan con un mismo
modelo de reloj, parece que bastara con saber la diferencia de los valores que tienen los
contadores de sus respectivos sistemas operativos, sin embargo esta suposicin est basada en
una premisa falsa, pues es prcticamente imposible que dos relojes iguales oscilen exactamente
a la misma frecuencia, sean o no del mismo tipo.
Los relojes basados en un cristal estn sujetos a una desviacin o deriva, es decir que cuentan o
miden el tiempo a velocidades distintas, por lo que progresivamente sus contadores van
distancindose. Por muy pequeo que sea el periodo de oscilacin de los dos relojes, la diferencia
acumulada despus de muchas oscilaciones conduce a una diferencia claramente observable. La
velocidad de deriva de un reloj es el cambio por unidad de tiempo en la diferencia de valores entre
su contador y el de un reloj perfecto de referencia. Para los relojes de cristal de cuarzo esta
velocidad de deriva est alrededor de 10-6, lo que significa una diferencia de un segundo cada
11,6 das.
Los relojes ms precisos utilizan osciladores atmicos, cuya precisin es del orden de 1014 (un
segundo en 1.400.000 aos). Diversos laboratorios (con reloj atmico) de todo el mundo le indican
el nmero de ticks (interrupciones de reloj) peridicamente al Bureau Internationale de lHeure
(BIH), el cual calcula su valor medio produciendo el Tiempo Atmico Internacional (TAI),
teniendo en cuenta que el tiempo se empez a contar el 1 de enero de 1958, una vez que el
segundo se defini como el tiempo que necesita un tomo de Cesio-133 en realizar 9.192.631.770
transiciones. No obstante, las unidades de tiempo que utilizamos tienen un origen astronmico
(tiempo universal), es decir, estn definidas en funcin de los periodos de rotacin y traslacin
de la Tierra alrededor del Sol, y resulta que este periodo de rotacin se est alargando
gradualmente, pues nuestro planeta se est frenando, debido, principalmente, a la friccin de las
mareas, efectos atmosfricos y a las corrientes de conveccin en el ncleo de la tierra. Esto
quiere decir que el tiempo atmico y el universal tienden a desincronizarse.
T.A.I.
Segundo Bisiesto
U.T.C.
Tiempo
Universal
Coordinado
Tiempo
Universal
Sistemas Distribuidos
Sistemas Distribuidos
Sincronizacin y Coordinacin - 3
Sincronizacin y Coordinacin - 3
Sincronizacin de Relojes
Precisin: 0,1 - 10 ms
Ordenador a 10 MIPS
...Relojes Fsicos
100.000 instr.
Varios Mensajes
En Sistemas Distribuidos
es Importante
Mantener Sincronizados
los Equipos
Sistemas Distribuidos
Sistemas Distribuidos
El tiempo UTC est disponible a travs de emisoras de radio que emiten seales
horarias, mediante satlites geoestacionarios y GPS cuyas precisiones son 0,1 a 10 ms.;
0,1 ms.; y 1 ms. respectivamente. A pesar de esta relativamente buena precisin, nos
encontramos con dos problemas. Por una parte tenemos que un receptor de seales
horarias es un dispositivo demasiado caro comparado con el precio de una estacin de
trabajo y, adems, en caso de disponer de l, resulta que la medida del tiempo con una
precisin de 10 milisegundos puede resultar insuficiente para un ordenador a 10 MIPS,
en el que en esos 10 ms. pueden ejecutarse 100.000 instrucciones y pueden transmitirse
varios mensajes.
Supongamos que un equipo dispone de un receptor de estas seales horarias. El reloj
hardware del ordenador puede ir ms despacio o ms deprisa que el UTC. Qu
hacemos para sincronizarlo con el UTC? Si la hora del reloj local es anterior a la hora
UTC, simplemente avanzamos la hora local hasta la hora UTC; lo ms que puede
suceder es que parezca como si se hubieran perdido algunos ticks de reloj. Pero qu
se puede hacer si la hora local es mayor que la hora UTC? Retrasamos la hora local
hasta la hora UTC? Esto nunca debe hacerse, pues se puede confundir a las
aplicaciones. Pensemos, en nuestro ejemplo del comando make, si se atrasase el reloj
local, podra suceder que en un mismo equipo, la hora de compilacin de un programa
fuera anterior a la hora de edicin, lo cual confundira al comando make.
La solucin para la situacin en que la hora local es mayor que la hora UTC no estriba
en atrasar la hora, sino en ralentizar la velocidad del reloj local hasta que se sincronice
con la hora UTC, y entonces volver a ponerlo a su velocidad. De esta manera no se
producen paradojas como la de la compilacin del fichero.
En los sistemas distribuidos resulta incluso ms importante la sincronizacin horaria
entre los distintos equipos que el mantener mnima la diferencia con la hora UTC. Si la
mxima velocidad de deriva de un reloj hardware de un ordenador es , dos relojes cuya
divergencia de la hora UTC sea opuesta, en un momento t despus de haberse
sincronizado pueden mostrar una diferencia horaria de 2t. Esto quiere decir que si se
quiere garantizar que dos ordenadores no difieran ms de segundos en su hora, deben
sincronizarse (su hora software) al menos cada /2 segundos.
Veamos a continuacin dos mtodos para realizar esta sincronizacin: el algoritmo de
Cristian y el algoritmo de Berkeley.
Sincronizacin y Coordinacin - 4
Sincronizacin y Coordinacin - 4
Algoritmo de Cristian
Relojes Fsicos
UTC
Servidor
UTC
Cliente
PetUTC
TE
I
TR
TUTC
(TR-TE) / 2
Afinando
El algoritmo de Cristian [1984] est pensado para entornos en los que un ordenador, al
que llamaremos Servidor de Tiempo, est sincronizado con una hora UTC, y el resto de
las estaciones quieren sincronizarse con l.
Ahora hay que considerar el error cometido, pues se ha requerido un tiempo para la
transmisin del mensaje con la hora UTC desde el servidor hasta el cliente, y lo que es
peor, este retardo es variable, dependiendo de la carga de la red. Veamos cmo el
algoritmo de Cristian calcula este retraso. Lo que hace es medir el tiempo que se tarda
en recibir la respuesta desde que se enva el mensaje de peticin. Para ello,
simplemente tiene que anotar la hora de envo TE y de recepcin TR. (Aunque se utilice el
reloj local, dado el corto periodo que transcurre, su precisin es suficiente). En ausencia
de otra informacin, el tiempo estimado de propagacin del mensaje ser (TR - TE) / 2.
As, cuando el cliente recibe el mensaje con la hora actual, tiene que aadirle el retardo
calculado.
La duracin estimada del retardo puede mejorarse si se sabe lo que tarda el servidor de
tiempo en tratar la interrupcin que genera la llegada del mensaje y atender la peticin.
Si a este tiempo lo llamamos I, el tiempo estimado de propagacin del mensaje ser (TR
- TE - I) / 2. Todava puede mejorarse un poco ms esta estimacin si se conoce el
tiempo mnimo de propagacin del mensaje, es decir, cuando no hay ninguna congestin
en la red.
Otra posibilidad de mejora consiste en realizar mltiples pruebas de envo y recepcin al
servidor para calcular el tiempo de retardo. Cualquier medida TR - TE que sobrepase
cierto umbral se desecha, suponiendo que ha habido un problema de congestin, por lo
que su retardo no es significativo. Con las medidas vlidas se calcula un valor promedio
que se toma como tiempo de propagacin del mensaje.
El problema que se presenta es el mismo de todos los servicios ofrecidos por un nico
servidor: la posibilidad de fallo. Cristian sugiere que la hora debe suministrarse por
varios servidores de tiempo sincronizados mediante receptores de tiempo UTC; el
cliente enva su peticin a todos los servidores y toma la primera respuesta recibida.
Este algoritmo no contempla problemas de malfuncionamiento o fraude por parte del
servidor. No obstante, hay algoritmos (Marzullo [1984]) para distinguir los servidores
vlidos de los que funcionan mal o son impostores.
Sistemas Distribuidos
Sincronizacin y Coordinacin - 5
Sincronizacin y Coordinacin - 5
Algoritmo de Berkeley
Relojes Fsicos
ALGORITMO DE BERKELEY
1. ELEGIR UN COORDINADOR (MAESTRO)
2. ESTABLECER LA HORA DE REFERENCIA
El Maestro pregunta la hora peridicamente
Elige solamente horas razonables
Calcula una Hora Promedio
3. ACTUALIZAR LOS RELOJES DE LOS ESCLAVOS
Calcula desviacin de cada esclavo
Enva la correccin a aplicar en cada esclavo
Y SI FALLA EL MAESTRO?
El algoritmo de Berkeley (Gusella y Zatti [1989]) est pensado para entornos en los que
no se dispone de ningn receptor de tiempo UTC, y lo nico que se pretende es que
todos los ordenadores se mantengan sincronizados con una misma hora.
En este algoritmo, entre todos los equipos del sistema distribuido eligen un coordinador
para que acte como maestro o servidor de tiempo. Al contrario que en el algoritmo de
Cristian, en el que el servidor era pasivo, en este caso el coordinador elegido pregunta la
hora, peridicamente, al resto de las estaciones (los esclavos). Cuando los esclavos
responden cada uno con su hora local, el maestro estima los retardos de propagacin de
los mensajes con cada uno de los esclavos (de manera similar a Cristian y eliminando
los valores que sobrepasan cierto umbral) y calcula un tiempo promedio con las horas
recibidas y la suya propia.
Queda por actualizar los relojes de los esclavos. Ahora el maestro, en lugar de enviar la
hora coordinada a todos los esclavos (lo que introducira un cierto error debido al tiempo
de transmisin), enva a cada uno el desfase que tiene con la hora promedio calculada.
Recibido este desfase, cada equipo actualiza su reloj adelantandolo directamente, o
ralentizndolo temporalmente en caso de ir adelantado.
Podramos pensar que no se est teniendo en cuenta el tiempo de propagacin en el
envo del mensaje desde el esclavo hacia el maestro y que, por lo tanto, la hora que se
recibe en el maestro llega retrasada. En este caso esto no nos importa, pues lo que se
quiere es calcular una hora promedio de entre las recibidas de todos los esclavos. En
una red de rea local, los tiempos de propagacin de los mensajes entre los esclavos y
el maestro ser similar para todos ellos, con lo que la hora que indican todos los
esclavos est tomada por todos ellos en el mismo momento.
El algoritmo realiza un promedio tolerante a fallos con los tiempos recibidos de los
esclavos, es decir, que considera solamente el subconjunto de relojes que no difieren
entre s ms de una cierta cantidad, considerando que los dems no estn funcionando
bien.
No Pregunta la Hora
No Enva Modificaciones
Modificaciones Extraas
Sistemas Distribuidos
Sistemas Distribuidos
Sincronizacin y Coordinacin - 6
Sincronizacin y Coordinacin - 6
Algoritmos Distribuidos
Relojes Fsicos
Problemtico!
En este algoritmo, cada nodo debe conocer cul es el tiempo de propagacin del
mensaje desde cada origen a cada destino, para lo cual debe conocerse bien la
topologa de la red, o calcularlo mediante mensajes (sondas) que se envan (y se
devuelven) para calcular simplemente el tiempo de propagacin.
ALGORITMO DISTRIBUIDO
1. Se deben conocer los tiempos de propagacin
2. Todos los equipos deben sincronizarse peridicamente
I
t0
I
t1
I
t2
I
t3
I
t4
I
t5
I
t6
Los algoritmos de sincronizacin de relojes fsicos que hemos visto son centralizados,
pues se basan en los servicios ofrecidos por un nico servidor. No obstante, hay que
reconocer que el mtodo de Berkeley es, digamos, ms democrtico, pues entre todos
los clientes eligen, mediante un algoritmo distribuido, el que van a utilizar como maestro.
Sin embargo, una vez elegido, el escenario de sincronizacin vuelve a ser centralizado,
con sus consiguientes problemas (fallos, cuellos de botella, ...), aunque en caso de cada
del equipo maestro, los esclavos pueden volver a elegir otro maestro, cosa que en el
algoritmo de Cristian no era posible.
I
t7
I
t8
t9
Sistemas Distribuidos
Sistemas Distribuidos
Sincronizacin y Coordinacin - 7
Sincronizacin y Coordinacin - 7
Relojes Lgicos
Sincronizacin de Relojes
Se trabaja con
RELOJES LGICOS
P2
P3
P4
m2
Tiempo
fsico
f
r
Sistemas Distribuidos
Para algunos entornos en los que no se requiere una sincronizacin exacta con una hora
externa de referencia (tiempo UTC), en lugar de tratar con los relojes fsicos que hemos
visto, se trabaja con relojes lgicos, en los que solamente tiene importancia el orden de
los eventos, no la medida del momento exacto en el que se producen.
Para sincronizar relojes lgicos, Lamport defini la relacin sucedi antes, segn la
cual, la expresin a b quiere decir a sucedi antes que b, y significa que todos los
procesos coinciden en que primero sucedi el evento a y posteriormente el b. Esta
relacin se observa directamente en dos situaciones:
m1
c
Sin embargo, Lamport seal que la sincronizacin de relojes no necesita ser absoluta.
Por una parte, si dos procesos no interactan, no tienen ninguna necesidad de que sus
relojes respectivos estn sincronizados, pues la falta de sincronizacin no ser
observable y no causar problemas. Por otra parte, lo que normalmente importa no es
que todos los procesos estn sincronizados segn una misma hora exacta, sino que
todos estn de acuerdo sobre el orden en el que se suceden los eventos que se
producen. En el ejemplo del comando make, si la edicin tuvo lugar a las 10:00 (hora
local), y la compilacin a las 10:06 segn el reloj local de la mquina en la que se
compil (aunque realmente tuvo lugar dos minutos despus de la edicin), este desfase
horario no es significativo, siempre que se sepa que la compilacin fue posterior a la
edicin.
Como hemos visto hasta ahora, resulta muy difcil sincronizar mltiples relojes
distribuidos para que todos ellos mantengan una nica hora estndar con la suficiente
precisin que no d lugar a ambigedades.
Sincronizacin y Coordinacin - 8
...Relojes Lgicos
Sincronizacin de Relojes
P1
0
6
Figura A
P2
(A,6)
10
12
16
18
24
24
32
30
40
36
48
42
48
54
)
(D,64
60
P3
56
20
(B,24)
(C,60
30
40
50
60
70
64
80
72
90
80
100
SORPRENDENTE !
P1
0
6
Figura B
P2
(A,6)
10
12
16
18
24
24
32
30
40
36
48
42
48
70
76
)
(D,69
P3
61
(B,24
20
30
(C,60
40
50
60
70
69
80
77
90
85
100
RAZONABLE !
Sistemas Distribuidos
Sistemas Distribuidos
Sincronizacin y Coordinacin - 9
Sincronizacin y Coordinacin - 9
Exclusin Mutua
Coordinacin
RAM
P2
P1
P3
Semforos
P4
P5
Monitores
R1
R.C. condicionales
...
R2
NO HAY
MEMORIA
COMPARTIDA
Nuevos Algoritmos
Requisitos
P2
P1
Viveza: Un proceso que desea entrar en una regin crtica debe poder entrar en
algn tiempo (siempre que cualquier proceso ejecutndose dentro de la
regin la abandone). Esto quiere decir que no deben producirse
interbloqueos ni inanicin.
P4
LAN / WAN
P3
R1
P5
SEGURIDAD
VIVEZA
ORDEN
Sistemas Distribuidos
Sistemas Distribuidos
Sincronizacin y Coordinacin - 10
Sincronizacin y Coordinacin - 10
Algoritmo Centralizado
Exclusin Mutua
P1
P2
1.
solicitud
P3
2. ok
del r
e cu r
so
PC
(a)
P1
P2
1.
so
lic
itu
Supongamos ahora que mientras P2 est dentro de la regin crtica otro proceso P1 pide permiso
para entrar en la misma regin crtica. El coordinador sabe que la regin crtica est ocupada, por
lo que no concede el permiso por ej. no respondiendo a la peticin con lo cual el proceso P1 se
queda bloqueado esperando una respuesta. La solicitud de P1 queda encolada en una cola de
peticiones en el coordinador.
Cuando P2 sale de la regin crtica, se lo hace saber al coordinador, el cual saca de la cola de
espera de esa regin crtica la primera solicitud (la de P1) y le enva un mensaje otorgndole el
permiso para entrar en la regin crtica. Al recibir P1 el mensaje de permiso, accede a la regin
crtica.
P4
(b)
R
P1
Es fcil ver que este algoritmo cumple las tres reglas de exclusin mutua: 1) no hay ms de un
proceso en un momento dado; 2) no hay inanicin, pues cuando un proceso sale entra otro (si
est esperando), y 3) la concesin de permisos de acceso se realiza por orden.
Este algoritmo consigue su cometido con tres mensajes: solicitud, concesin y liberacin, y
puede utilizarse para cualquier poltica de asignacin de recursos.
Puntos de fallo
P1
P2
2.
o
P3
PC
Siempre que un proceso cliente P2 quiera entrar en la regin crtica, enva un mensaje de solicitud
al coordinador, indicndole la regin crtica en la que desea entrar. Si ningn otro proceso est en
ese momento dentro de la regin crtica, el coordinador enva una respuesta otorgando el
permiso. Cuando le llega la respuesta al proceso solicitante, entra en la regin crtica. Cuando P2
sale de la regin crtica, se lo comunica al coordinador para liberar su acceso acceso exclusivo.
P4
3. us
o
P3
P4
3. uso d
el recur
so
1. liberacin
PC
Pero este algoritmo tiene sus inconvenientes: puede producirse un fallo de los clientes o del
coordinador. Si falla un proceso cliente cuando est dentro de la regin crtica nunca
notificar su salida al coordinador, con lo que no entrarn ms procesos (se produce inanicin).
P1
(c)
Fallo del Cliente
Requiere 3
Mensajes
Sistemas Distribuidos
Sistemas Distribuidos
PROBLEMAS
Sincronizacin y Coordinacin - 11
Algoritmos Distribuidos
Exclusin Mutua
8
12
P1
12
OK
OK
12
P3
P2
(a)
Entra P1
en R.C.
OK
P3
(b)
P1
OK
(c)
P2
P3
Entra P3
en R.C.
Ms trfico en la red
Se ha replicado la carga del coordinador
Atencin constante
Si hay varias R.C.
a las peticiones
Sistemas Distribuidos
Sistemas Distribuidos
Debido a los problemas del algoritmo centralizado, Lamport dise un algoritmo distribuido en
1978 que requiere una ordenacin total de todos los eventos del sistema (por ej. mediante
relojes lgicos). Ya que requera un alto nmero de mensajes para la entrada en la regin
crtica, en 1981 Ricart y Agrawala propusieron una alternativa mejorada. Veamos cmo
funciona esta ltima alternativa.
Cuando un proceso quiere entrar en una regin crtica, construye un mensaje de peticin
con el nombre de la regin, su identificador de proceso y la hora actual. A continuacin enva el
mensaje a todos los procesos del grupo, incluido l mismo. Cuando un proceso recibe una
peticin de otro proceso, segn su estado, toma una de las siguientes acciones:
1. Si el receptor no est en la regin crtica y no quiere entrar, enva un mensaje OK al
remitente.
2. Si el receptor est dentro de la regin crtica, no responde, simplemente encola la
peticin.
3. Si el receptor quiere entrar en la regin crtica pero todava no lo ha hecho, compara la
marca de tiempo del mensaje que le ha llegado con la de su propio mensaje de
peticin. Si la marca de su solicitud es menor que la del mensaje recibido, lo encola y
no devuelve nada. En caso contrario, le enva un mensaje OK y la propia peticin.
Despus de enviar una solicitud de entrada en una regin crtica, el proceso se pone a esperar
hasta que ha recibido el permiso de TODOS los dems procesos del grupo. Tan pronto
como recibe todos los permisos, puede entrar en la regin crtica. Cuando sale de la regin,
enva mensajes de OK a todos los mensajes de su cola y por ltimo los borra de dicha cola.
Al igual que en el caso centralizado, se consigue la exclusin mutua sin interbloqueo y sin
inanicin, requiriendo por cada entrada en la regin crtica 2(n-1) mensajes, siendo n el
nmero de procesos en el sistema.
Puntos de fallo
Ahora ya no tenemos el punto de fallo del algoritmo centralizado ahora hay n puntos de fallo!
Si cualquiera de los equipos falla, no responder a las peticiones, lo cual se interpretar
(incorrectamente) como la denegacin del permiso, bloqueando as todas las peticiones
subsiguientes al fallo. Hemos multiplicado por n las probabilidades de fallo y con mucho ms
trfico de red!
Esto puede arreglarse si a los mensajes de peticin siempre se les responde con un ACK, de
tal forma que si un equipo no contesta, se puede suponer que est cado y se le saca del
grupo.
Otra posibilidad consiste en entrar en la regin crtica cuando se reciba el permiso de una
mayora, no de todos los equipos. En este caso, cuando un proceso concede un permiso de
entrada en una regin crtica, no puede volver a concederlo hasta que el que est dentro de la
regin crtica notifique su salida.
Si en el algoritmo centralizado tenamos el problema del cuello de botella en el equipo
coordinador, ahora hemos replicado la carga del coordinador en todos los equipos, pues
todos ellos estn involucrados en la decisin sobre la entrada en una regin crtica.
Por ltimo, si los procesos comparten varias regiones crticas, todos ellos estn obligados a
atender continuamente los mensajes de peticin, incluso cuando estn dentro de una regin
crtica.
Sincronizacin y Coordinacin - 12
Sincronizacin y Coordinacin - 12
...Algoritmos Distribuidos
Exclusin Mutua
Algoritmo Token-Ring
4
Dada una serie de equipos conectados por una red de comunicaciones (por ej., mediante un bus
ethernet), debe formarse un anillo lgico, de tal forma que cada equipo sea un nodo del anillo, y
donde a cada uno de ellos se le asigna una posicin en el anillo (por ej. segn su direccin de
red). Cada nodo del anillo debe saber cul es la direccin de su vecino (el siguiente nodo del
anillo).
Cuando un proceso recibe el testigo, si quiere entrar en la regin crtica, retiene el testigo y
entra en la regin crtica. Cuando salga de la regin crtica le pasar el testigo al siguiente nodo
del anillo.
3
2
Aqu tenemos otro algoritmo distribuido para conseguir la exclusin mutua en un sistema
distribuido, desarrollado por Le Lann en 1977.
Este algoritmo, que tambin cumple las reglas de la exclusin mutua (aunque no respeta el
orden), puede requerir de 1 a n-1 mensajes para conseguir entrar en la regin crtica.
4
Puntos de fallo
Anillo Lgico
con Testigo
8
7
Sistemas Distribuidos
Sistemas Distribuidos
En primer lugar debe partirse de una red sin prdida de mensajes, pues de perderse un mensaje
con el testigo, sera difcil detectarlo, pues el tiempo entre apariciones sucesivas del testigo en
un un nodo en la red no est acotado, por lo que el hecho de que no se consiga el testigo no
quiere decir que se haya perdido, quizs algn nodo lo est utilizando. Como es comn, tambin
presenta problemas si falla cualquier proceso del anillo, sobre todo si esto sucede mientras el
proceso est dentro de la regin crtica, y por lo tanto con el testigo, pues el siguiente vecino no
tiene forma de saber si el nodo anterior ha fallado o simplemente est realizando un trabajo largo
dentro de la regin crtica.
Algunos de estos problemas pueden resolverse si los mensajes de paso del testigo se contestan
con otro de reconocimiento. As, si se pierde un mensaje, se pueden hacer reintentos. Despus
de n reintentos puede suponerse que el nodo destino est cado, con lo que habr que eliminarlo
del anillo lgico. Por ltimo, simplemente hay que enviar el testigo al nodo que estaba a
continuacin del nodo en fallo. Para poder hacer esto, se requiere que todos los nodos
mantengan la configuracin completa del anillo.
No obstante, cuando se utilizan temporizaciones para detectar la prdida del testigo, puede darse
el caso de que varios procesos regeneren el testigo, lo cual, obviamente, no es deseado. Misra
ide un algoritmo en 1983 que detectaba la prdida del testigo sin necesidad de temporizaciones,
utilizando para ello dos testigos. Este algoritmo no vamos a tratarlo aqu, pero lo describe el texto
de Raynal en el apartado 2.4.2.
Si cuando un proceso recibe el testigo no desea entrar en la regin crtica, simplemente debe
pasarlo a su siguiente vecino. As, si ninguno de los procesos desea entrar en la regin crtica, el
testigo estar circulando por la red a gran velocidad (ocupacin intil de la red). Chow 10.1.3
describe un algoritmo para una estructura en rbol que evita la transmisin de mensajes cuando
ningn procesador desea entrar en la regin crtica.
Sincronizacin y Coordinacin - 13
Sincronizacin y Coordinacin - 13
Eleccin de Coordinador
Coordinacin
Sincronizacin
Exclusin Mutua
REQUIEREN UN
COORDINADOR
Not
if
P9
ica c
i n
P5
Eleccin
P2
P4
Pi
El coordinador siempre va a ser el proceso con mayor prioridad. Por lo tanto, cuando un
coordinador cae, el algoritmo de eleccin debe elegir el proceso activo con mayor
prioridad. Una vez elegido el proceso coordinador, el identificador o prioridad de ste
debe enviarse a todos los procesos activos del sistema. Adems, los algoritmos de
eleccin deben proporcionan un mecanismo para que los procesos rearrancados (o
recuperados), puedan averiguar cul es el coordinador actual.
El objetivo del algoritmo de eleccin es asegurar que cuando se comience una
eleccin, se concluya con que todos los procesos estn de acuerdo en cul es el
nuevo coordinador.
P7
se conocen
Eleccin de
Coordinador
Exclusin
Mutua
Sistemas Distribuidos
Sincronizacin y Coordinacin - 14
Sincronizacin y Coordinacin - 14
Algoritmo Bully
Eleccin de Coordinador
3. Los procesos estn fsica o lgicamente ordenados, de tal forma que cada uno de
ellos tiene un nico identificador y sabe cuntos procesos hay.
ARRANQUE
ELECCIN
eleccin
el
7
3
eleccin
(c)
0
elec
cin
Sistemas Distribuidos
do r
Sistemas Distribuidos
dina
(e)
coord.
co
or
di
na
do
r
coo
En el peor caso
se requieren
O(n2) mjs.
4
7
4
7
5
0
3. Si cualquiera de los procesos responde, P ya no tiene nada que hacer (no ser
coordinador), y se queda esperando a un mensaje de coordinador.
ok
ok
cin
elec
(b)
ok
eleccin
n
ci
c
e
(a)
Nodo Cado !
Si Nodo Cado = Coordinador
Garca-Molina diseo en 1982 el algoritmo Bully (algoritmo del matn o del ms gallito),
el cual parte de estas suposiciones:
(d)
En el mejor caso
se requieren
O(n) mjs.
Sincronizacin y Coordinacin - 15
Sincronizacin y Coordinacin - 15
Eleccin de Coordinador
(b)
2
5
7
1
6
6
7
8
3
(c)
(d)
5
4
7
7
1
7
3
Sistemas Distribuidos
7
7
Ahora, este proceso que ha recibido el mensaje con su identificador debe enviar un mensaje de
coordinador a su vecino indicando el identificador del proceso que va a actuar como cordinador.
Cuando un proceso recibe un mensaje de coordinador debe poner su estado como no
participante y reenviarselo a su vecino. As hasta que el mensaje vuelva al coordinador. En ese
momento todos los procesos saben qu proceso es el coordinador y vuelven a quedar como no
participantes.
7
8
El 2 enva un mensaje-eleccin
Participantes: 2, 5, 6, 7, 3, 1, 4
Y as sucesivamente hasta que el mensaje de eleccin llega a un proceso que comprueba que el
identificador del mensaje es el propio, lo cual quiere decir que el mensaje de eleccin ha pasado
por todos los procesos y solamente ha sobrevivido el mayor identificador, el suyo.
(a)
Hay varios algoritmos para topologas en anillo (fsicas o lgicas). Aqu veremos uno de Chang y
Roberts, de 1974, que utiliza el principio de extincin selectiva.
Puede ocurrir que varios procesos arranquen a la vez una eleccin y enven mensajes de
eleccin. Pero cuando un proceso participante reciba un mensaje de eleccin de otro proceso y
el identificador recibido sea menor que el propio, el mensaje se tira. Se tira por que como este
proceso ya era participante, quiere decir que ya haba enviado algn mensaje de eleccin con
un identificador mayor que el recin recibido. As, los todos los mensajes de eleccin se van
extinguiendo excepto uno, el que lleva el identificador ms alto.
Si solamente un proceso ha arrancado la eleccin, el peor caso se da cuando el identificador
ms alto lo tiene su vecino de la derecha, con lo que se necesitarn n-1 mensajes para
alcanzarle, ms otros n mensajes para dar otra vuelta y volver al proceso de mayor identificador.
Por ltimo, se requieren otros n mensajes para hacer llegar a todos los procesos el mensaje de
coordinador, haciendo un total de 3n - 1 mensajes.
El mejor caso se produce cuando la eleccin la arranca nicamente el proceso de mayor
identificador, requiriendo solamente 2n mensajes.
3
El 7 difunde Mensaje-coordinador
Todos nodos no participantes
Sincronizacin y Coordinacin - 16
Sincronizacin y Coordinacin - 16
Consenso Distribuido
Coordinacin
Algoritmos
Sincronizacin
Exclusin Mutua
Eleccin
...
Casi todos los investigadores de este campo piensan que el problema ms fundamental del
clculo distribuido es el problema del acuerdo distribuido o del consenso distribuido, es decir,
cmo conseguir que un conjunto de procesos (en distintos nodos) se pongan de acuerdo en el
valor de un cierto dato. Por ejemplo, en los apartados anteriores hemos visto que los algoritmos
para sincronizacin de relojes, exclusin mutua o eleccin se basan en que todo el conjunto de
los procesadores distribuidos se ponen de acuerdo sobre un cierto valor que se intercambian
mediante mensajes.
El enunciado formal del protocolo para un acuerdo distribuido es el siguiente:
Hay M procesadores P = p1, p2, ..., pM que intentan llegar a un acuerdo.
Un subconjunto de ellos, F, funcionan mal, y el resto funcionan bien.
Cada uno de los procesadores propone un valor Vi.
Mediante el protocolo de acuerdo, cada procesador calcula un valor de acuerdo Ai.
Pi
Todos procesadores
correctos llegan al
mismo valor de
acuerdo: A
calcula
Cuando la fase de acuerdo termina, se deben cumplir las dos condiciones siguientes:
C1: Para todos los procesadores correctos, el valor acordado debe ser el mismo (A).
C2: El valor del acuerdo, A, debe ser una funcin de los valores iniciales {Vi} de los
procesadores correctos.
Ahora intentaremos definir el problema de una manera ms informal. Para cualquier protocolo
vlido de sincronizacin o coordinacin que utilice un conjunto de procesadores, se supone que el
protocolo funciona si la informacin que se intercambia en el protocolo es correcta. Ahora bien, si
uno de los procesadores no funciona correctamente puede intercambiar informacin errnea, lo
cual puede conducir a que el protocolo no produzca el efecto deseado (sincronizacin de relojes,
exclusin mutua, eleccin de un coordinador, etc.).
Ai
A = F (Vi correctos)
Tenemos entonces, que para que funcione correctamente cualquier protocolo de coordinacin o
sincronizacin, se debe partir primero de que los procesadores correctos se pongan de acuerdo
en que todos ellos tienen la misma informacin o el mismo valor del dato que intercambian para
ponerse de acuerdo. El problema del consenso consiste en conseguir que an en presencia de
procesadores errneos (que funcionan mal), los procesadores correctos sean capaces de ponerse
de acuerdo sobre un valor, incluso aunque tal valor no sea el optimo.
Hay situaciones en las que ni siquiera las comunicaciones estn exentas de fallos, o en las que
los equipos pueden dejar de funcionar (equipo parado o cado), pero para acotar y simplificar un
problema suficientemente complicado, aqu supondremos que las comunica-ciones son fiables
y que los equipos funcionan (bien o mal).
As pues, el escenario de las comunicaciones utilizadas es el siguiente:
La comunicacin es sncrona sobre una red fiable.
Todos los procesos estn unidos mediante enlaces bidireccionales punto a punto
comunicando a todos con todos. Esto quiere decir que no se puede hacer broadcast.
ESCENARIO DE
COMUNICACIONES
Sistemas Distribuidos
Sistemas Distribuidos
Sincronizacin y Coordinacin - 17
Sincronizacin y Coordinacin - 17
Consenso Distribuido
Los turcos
emprenden la
invasin de Bizancio
Los ejrcitos
bizantinos salen al
encuentro
ATACAR
o
RETIRARSE
Los generales
bizantinos deben
ponerse de acuerdo
Deben acatar la
orden del Capitn
General
Puede
haber generales
traidores !
Los traidores
intentarn confundir
a los leales
El Capitn General
tambin puede ser
traidor
Sistemas Distribuidos
Sistemas Distribuidos
Un da, hace mucho tiempo, el sultn turco emprendi la invasin de Bizancio. El emperador de
Bizancio, enterado de esto, avis a sus ejrcitos para que, desde puntos distintos, salieran al encuentro de
los invasores. Cada ejrcito bizantino estaba dirigido por un general.
Los ejrcitos que salieron de Constantinopla para encontrar a los turcos eran suficientemente poderosos
como para resistir la invasin slo si su accin estaba coordinada (todos atacan o todos se retiran). Despus
de varios das de marcha, los ejrcitos bizantinos acamparon cerca del ejrcito turco. Esa noche cada
general deba pensar en la posibilidad de un ataque al amanecer. Cada uno de los generales bizantinos
tena su propia opinin sobre la fortaleza del ejrcito turco y, por lo tanto, su propia idea sobre si convena
atacar o retirarse. Ya que el ataque tena que estar coordinado, todos los generales haban llegado al
acuerdo que todos acataran una decisin de consenso. As, por la noche, cada general envi mensajeros a
los dems generales para adoptar una decisin consensuada.
Slo haba un problema con el plan de los generales: los bizantinos tenan fama de traidores, por lo que
algunos de ellos podran haber sido sobornados por el sultn turco. Los generales leales saban que si su
ataque era coordinado, saldran victoriosos; pero si unos atacaban mientras otros se retiraban, seran
vencidos. Los generales traidores intentaran engaar a los leales para evitar el ataque coordinado. Por
eso, los generales leales se deban poner de acuerdo en un protocolo para asegurar un acuerdo an en
presencia de algunos traidores.
En el ejercito bizantino hay un capitn general y varios tenientes generales, y se supone que se debe acatar
la orden del capitn general, pero en caso de que no sea as, todos los generales leales, al menos, s deben
tomar la misma decisin, pues la peor situacin se da cuando unos atacan y otros se retiran. No se debe
olvidar que el propio capitn general tambin puede ser traidor y puede intentar confundir a los tenientes
generales.
Veamos a continuacin bajo qu circunstancias se puede lograr un acuerdo entre los
generales leales y cundo esto es imposible.
Sincronizacin y Coordinacin - 18
Sincronizacin y Coordinacin - 18
Consenso Distribuido
Lamport, Shostak y Pease desarrollaron un algoritmo en 1982 que ofrece una solucin
de consenso bajo ciertas circunstancias. Veamos algunos casos sencillos.
C. General
re
r
ti
at
ac
ar
Caso 1-a
s
ar
e
atacar
T. General 1
retirarse
T. General 2
C. General
T. General 1
atacar
retirarse
Caso 1: Tres generales. Si hay un capitn general y dos tenientes generales, y uno de
ellos es traidor pueden los generales leales llegar a un acuerdo, es decir, adoptar todos
la misma postura atacar o retirarse?
La respuesta es no, ya que no hay suficientes generales para formar una opinin
consensuada.
Supongamos que el capitn general es el traidor (caso 1-a). Entonces le dir al teniente
general T1 atacar, y al teniente T2 retirarse. Los tenientes intentarn verificar la orden
hablando entre ellos. T1 le dir a T2 que su orden es atacar, mientras que T2 le dir a
T1 que a l le dijeron retirarse.
Los tenientes podran deducir que el capitn es traidor, pero veamos otra situacin en la
que el capitn general es leal, y uno cualquiera de los tenientes es traidor. Por ejemplo,
supongamos que el teniente 2 es traidor (caso 1-b). El capitn da la orden de atacar a
los dos tenientes. Ahora los tenientes intercambian la orden recibida para asegurarse.
As, que T1 le dice a T2 atacar, pero como T2 es traidor, le dice a T1 que la orden
recibida es retirarse.
Tenemos entonces que cuando es traidor el capitn general o el teniente 2, el teniente 1
escucha ordenes distintas del capitn y del teniente 2. Entonces qu opcin tomar?
a
ac
at
at
ac
ar
Caso 1-b
Ya hemos visto que con tres generales no se puede llegar a un consenso. Veamos en la
siguiente transparencia lo que ocurre con cuatro generales.
T. General 2
T. General 1: ?
Sistemas Distribuidos
Sistemas Distribuidos
Sincronizacin y Coordinacin - 19
Sincronizacin y Coordinacin - 19
Consenso Distribuido
atacar
atacar
atacar
r
ca
ata
T. G. 1
Mayora (v1, v2, ..., vn): Devolver el valor v que sea mayora entre v1, v2, ..., vn
C. General
Caso 2-a
T. G. 2
atacar
ata
ca
Supongamos que el capitn general es leal y que el teniente 3 es traidor (caso 2-a). El
capitn general da la orden de atacar. En la figura vemos que un teniente leal recibe la
orden de atacar del capitn y del otro teniente leal. El teniente traidor puede enviar
cualquier orden a los otros dos tenientes, pero en cualquier caso, no afecta a la funcin
de mayora, por lo que los tenientes leales deciden atacar.
atacar
retirarse
T. G. 3
retirarse
atacar
atacar
atacar
T. G. 1
C. General
r
ca
ata
T. G. 2
atacar
Caso 2: Cuatro generales. Ahora hay un capitn general y tres tenientes generales, y
uno de ellos es traidor. Se puede ahora llegar a un acuerdo? Veremos que ahora el
acuerdo s es posible. Al recibir la orden directa del capitn general y los mensajes de
los otros dos tenientes generales, los tenientes leales deciden la orden de consenso
segn la siguiente funcin de mayora:
G > 3t
re
Es decir que el nmero total de generales (leales y traidores) debe ser, al menos 3t
+ 1.
tir
ars
e
atacar
retirarse
Aunque aqu no vamos a demostrar esto, en Chow 11.2 se trata con bastante
profundidad este problema de los generales bizantinos.
T. G. 3
retirarse
Sistemas Distribuidos
Sistemas Distribuidos
Sincronizacin y Coordinacin - 20
Sincronizacin y Coordinacin - 20
Consenso Distribuido
t Traidores
t + 1 Rondas de Mensajes
Hemos visto que cuando hay un traidor, se requieren dos rondas de mensajes, una del
capitn general a los tenientes, y otra para comunicarse los tenientes entre ellos lo que
les ha dicho el capitn a cada uno. Cuando hay ms de un traidor se complica bastante
el algoritmo, pues para t traidores se requieren t+1 rondas de mensajes.
Por ejemplo, para siete generales y dos traidores, el teniente T1 no solamente tiene que
decir a los dems tenientes lo que le ha ordenado el capitn general, sino tambin lo que
el teniente T2 le ha dicho a T1 que le ha ordenado el capitn general, lo que el teniente
T3 le ha dicho a T1 que le ha ordenado el capitn general, ... Asimismo, T2 tendr que
decir a los dems tenientes lo que el teniente T1 le ha dicho a T2 que le ha ordenado el
capitn general, etc., etc.
En el grfico de la transparencia se ve un esbozo de la solucin para siete generales y
dos traidores.
C
O1
T1
O3 O4 O5 O6
O2
T2
Para entender la notacin de los mensajes, lease el smbolo : como dice. Por
ejemplo, T1:O1 significa T1 dice que ha recibido la orden O1; T2:T1:O1 significa T2 dice
que T1 dice que ha recibido la orden O1.
T3
T4
T5
T6
T1
T1 : O1
T2
T3
T4
T5
T6
T2
T3
T4
T2 : T1 : O1
T5
Sistemas Distribuidos
Sistemas Distribuidos
T6
Sincronizacin y Coordinacin - 21
Sincronizacin y Coordinacin - 21