Unidad Iztapalapa
Ciencias Básicas e Ingeniería
Ingeniería Electrónica Computación
P R O Y E C T O
T E R M I N A L
=ELECCIóN DE LíDER EN
RED
DE
ANILLO=
=ASíNCRONO
=
Mora León Jesús Antonio. 92219786
Proyecto: Elección de Líder en una Red de Anillo
C a s a Abierla al Tiempo
CONTENIDO
(Proyecto Elección de líder en Anillo)
1 Manual Teórico
l . 1 Algoritmo para la elección de líder dentro de una red de anillo l . l . 1 Elección de líder en anillo síncrono
l . l . l . 1 Algoritmo LCR (Lee Chang Robert)
l . l . 1.2 Algoritmo HS (Hirschberg & Smclair) l . l . 1.3 Algoritmo Time Slice
l . l . 1.4 Algoritmo de Rapidez Variable
l . 1.2 Elección de líder en anillo asíncrono
l . 1.2.1 Algoritmo LCR (Lee Chang Robert)
l . 1.2.2 Algoritmo de Peterson
1.2 Análisis de un algoritmo determinísta
1.2.1 Algoritmo de Elección de Hirschberg & Sinclair
1.3 Análisis de un algoritmo probabilista
1.3.1 Algoritmo de las Vegas
I .4 Tabla comparativa para algoritmos deterministas y probabilistas
2 Manual Técnico
2.1 Comunicación Cliente-Servidor
2.2 Estrategias Cliente-Servidor
2.3 Sockets
2.3.1 Socket (TCP / UDP)
1 1 4 5 6 7 8 9 10 12 12 17 17 19 20 22 26 29
C a s a Abierla al Tiempo
Provecto: Elección de Líder en una Red de Anillo
3
4
5
Algoritmo de las Vegas
3.1 Manual de Usuario
3.2 Manual Técnico
3.3 Código Fuente
Algoritmo Hirschberg & Sinclair
4.1 Manual de Usuario
4.2 Manual Técnico 4.3 Código Fuente
Bibliografía
30
35
42
50
56
64
74
Provecto: Eleccihlz de Líder en una Red de Anillo
Casa Abierta 11 Tiempo
1.1 ALGORITMOS PARA LA ELECCIóN DE UN LÍDER
DENTRO DE UNA RED DE ANILLO.
¿Que es la elección de líder?
L a elección de líder es el proceso mediante el cual se determina a un proceso u objeto en especifico
que tendrá determinadas tareas especiales y distintas al resto de los procesos que forman el conjunto.
¿Dónde se usa?
L a elección de líder es utilizada dentro de aplicaciones donde convive un conjunto de entidades con
las mismas condiciones y es necesario escoger a una de ellas para que realice una determinada tarea o proceso en especifico (Simmetry Brealung Problem). Esta elección de líder se da dentro de
procesos distribuidos y redes que necesitan que en un determinado momento sea una de estas
entidades la que se dedique a una tarea concreta.
Para comenzar nuestra discusión respecto a los algoritmos que resuelven el problema de la elección
de un líder dentro de una red de anillo hablaremos de los algoritmos síncronos y una pequeña
descripción de algunos de ellos.
1.1.1 Elección de un líder en un anillo síncrono.
i Q u e significa síncrono? (Al mlsmo tiempo, 6 dentm de ciertas cotas de tiempo)
Es la capacidad ó propiedad de que determinados procesos se realicen al mismo tiempo. Es decir, dentro del funcionamiento de un proceso distribuido es necesario que ciertos cálculos ó tareas se realicen ó liberen al mismo tiempo, para que el resultado final sea correcto.
Provecto: Elección de Lider en una Red de Anillo
Casa Abierla al Tiempo
Para describir el problema proponemos un diagrama como el de la figura siguiente que consiste en un anillo de n nodos.
n
n - I 2
Los procesos asociados con los nodos del anillo no conocen sus identificadores, y ninguno de los dc
sus vecinos; nosotros asumimos que la generación de mensajes y las funciones de transición son
definidas en términos locales y nombres relativos para sus vecinos. El requerimiento para este problema es que, eventualmente, uno de los procesos obtenga como salida la decision de que es líder,
cambiando el valor de una componente para identificar un estado de líder. Hay varias versiones del
problema.
l . Se requiere que todos los procesos sepan quien es el líder
2. El anillo puede ser unidireccional ó bidireccional. Si es unidireccional, entonces los mensajes
pueden ser mandados en la dirección de las manecillas del relo-i.
C a s a Abierla a1 Tiempo
Proyecto: Elecciónz de Líder en una Red de Anillo
3 . El número de n nodos en el anillo puede ser conocido 6 desconocido por los procesos. Si es conocido, significa que el proceso solo necesita trabajar correctamente en el anillo de tamaño n,
y así puede usar el valor n en sus programas. Si es desconocido, significa que los procesos
pueden trabajar en anillos de tamaño arbitrario. Por lo tanto no utilizan esa información acerca
del anillo.
4. Los procesos pueden ser idénticos 6 distintos, al iniciarlos con un zinico identzficador (UID)
seleccionado de algún conjunto ordenado de identificadores como los enteros positivos, asumimos
que cada UID de proceso es diferente en el anillo. Estos identificadores pueden ser restringidos a ser manipulados solo por ciertas operaciones, así como comparaciones, 6 pueden ser admitidas
operaciones sin restricción.
Provecto: Elección de Líder en una Red de Anillo
~
Casa Abierla al Tiempo
1.1.1.1 Algoritmo LCR (Lee Chang Robert).
Este algoritmo utiliza solo comunicación unidireccional y no conoce el tamaño del anillo. Solo el
líder da una salida. El algoritmo utiliza operaciones de comparacicln sobre los UID.
En este algoritmo cada proceso manda su identificador alrededor del anillo. Cuando un proceso recibe un identificador lo compara con el suyo. Si el identificador entrante es mayor que el propio,
continua pasando el identificador entrante; si es menor que el propio, descarta el identificador que
llegó y reexpide el propio, y si es igual al propio, el proceso se declara así mismo como líder.
En este algoritmo, el proceso que tiene el mayor UID resulta líder
L a complejidad en tiempo del algoritmo básico LCR es de 2n vueltas hasta que el líder es anunciado
y la complejidad de comunicación es O(n2), es decir, de n al cuadrado mensajes en el peor dc los
casos. En la versión del algoritmo de paro, la complejidad de tiempo es de n y la complejidad de
comunicación sigue siendo de O(n2). El tiempo extra necesario para detener el algoritmo y para el aviso de no-líder es de n vueltas, y la comunicación extra es de n mensajes.
Provecto: Elección de Líder en una Red de Anillo
Casa Abierla al Tiempo
1.1.1.2 Algoritmo HS (Hirschberg & Sinclair).
Cada proceso i opera en fases O, 1,2, .... En cada fase 1 , el proceso i manda “lokens ” conteniendo su UID u, en las dos direcciones. El “token” intenta viajar una distancia de 2’, luego
regresa a su origen i . Si ambos tokens regresan seguros, el proceso i continua con la siguiente fase.
Como sea, los tokens puede que no regresen. Mientras un token uI va en la dirección de sus
fronteras, cada uno de los procesosj en la ruta de u, compara a u, con su propio UID. Si
u,
u], entoncesj simplemente descarta el token, mientras que si u, ’ui , entonces j reexpide a u i . Si entonces significa que el proceso j ha recibido su propio UID antes que el token haya dado vuelta, asi el procesoj se elige así mismo como el líder.Si el token a viajado 2’ procesos y el ultimo proceso que lo recibe tiene un UID menor que el
repartido por el token , entonces devuelve al token por donde vino , este remonta al anillo hasta su fuente.
Para este algoritmo podemos decir que el número total de fases que son ejecutadas antes de que se
elija un líder y de que toda la comunicación se detenga es de al menos de 1
+
[logn] (incluyendo faseO) así el total de mensajes es de al menos 8n(l + [log n]), lo cual es una complejidad de comunicación de O(n log n),
La complejidad en tiempo para este algoritmo es O(n)
A continuación mostraremos algoritmos donde los UID son enteros positivos y permiten ser manipulados por operaciones aritméticas generales. Para este caso presentamos dos algoritmos, el de
TimeSlice y el de Rapidez Variable (Variablespeeds) cada uno de O(n) mensajes.
Proyecto: Elección de Líder en una Red de Anillo
Casa Abikrla al Tiempo
1.1.1.3 Algoritmo TimeSlice.
Para este algoritmo es necesario saber el tamaño del anillo que diremos es de tamaño yz y es
conocido por todos los procesos, además de utilizar comunicación unidireccional.
El cómputo procede en fases 1,2,..", donde cada fase consiste de n vueltas consecutivas al anillo. Cada fase es asignada a la posible circulación, alrededor de todo el anillo, de un token cargando un UID particular. Más específicamente, en la fase v, que consliste en las vueltas (v -1)n-t 1 ,. , .,vn,
solo a un token cargando un UID v le es permitido circular.
Si un proceso i con UID v existe, y la vuelta (v-l)n+l es alcanzada sin que i previamente haya recibido ningún mensaje no nulo, entonces el proceso i se elige así mismo líder y manda un token
cargando su UID alrededor del anillo. Conforme este token viaja, todos los otros procesos que lo han recibido, se previenen de elegirse a ellos mismos como líder y mandar un token en cualquier otra
fase.
Con este algoritmo, el mínimo UID u,,* eventualmente da toda la vuelta, lo que causa que su proceso origen sea electo. Ningún mensaje es enviado antes de la vuelta (urnm -l)n+l, y ninguno es enviado después de la vuelta umln
*
n. Entonces el total de mensajes mandados es n.Una buena propiedad de estos algoritmos es que el total de mensajes es de n. Desgraciadamente. la
complejidad en tiempo es de n
*
umm, lo cual es un número sin limites aun en un anillo definido. Estacomplejidad en tiempo limita el algoritmo; en la práctica se utiliza para pequeños anillos en donde
sus UID's pertenecen a un pequeño rango de enteros positivos.
Proyecto: Elección de Líder en una Red de Anillo
Casa Abierla a1 Tiempo
1.1.1.4 Algoritmo de Rapidez Variable(Variab1eSpeeds).
Este algoritmo muestra que es suficiente O(n) mensajes en el caso de anillos donde sus proccsos
conocen que n es el tamaño del anillo. Este algoritmo tambien utiliza comunicación unidireccional.
Desgraciadamente, la complejidad en tiempo de este algoritmo es peor que el algoritmo anterior:
O(n.2 Este algoritmo es como sigue:
Cada proceso i inicia un token, que viaja alrededor del anillo, cargando el UID u, de el proceso i
original. Diferentes tokens viajan a diferentes tasas. En particular, un token cargando un UID v viaja con una tasa de 1 mensaje transmitido cada 2" vueltas, esto es, cada proceso a lo largo de su ruta
espera 2" vueltas después de recibir el token antes de mandar el suyo.
Mientras tanto, cada proceso guarda pista de é1 UID más pequeño que ha visto y simplemente
descarta cualquier token cargando un identificador mayor.
Si el token regresa a quien lo originó, este es elegido. Como el algoritmo TimeSlice, este algoritmo garantiza que el proceso con el UID mas pequeño es elegido.
Este algoritmo garantiza que al tiempo que va viajando el token alrededor del anillo con el
identificador mas pequeño umln ~ el segundo identificador mas pequeño puede solo llegar a la mitad
del recorrido, el tercero mas pequeño puede solo llegar aun cuarto del recorrido y as1
consecutivamente. Por consiguiente, para el tiempo de la elección, el token con u,,,, usa exactamcnte n mensajes, por lo que el total de mensajes mandados. es de al menos 2n.
Pero tamblén, para el tiempo que umln da la vuelta al anillo todos los nodos saben acerca de su valor, y asi rechazan mandar algún otro token. Se sigue entonces que 2n 12s un limite superior en el total dc
números de mensajes que se pueden mandar por el algoritmo.
L a complejidad en tiempo, como ya se menciono, es de n
'
2 Umln, desde que cada nodo retarda eltoken que carga a UID umln sólo 2 Um,nunldades de tiempo.
Provecto: Elecciójr de Líder en una Red de Anillo
Casa Abierla al Tiempo
1.1.2 Elección de un líder en un anillo asíncrono.
¿Qué significa asíncrono?
Como su nombre lo indica es lo contrario de síncrono, aquí los procesos realizan cálculos y operaciones y no es necesario que estos se realicen al mismo tiempo ó con una cota de tiempo.
Para la versión asíncrona, tenemos de nuevo un anillo de n procesos, numerados del 1 a n en
dirección de las manecillas del reloj. El anillo puede ser unidireccional ó bidireccional.
La siguiente figura muestra la arquitectura para un anillo asíncrono, incluyendo a procesos y
canales.
Proyecto: Elección de Líder en una Red de Anillo
C a s a Abierla al Tiempo
1.1.2.1 Algoritmo LCR (Lee Chang Robert).
Recordemos que en el algoritmo LCR, cada proceso manda su identificador alrededor del anillo, cuando un proceso recibe un identificador, lo compara con el propio. Si el identificador que llega es
mayor que el propio, continua pasándolo; si es menor que el propio, descarta el identificador que
llego; si es igual al suyo, el proceso se declara líder.
La misma idea continua funcionando en las redes asíncronas; la principal diferencia es que ahora
cada proceso mantiene un buffer que debe ser capaz de guardar cualquier número (no más de n) de
mensajes en lugar de sólo uno. La razón de la diferencia es que la asincronía puede causar apilamientos de UIDs en los nodos.
Para este caso tenemos un número de mensajes O(n2) igual que para el algoritmo síncrono, en el
análisis de tiempo del algoritmo asíncrono, asumimos que el tiempo de procesamiento es
despreciable y que el tiempo de comparación es a lo más l .
Un análisis nos da un límite de tiempo de O(n2(1+d)).
El largo máximo de cualquier buffer ó cola por proceso es n. Así, toma un tiempo de nl para un UlD en un buffer llegar a un canal adyacente, y un tiempo nd para un UID en cola de canal ser recibido por el próximo proceso. Por lo que la complejidad en tiempo es así de O(n’(l+d)).
Es posible obtener un análisis más refinado, consiguiendo un límite de O(n(l+d)).
El punto es que por medio de algunos buffers y colas a mandar, se puede alcanzar un largo de n.
Proyecto: Elección de Líder en una Red de Anillo
Casa Abierla al Tiempo
1.1.2.2 Algoritmo Peterson.
El algoritmo Peterson nos da una complejidad de comunicación de O(n1ogn) usando comunicación
unidireccional. Este algoritmo no necesita conocer el tamaño n del anillo. Utiliza comparaciones
entre los UIDs. Elige un proceso arbitrario como líder, no necesariamente el proceso con el máximo
ó mínimo UID. La complejidad de comunicación de O(n log n) tiene una pequeña constante como
factor (aproximadamente 2).
Para explicar de manera informal como funciona este algoritmo diremos que mientras se ejecuta,
cada proceso se designa para estar, ya sea en modo activo ó rtltransmisión; Todos los procesos
están inicialmente activos. Los procesos activos cargan con todo el “trabajo real” del algoritmo. Los
procesos en modo de retransmisión dejan pasar los mensajes por el anillo. Una ejecución del algoritmo es dividida en fases, en cada una el número de procesos activos es reducido en un factor de al menos 2, por lo que hay a lo más (log n ) fases. En la primera fase del algoritmo, cada proceso i
manda su UID dos pasos en el sentido del reloj, Luego el proceso i compara su propio UID con
aquellos de sus dos predecesores ui-1 y ui-2 en sentido contrarial a las manecillas del reloJ. Si su vecino en la dirección contraria tiene el UID mayor de los tres, esto es, si ui-l>ui-2 y ul-l>ut,
entonces el proceso i se mantiene activo, adoptando el UID de uli-1 de su vecino como un nuevo
“UID temporal”. Por otra parte si uno de los otros UIDs es el mayor de los tres, entonces el proceso
i simplemente se convierte en un transmisor para el resto de la ejecución.
Sentido de Fase
.,.’
Proyecto de Ingeniería Electrónica
‘
M%1
Proyecto: Elección de Líder en una Red de Anillo
Casa Abierla 11 Tiempo
~~
Cada fase subsecuente procede de la misma forma. Cada proceso activo i ahora manda su UID
temporal a los siguientes dos procesos activos en la dirección del reloj, y espera obtener los UlDs
temporales de los procesos activos predecesores. Ahora, si el primer UID predecesor activo es el más grande de los tres, el proceso i se mantiene activo, adoptando el UID de su predecesor, en el caso contrario, el proceso i se convierte en un proceso que sólo pasa mensajes.
Si en alguna fase, un proceso i ve que el UID temporal que recibe de su inmediato predecesor activo
es igual al que tiene, entonces i sabe que es el Único proceso activo que queda. En este caso, el
proceso i se elige así mismo como líder.
Debe quedar claro que en cualquier fase en la cual halla más de un proceso activo, al menos un
proceso descubrirá una combinación de UIDs que le permita permanecer activo en la siguiente fase.
Además, al menos la mitad de los procesos activos pueden sobrevivir una fase dada, todos los procesos que permanecen activos deben tener un predecesor inmediato activo que pasa a modo de
paso.
Ahora analizaremos su complejidad. Como establecimos antes, el número de procesos activos es la
mitad en cada fase, hasta que un proceso activo permanece. Esto significa que el total de nilmeros de
fases hasta que un líder es elegido es [log n]
+
1 .Durante cada fase, el proceso (ya sea activo 6 dctransmisión) manda como máximo dos mensajes, Así; 2n([log n] +1) mensajes son enviados en
cualquier ejecución del algoritmo. Esto es O(n log n) con una mejor constante que para el algoritmo
HS
Esto es por que hay O(log n) fases, y podemos mostrar, de que para cualquier p, las primeras p fases
son completadas con un tiempo de O(pn(l+d)) (En cada fase? cada UID viaja una distancia O(n> alrededor del anillo. Toma un tiempo de a lo mas I+d para un mensaje viajar de un nodo al siguiente,
suponiendo que no esta bloqueado por un apilamiento.
Un análisis más refinado nos da un limite superior de O(n(l+d)). Para dar una idea podemos dcclr que ignoramos los apilamientos ya que estos no dan un significativo retraso en el cálculo de é1 peor
caso.
Casa Abierla al Tiempo
Proyecto: Elección de Líder en una Red de Anillo
1.2
ANALISIS
DE
UN ALGORITMO
DETERMINISTA.1.2.1 UN ALGORITMO COMPLEJIDAD DE COMUNICACI~~N DE O(N LOG N). (ALGORITMO DE E L E C C I ~ N DE HIRSCHBERG & SIIVCLAIR)
El primer algoritmo publicado que reduce la complejidad del peor caso a O(n log n) es el
Hirschberg
&Sinclair
(HAY).
Para iniciar su análisis suponemos que el líder necesita tener una
salida, también asumimos que el tamaño del anillo es desconocido, pero aquí tenemos una
comunicación bidireccional.
Al igual que otros algoritmos de elección el algoritmo
HS elige el proceso con el máximo
UID. Aquí todo proceso, en lugar de mandar su UID a lo largo del anillo, lo manda viajar
una distancia para después regresar al proceso de partida. Se hace esto repetidamente para
distancias más grandes cada vez. El algoritmo
HS
se describe como sigue.
Algoritmo
HS
(informal):
Cada proceso
1opera en fases
O,1,2
....En cada fase
I,el proceso
imanda
su “ficha” que
contiene
suID
uIen ambas direcciones. Esta ficha intenta viajar
2’,y
después regresar a
suorigen (ver figura).
Proyecto: Elección de Líder en una Red de Anillo
C a s a Abierla al Tiempo
Si las dos “fichas” regresan sin ningún problema, el proceso
1’continua la siguiente fase.
Sin embargo las fichas pueden no regresar al punto de partida. Mientras la ficha del proceso
u,
esta viajando en la dirección de ida, cada proceso j en la ruta de
u,
compara a la ficha con
su correspondiente UID
u/.
Si u,<u,, entonces
j simplemente descarta la ficha, mientras si
u,
>
uj,
entonces transmite
u,. Si u;= uj,
entonces significa que el procesoj ha recibido su propio
UID antes que la ficha diera la vuelta completa, entonces el proceso
j
se elige así mismo
como el líder, en el trayecto de regreso todo proceso transmite la ficha.
Ahora describiremos el algoritmo más formalmente. Esta vez, la formalización requiere de
registro para asegurar que las fichas sigan la trayectoria correlcta.
Primeramente, banderas son cargadas por las
fichas indicando el sentido en que van
viajando, de ida
óde regreso. Además, cada salto entre proceso va siendo contado para que
la ficha guarde registro de la distancia que debe recorrer; esto permite que el proceso se dé
cuenta de cuando la dirección de la ficha debe ser invertida. Podemos presentar el algoritmo
de una manera formal
Algoritmo HS formal):
El mensaje que definiremos consta de 3 campos, el UID, una bandera con valor (out, in}, y un
entero positivo que son los saltos a recorrer.
Para un proceso
i,
las variables que describen su estado son:
send+. contiene elementos de Z o null, send., contiene elementos de Z 6 null,
inicialmente send+ y senti - se compone de la tripleta IJID, out, y 1
status. toma valores {unknown, leader), inicialmente unknown
phase, un entero no negativo, inicialmente = 8
e Z conjunto de enteros positivos
send+: envía en sentido de las manecillas del reloj
send -: envía en sentido contrario de alsmanecillas del reloj
Casa Abierla al Tiempo
Proyecto: Eleccidn de Líder en una Red de Anillo
La condición del estado de inicio
start,
consiste de un estado definido para lasinicializaciones dadas.
Para cada
i,
la
función que genera el mensajemsgs
se define como sigue:Envía el valor que tiene send+ al proceso 1+1 Envia el valor que tiene send- al proceso i - 1
Para cada
i,
la función de transicióntrans,
esta definida por ell siguiente pseudocódigo:send+ := null
send - := null
si el mensaje de i - l(vecino izquierdo) es (v. out,hj entonces
caso
v " u y h ' 1 :
send+ := (v,out,h - 1 j /*reexpide hacía la derecha
v " u y h = 1:
send - := (v, in ,1) ,*devuelve por la izquierda v = u :
stutus := leader I* se elige fin caso
si el mensaje de i+ I(vecino derecho) es (v, ouf,h) entonces
caso
v - ' u y h ' 1 :
send-:= (v,out,h - 1) /*reexpide hacía la izquierda v ' u y h = l .
send+:= (v, In ,1) !*devuelve por la derecha v = u :
status := leader /*se elige
fin caso
si el mensaje de r - 1 es (v, rn. 1) entonces (venno rzqulerdo)
send+ := (v, In, 1) /*devuelve por la derecha
si el mensaje de 1 + 1 es (v. rn. 1) entonces (vecino derecho) send - := (v. m , 1 j /*devuelve por la izquierda si los mensaje de I - 1 y I A 1 son ( u , In, 1) entonces
phase- := 2*phase send+-:= (u,out,2 a la phase)
send-:= (u,out,2 a laphase)
Al igual que antes, las primeras dos líneas son para limpiar el estado
Proyecto: Elecciótl de Líder en una Red de Anillo
Casa Abierla al Tiempo
Análisis de Complejidad
Primeramente analizamos la complejidad de comunicación.
Cada proceso manda una ficha en la fase
O;esto es un total de 4n mensajes para la ficha que
va de ida y vuelta en ambas direcciones. Para
I>
O,un proceso manda una ficha en la fase
Isi recibió sus dos fichas de regreso en la fase 1-1.
Esto es exacto sino h e vencido por otro proceso dentro de la distancia
2'"en cualquiera de
las direcciones a lo largo del anillo.
Esto implica que dentro de cualquier grupo de procesos consecutivos de
2""'+1,al menos
uno va a iniciar sus fichas en la fase
1.Esto puede ser usado para mostrar que al menos
procesos, todos juntos inician sus fichas en la fase
1.Entonces el total de
números de
mensajes enviados en la fase
Iesta delimitado por
Esto es debido a que las fichas en la fase k
viajan a través de una distancia 2'.
De nuevo, el factor de
4es derivado de que Ia ficha es enviada en ambas direcciones
(A
favor y en contra de las manecillas del reloj)
y
de que cada ficha en la dirección de ida tiene
que dar la vuelta y regresar.
El
número total de fases que son ejecutadas antes de que el líder sea elegido
y deque toda
comunicación se detenga es de al menos
1+
(log
n>
incluyendo a la fase
O,así el total de
mensajes es de al menos
8rz(l+(log n)),
que O(n log n), con
u nfactor constante de
8.Proyecto: Elección de Líder en unu Red de Anillo
Casa Abierla al Tiempo
La complejidad en tiempo para este algoritmo es justamente O(n). Esto se puede ver
notando que el tiempo para cada fase 1 es
2
*
2' = 2'"'' para las fichas que van hacia h e r ay
de regreso.
La fase final toma un tiempo de
n,
esta es una fase incomlpleta, con fichas viajando en ladirección de ida. La penúltima fase
es
la fase 1 = (logn )
-1,y
su
complejidad en tiempo es deal menos tan grande como el total de la complejidad en tiempo de todas las fases anteriores.
Así, el
total de complejidad en tiempo de todo menos de la fase final es de al menos2
*
2'og *Se sigue que el total en complejidad en tiempo
es
d e al menos 3n sin es
potencia de 2.Proyecto: Eleccidn de Líder en una Red de Anillo
C a s a Abierla 11 Tiempo
1.3
ANALISIS
DE UN ALGORITMO PROBABILISTA.El problema de la elección de líder puede verse como un cambio en la configuración del sistema.
En una configuración inicial del sistema, todos los procesos activos están en el mismo estado
(candidato), en una configuración final, un solo proceso está en un estado predeterminado (elegido) y
todos los demás en un estado predeterminado diferente al anterior (vencido). En la variante del
problema donde los procesos tienen “identidades”, suponemos que todos los procesos tienen manera
de diferenciarse, por el contrario, en una variante “anónima”, el problema de la elección del líder se
resuelve con procesos totalmente idénticos. Los algoritmos distribuidos de elección hechos para redes con identidades operan haciendo una comparación con las identidades de los procesos, son generalmente algoritmos de cálculo de extremos (máximos ó mínimos). En las redes anónimas es evidente que no se efectúa un cálculo de extremo sobre las identidades, la elección anónima rompe
la simetría entre procesos comparando los números producidos aleatoriamente por dichos procesos.
En estas dos variantes, el problema de la elección de líder sobre anillos simples hace aparecer
claramente casi todos los problemas fundamentales de los algoritmos distribuidos y particularmente.
el desempeño ó funcionamiento de los algoritmos.
Podemos decir que es posible construir un esquema general de los algoritmos de elección dentro de
los algoritmos probabilistas ya que 10s anillos unidireccionales tienen varias propiedades
particulares.
1.3.1 Algoritmo de Las Vegas
Ahora dentro de la elección de un líder en un anillo anónimo síncrono tenemos el algoritmo distribuido de Las Vegas A l
Para el algoritmo decimos que su complejidad en tiempo dentro de un “anillo sincrom
unidirecciond’ de orden n es O(n). De manera semejante podemos decir que tiene una complejidad
en bits de la misma forma, es decir, O(n). Así decimos también que su complejidad en memoria es de
log n bits. Finalmente tenemos que la complejidad en comunicación es de n bits.
Proyecto: Elección de Líder en una Red de Anillo
C a s a Abierla al Tiempo
Ahora, dentro de los algoritmos para la elección de líder sobre un anillo anónimo asíncrono
tenemos el caso de un algoritmo que finciona para el caso del anillo unidireccional. Este algoritmo
es el algoritmo distribuido de Las Vegas A2 este algoritmo podemos decir que consta de dos etapas la primera llena de creación de candidatos, consiste en seleccionar los candidatos dentro del anillo que pueden llegar a ser líderes. Esta primera etapa resulta con una complejidad de mensajes
enviados de O(qn
+
cn). La segunda etapa de este algoritmo es la llamada de Elección, que es la quc determina quien será el líder dentro del anillo. En esta segunda parte decimos que la correspondientecomplejidad en mensajes en cierta etapa es lineal y es de la forma O(cn).
El algoritmo en código es el siguiente :
Algoritmo A 7 (Pi);
const n;
var a,c,fase: entero;
estado : {activo, candidato; vencido)
inicio
a: = n;
C.' = o;
estado: =activo; /*inicializacion */
repite
fase : = origen
si estado : = activo entonces
x: = uniforme(0,l I
si x < = l/a entonces
otro
estado : = candidato; c: = 7;
un mensaje
fin-si
fin-si
mientras origen - datephase <n haz
finmientras /+origen - datephase = n */
si c: = 1 entonces /*un unico lider */
c.. = c + I;
fin.
si estado =candidato y c > 1 entonces otro
r i n i otro
estado: =activo
estado: = vencido
c.. = o;
fin-si
hasta que c = 1; /+candidato elegido +/
fin
Provecto: EleccióAt de Líder en una Red de Anillo
Casa Abierla al Tiempo
1.4 Tabla Comparativa Para Algoritmos Deterministas y Probabilistas
Algoritmo LCR O(n
*
)1
2n Y O(n)7
Algoritmo TimeSlice O@>
T
O(n)'1
Algoritmo 2n Y O(n)
Variablespeeds
Algoritmo AsynlLCR
Algoritmo 2n([log n] +1>
=
O(n log Petersodeaderlgoritmo Distribuido n
de Las Vegas A l
'Algoritmo Distribuido" ElecciÓn(H)
I
1
Elección(l2)I
Candt(n,q)1
Proyecto: Elección de Lider en una Red de Anillo
C a s a Abierla al Tiempo
2.1 C O M U N I C A C I ~ N CLIENTE-SERVIDOR.
En el modelo cliente-servidor, los procesos llamados servidores 1le:van a cabo tareas, en beneficio dc
otros procesos denominados clientes. La mayor parte de las redes de área local cuenta con servidores
de archivos que gestionan el espacio en disco común, facilitando le1 uso compartido de archivos y la preparación de copias de respaldo.
Muchas aplicaciones y servicios de red como el correo, la transferencia de archivos (ftp). la
verificación de autenticidad (Kerberos), el ingreso remoto (telnet) y el acceso a sistemas de archivos
remotos (NFS), se basan en el modelo cliente servidor.
El servidor puede estar en la misma máquina que el cliente ó en una distinta, en cuyo caso la comunicación se realizará a través de una red. Dos clases de proltocolos de comunicación de bajo
nivel que manejan el modelo cliente-servidor son los protocolos (orientados a las conexiones y los
protocolos sin conexiones. En el primer caso, un servidor espera que un cliente solicite una conexión,
una vez que se establece se utiliza un descriptor de esta conexión para invocar los servicios que se
requieran.
Una estrategia alternativa es utilizar un protocolo sin conexiones. El cliente envía un mensaje ai
servidor; este a su vez presta el servicio y devuelve una respuesta.
Los protocolos, tanto aquellos sin conexiones como los orientados a las conexiones, se consideran dc
bajo nivel en cuanto a que la solicitud de servicio impllca una comunicación visible. El programador tiene presente la existencia y la ubicación del servidor. y debe nombrar explícitamente el servidor
especifico con el que desea comunicarse.
Provecto: Elección de Líder en una Red de Anillo
C a s a Abierla al Tiempo
La asignación de nombres a los servidores en un entorno de red es un problema difícil. El método
obvio consiste en designar un servidor por su ID de proceso y su ID de nodo. Sin embargo, como el
ID de proceso se asigna cronológicamente en el momento en el que el proceso inicia su ejecución, cs
difícil saber con antelación el ID de un proceso específico en un nodo.
Un servidor “escucha” en un puerto bien conocido que se ha designado previamente para un servicio
en particular. Al establecer la conexión, el cliente especifica claramente una dirección de nodo y un
número de puerto en ese nodo.
La comunicación cliente-servidor más sencilla se efectúa através de un solo puerto de comunicación
como el que se muestra en la siguiente figura.
Proyecto: Elección de Líder en una Red de Anillo
Casa Abierla al Tiempo
2.2 ESTRATEGIAS CLIENTE-SERVIDOR.
Si el cliente y el servidor comparten un sistema de archivos y se ejecutan en la misma máquina, el
mecanismo de comunicación puede ser una tubería(pipe) tipo FIFO. Mientras que si se encuentran
repartidos sobre una red puede usarse un socket 6 una conexión TLL
Cuando el servidor se inicia, abre su conexión de socket con un puerto bien conocido y espera
solicitudes de los clientes. Cuando un cliente necesita un servicio, abre una conexión de socket con el puerto bien conocido del servidor y escribe su solicitud. A continuación, el servidor da el servicio. Este enfoque funciona muy bien si sólo hay un cliente. Si hay más de un cliente, es necesario establecer una convención para enviar el ID de proceso del cliente a fin de poder distinguir las
solicitudes de cada uno de los clientes.
Un solo puerto no es suficiente en el caso de que el cliente necesita recibir una respuesta del servidor. pues no se cuenta con un mecanismo para que el cliente obtenga la respuesta correcta.
La implementación con sockets cuenta con una llamada recvfrom que permite al servidor escuchar
en un puerto de socket bien conocido y detectar solicitudes. Cada solicitud incluye la identidad de
quien la envió. El servidor simplemente utiliza esta identificación en una respuesta sendto al cliente.
Las llamadas recvfiom (recibir de) y sendto (enviar a) constituyen la base del protocolo de sockcz,s sin conexiones.
Si el cliente y el servidor necesitan seguir interactuando durante el procesamiento de la solicitud, resulta útil contar con un canal de comunicación bidirecclonal que sea privado y que no requicra un
intercambio de información de ID de proceso en cada mensaje.
Proyecto: Elección de Líder en una Red de Anillo
Casa Abierta al Tiempo
La siguiente figura ilustra un mecanismo de transferencia en el que la solicitud inicial del cliente sólo
sirve para establecer el canal de comunicación bidireccional que es privado pero no es específico
para un cliente.
)solicitud del cliente
I
Los protocolos orientados a conexiones utilizan el mecanismo de transferencia para establecer un
canal de comunicación entre el cliente y el servidor.
Una vez que un servidor recibe una solicitud y establece un canal de comunicación, puede adoptar
varios canales distintos para atender las solicitudes.
Una posibilidad es cuando un servidor que recibe una solicitud, s’e dedique integramente a atender
esa solicitud antes de aceptar solicitudes adicionales. La figura anterior ilustra la estrategia de
servidor en serie 6 iterativo.
Casa Abierla al Tiempo
Proyecto: Elección de Líder en una Red de Anillo
Un servidor ocupado que atiende solicitudes de larga duración. colmo transferencias de archivos, no
puede utilizar la estrategia de servidor en serie porque sólo permite atender una solicitud a la vez. En la estrategia de servidor concurrente, el servidor construye (bihrca) un hijo que preste el servicio
real al cliente mientras el servidor vuelve a escuchar para detectar solicitudes adicionales. La
siguiente figura es una representación de la estrategia servidor concurrente, y es ideal para servicios
como la transferencia de archivos que tardan un tiempo relativamente largo e implican gran cantidad de bloqueos.
[
comunicaciónCasa Rbierla al Tiempo
Proyecto: Elecciótt de Líder en una Red de Anillo
Puesto que el servidor hijo se encarga de prestar el servicio real en la estrategia de servidor padre, el servidor puede aceptar múltiples solicitudes de clientes en rápida sucesión.
La estrategia de sewidor con hilos representada en la siguiente figura es una alternativa con bajo costo extra que puede utilizarse en lugar de la estrategia servidor padre. En lugar de bifurcar un hijo
para que atienda la solicitud, el servidor crea un hijo en su propio espacio de proceso. Los hilos tienen un gasto mucho menor y el enfoque puede ser muy eficiente, sobre todo si la solicitud es
pequeña 6 en ella predomina la E/S.
t
comunicaciónI
Una desventaja de la estrategia de servidor con hilos es la posible interferencia entre varias
solicitudes en virtud del espacio de direcciones compartido. En el caso de servicios en los que
predominan los cálculos, los hilos adicionales pueden reducir la eficiencia del hilo principal del
servidor 6 incluso bloquearlo.
Provecto: Elección, de Líder en una Red de Anillo
Casa Abierla al Tiempo
2.3 SOCKETS.
La interface de sockets f i e primeramente implementada con el sistema 4. lcBSD para VAX En
1982. A continuación mostramos una tabla donde especificamos las fimciones que los sockets deben implementar para una acción determinada.
SOCKETS
Espacio Asignado
Crea punto de encuentro
Dirección de lazo
Especifica cola listen Espera por conexión
Obtener nuevos fd
Espacio Asignado
Crea punto de encuentro
Dirección de lazo
Conexión a servidor
Transferencia de Datos read
(1
)write ( ) recv ( )
Datagramas
sendto( ) Terminaciones
shutdown ( )
Proyecto de Ingeniería Electrhica
[zmq
Provecto: Elección de Líder en una Red de Anillo
Casa Abierla al Tiempo
A continuación mostramos el diagrama de un escenario típico que toma lugar para una transferencia orientada a conexión y aquí el servido es iniciado primero y un tiempo después algún cliente cs iniciado y conectado al servidor.
Servidor
(conecction-oriented protocol)
r
1
socket ( )I
+
bind ( )Se bloquea hasta Cliente
conectarse con el cliente
l+
-
-
datos(request.1
proceso de solicitud
datodreplay)
LZ-7
~~ ~~ ~
Provecto: Elecciónl de Líder en una Red de Anillo
C a s a Abierla al Tiempo
Para un cliente-servidor usando un protocolo sin conexión, tenemos que las llamadas a sistema son
diferentes. El siguiente diagrama muestra estas llamadas. El cliente no establece una conexión con
el servidor. En lugar de establecer una conexión, el cliente manda un datagrama al servidor usando
la llamada a sistema sendto , la cual requiere la dirección destino (servidor) como parámetro. De manera similar el servidor no tiene que aceptar una conexión por parte del cliente. En lugar de eso, el
servidor sólo utiliza la llamada a sistema recvfrom que espera hasta que los datos llegan de algún
cliente. El recvfrom regresa la dirección de red de un proceso cliente. asi el servidor puede mandar
su respuesta al proceso correcto.
Servidor
(protocolo sin conexi6n)
7
socket ( )bloques hasta recibir
7
socket ( )bind ( )
datos de un cliente
I
datos (request) solicitud-de proceso
I
datos(repiy1
Proyecto: Elección de Líder en una Red de Anillo
Casa Abierla al Tiempo
2.3.1 Sockets (TCP/UDP)
Podemos decir que un socket es la combinación de una dirección IF’ y un número de puerto.
Este término aparece en las especificaciones originales de TCP y más tarde también se tomo este nombre para la interface programable derivada de Berkeley.
Se dice que socket pair es el que especifica los dos puntos finales que de forma única determinan
cada conexión TCP en internet.
A continuación hablaremos de los protocolos TCPIUDP como un s;umario para que el lector conozca sus principales características.
Primeramente es bueno decir que aunque TCP (Transmisión Control Protocolo) y UDP (User Datagram Protocol) utilizan la misma capa de red (IP), TCP nos brinda un servicio totalmente
diferente a la capa de aplicación que nos da UDP.
TCP soporta servicios orientados a conexión (byte stream).
El termino orientado a conexibn significa que dos aplicaciones que usan TCP (normalmcnte consideradas cliente - servidor) debe establecer una conexión TCF’ entre cada una de ellas antes de que puedan intercambiar datos. Por lo que podemos decir que hay dos terminales comunicándose
entre ellas con una conexión TCP.
TCP es un servicio confiable de transporte entre puntos extremos
UDP es simplemente un protocolo de transporte no confiabl’e y sin conexión (orientado a datagramas), cada operación de salida dada por un proceso produce exactamente un datagrama
UDP, que viaja encapsulado en un datagrama IP.
Se envían los datagramas que la misma aplicación escribe dentro de la capa IP, pero no hay garantía
de que se haga la comunicación.
Provecto: Elección de Líder en una Red de Anillo
Casa Abierla al Tiempo
3.1 MANUAL DE USUARIO (Algoritmo <<Las Vegas>>))
Este programa funciona mediante un algoritmo que determina quien es el líder de acuerdo a la probabilidad de cada computadora dentro de n máquinas, es decir, que utiliza una función que nos regresa un valor real entre (0,l) y el valor aleatorio que esta función nos da resulta ser menor ó igual
que la probabilidad l/n que tiene cada maquina de ser líder, este proceso puede seguir compitiendo,
de lo contrario eventualmente este proceso quedará vencido y no podrá seguir compitiendo para ser líder, por otro lado quienes si cumplieron la condición tienen primero que conocer cuantos siguen
compitiendo para ser líder y así pasar a la siguiente ejecución del algoritmo y que se repitan las
operaciones hasta que exista solamente un candidato a ser líder dentro del anillo y por lo tanto el
algoritmo termine nombrándolo como el Único líder del anillo.
Para mostrar de una manera más practica como fimciona el algoritmo y que es necesario para echarlo
a trabajar, a continuación daremos una explicación paso a paso de lo que se tiene que hacer para
poder ejecutarlo.
Primeramente es necesario aclarar que el algoritmo en su totalidad esta dividido en cuatro módulos
El primero de estos módulos se llama ‘‘pr0to.h’ y contiene las variables globales y las llamadas a las librerías que contiene las fbnciones que nuestro programa utiliza.
El segundo modulo es el “anillo.h”, este módulo contiene todas las funciones estructurales necesarias
para formar el anillo, es decir, las fimciones necesarias para hacer las conexiones entre cliente-
servidor que nos sirven para formar el anillo lógico entre n computadoras.
Proyecto: Elección’ de Líder en una Red de Anillo
Casa Abierla al Tiempo
El siguiente modulo es “AlgorVeg.h’, contiene el cuerpo principal del algoritmo <<Las Vegas>> . Es
decir, la codificación del algoritmo junto con una función capaz de saber el número de máquinas que
después de una vuelta siguen siendo activas.
El último módulo “LasVegas.c” contiene las solicitudes de los valores para las variables globales, además de la llamada a la función ‘Zonagrincipal’ que inicializa el anillo y realiza la llamada
correspondiente a éI algoritmo <<Las Vegas>>.
Estos cuatro módulos anteriores serán explicados con más detalle dentro de la parte del manual
técnico correspondiente a este algoritmo.
Es importante mencionar que estos cuatro módulos deben estar en todas y cada una de las máquinas que participen en el anillo y vayan a ejecutar el algoritmo.
Una vez que los cuatro módulos estén en un mismo directorio es; necesario compilar el programa
“LasVegas.c” ya sea con CtrbF9 dentro de la utileria XWPE o WPE de linux con este programa cargado o bien desde el directorio que contenga los módulos mediante la instrucción
gcc EasVegasx -o LasVegasx
Donde el último parámetro puede cambiar segun se elija sabiendo que este último será el nombre del
programa ejecutable.
Proyecto: Elección1 de Líder en una Red de Anillo
C a s a Abierla al Tiempo
Después de haber compilado, el programa se ejecuta de la siguiente manera:
./LasVegas.e
Antes de la ejecución del algoritmo es necesario conocer la dirección de quienes participarán en el
anillo, pues este es uno de los parámetros necesarios para formar el anillo. El anillo debc ir formándose armando primero todos los procesos como “servidores” y el último proceso deberá ser marcado como “cliente”, es decir, que para que el algoritmo funcione debe haber uno y solo un
“cliente” a la hora de echar andar el algoritmo, además de que al momento de armar el anillo se debc
llevar un orden en las direcciones que se colocan para formar el anillo, de otra forma el anillo no quedará bien formado y el algoritmo marcará un error.
AI momento de ejecutar el algoritmo aparecerá la siguiente pantalla.
C a s a Abierla a1 Tiempo
Proyecto: Eleccidn de Líder en unu Red de Anillo
EL primer parámetro que nos pide el programa es la dirección de red de quien estará conectado a la máquina que esta pidiendo el dato. la dirección en este parámetro debe tener el siguiente formato
entero.entero. entero.entero por ejemplo:
148.206.32.10
Así, codifica la dirección IP de la siguiente máquina con la que se conecta la estación que sc esta
configurando. Es importante que este parámetro se introduzca de manera correcta y quc exista de manera real pues de lo contrario el algoritmo no se ejecutará.
El segundo parámetro especifica si el proceso actual debe actuar como “servidor” o “cliente”. Este
parámetro es importante para el fimcionamiento del anillo sabiendo que este trabaja bajo la técnica dc
cliente
-
servidor. Es necesario saber que solamente un proceso dlebe funcionar como clicnte y quetambién debe ser el último en comenzar, es decir, que primero tenemos que terminar de darle los
parámetros a todos los procesos servidores y hasta el final llenar los parámetros del cliente para que
el algoritmo empiece a funcionar.
El siguiente parámetro a teclear es el que se refiere al número de puerto de comunicación que
utilizara la computadora para realizar las recepción y envío de información. Es importante que este
número sea mayor a 5500 pues números menores están ya siendo ocupados por la computadora para otras tareas y al estar ocupados no permitirían que el algoritmcl se comunique como es debido. También debemos mencionar que este número de puerto debe ser el mismo en todas las máquinas en
las que se desee ejecutar el programa y en las que se quiera formar el anillo.
Proyecto: Elección de Líder en una Red de Anillo
Casa Abisrla al Tiempo
Después de que se eligió un número de puerto y este funcionó de manera satisfactoria, este puerto
queda inhabilitado para ejecuciones posteriores del algoritmo. Por lo que siempre que se ejecute el
programa hay que elegir un número de puerto distinto.
El cuarto parámetro pide un número entero cualquiera, a diferencia del número que se pide en el puerto. debe ser distinto en cada uno de los procesos que participan en la elección del líder. Esto,
debido a que este numero sirve como “semilla” ala función que nos dará los números aleatorios entre
(0,l). Esta semilla nos servirá para que cada proceso genere un grupo de números distintos entre
cada proceso. Si de alguna forma esta semilla fuera la misma entre dos o más procesos la generación de números sería la misma entre los procesos que tienen la misma semilla y de esta manera el algoritmo nunca terminará, puesto que siempre estará cumpliendo las mismas comparaciones entre
todos los que estuvieran generando los mismos números y nunca tendríamos un líder en concreto.
También es bueno mencionar que aunque no debe de repetirse el ]mismo número entre procesos, se
puede repetir en una ejecución distinta del algoritmo a diferencia de lo que pasa con el número del
puerto donde ya que se utilizó un número no se puede utilizar posteriormente.
Por último, el parámetro que se refiere al tamaño del anillo debe ser llenado con 11 numero predeterminado del tamaño “n” del anillo, un dato necesario que el algoritmo utiliza para la ejecución correcta del mismo.
Un proceso marcado como “servidor” después de que recibió este parámetro entrará en estado de
espera hasta que el algoritmo se ejecute.
Un proceso marcado como “cliente”, iniciará la ejecución del algoritmo al recibir el parámetro, por lo cual debe ser el idtimo en configurar.
Casa Abierla al Tiempo
Proyecto: Elección de Líder en una Red de Anillo
3.2 MANUAL TECNICO (Algoritmo <<Las Vegas>>).
Para entender como se resuelve la elección de líder en un anillo con técnicas probabilistas. mostramos un diagrama de la comunicación entre las funciones y la comunicación entre los procesos hijos que se
crean, en cada máquina que participa.
-cliente Tuberia-para-el- -sewidc
La función “Zonaqrincipal” es quien inicia las llamadas a las funciones “Tuberiagara-el-servidor”
y “Tuberiaqara-el-cliente”, estas a su vez crean un “pipe” para comunicarse con los procesos hijos que manejarán la comunicación por ‘sockets tcp’ para la parte del cliente y para la parte del servidor de cada una de las máquinas que estén participando en el anillo.
Proyecto: Eleccidn de Líder en una Red de Anillo
Casa Abierla al Tiempo
Después de que se han credo los sockets y los procesos hijos correspondientes para manejarlos,
dentro de la función “Zonagrincipal” se hace la llamada a “Algoritmo~LasVegas” que contienc la estructura del algoritmo <<Las Vegas>> y por lo tanto será esta función quien determine al final quien será el líder dentro del anillo.
L a función “Algoritmo-Lasvegas” utiliza otra función para la comunicación con las máquinas quc
participan en el anillo y así poder determinar que computadoras participantes en el algoritmo siguen
siendo candidatos a ser líder cada vez que se ejecuta el algoritmo, la función utilizada para este fin es la función “Mensajes-enel-anillo”. Más adelante se explicarán en detalle los módulos del programa.
y cada una de las funciones que utilizan.
También en el diagrama anterior observamos que la técnica que utiliza el anillo para poder comunicarse es la creación procesos hijos, que se encargarán de la comunicación permitiendo así al
programa principal dedicarse a otras operaciones mientras los procesos hijos reciben y envían los
datos que necesita el algoritmo para funcionar.
En este programa se le llama servidor al proceso que se dedica a recibir los datos, y cliente es aquel que se va encargar de enviar los datos, tomando en cuenta que es8te es un anillo de comunicación
unidireccional, es decir, que solamente transmitirá datos en un sentido, ya sea en el sentido de las
manecillas del reloj ó al contrario según se diseñe el anillo al momerto de ejecutar el programa.
Para que el programa hncione adecuadamente se tiene que armar el anillo primero con n-1 servidores
y un cliente para un anillo de tamaño n, después de una primera ,vuelta todos los participantes dcl anillo ya tienen sus respectivos proceso cliente y proceso servidor.
A continuación presentamos una gráfica que muestra el flujo de información y el orden de las
llamadas a las funciones hasta llegar al final del programa.
Proyecto: Elección de Líder en una Red de Anillo
C a s a Abierla al Tiempo
1
Provecto: Elección de Lider en una Red de Anillo
Casa Abietla al Tiempo
Ahora veremos con más detalle los cuatro módulos que forman al programa de elección de líder.
PROT0.H
Contiene las llamadas a las librerías que manejan las funciones que se utilizan en este programa
además de la definición de algunas etiquetas que ayudan a que el programa sea comprendido más
fácilmente, se encuentran las variables globales que utilizan los módulos y que son necesarias para
que el algoritmo pueda determinar un líder dentro del anillo.
ANILL0.H
Contiene cuatro funciones encargadas de la arquitectura del millo y de los procesos mediante los
cuales se podrán comunicar los miembros del anillo.
En este módulo se encuentran las rutinas para crear los sockets tcp y crear procesos hi-jos para manejar las rutinas de los sockets ya sea por parte del servidor ó del cliente.
También encontramos las funciones necesarias para crear un anillo unidireccional y manejar la
recepción y el envío de datos de manera eficiente. Es decir, que en este módulo se encuentran las herramientas para construir una red de anillo y sólo restarán los procesos que hacen hncionar a la
red, es decir, fimciones que utilicen estas herramientas para hacer las conexiones adecuadas para
tener una red de anillo funcionando.
Presentamos a continuación las cuatro funciones que están en este módulo y mencionaremos su tarea dentro del programa.
Haz-socket-servidor Tiene la tarea de crear un socket tcp para recibir los datos por parte de un cliente. Por lo que se dice que crea un socket para fbncionar como servidor, después se dedica a esperar datos provenientes de la red y una vez recibidos los coloca en una tubería para ser
utilizados por el resto del algoritmo. Esta hnción trabaja dentro de un proceso hijo que es el
encargado de llamar a esta función .
Proyecto: Elección de Líder en una Red de Anillo
Casa Abierla (11 Tiempo
Haz-socket-cliente Es la parte complementaria de la función anterior, su tarea es crear
un socket tcp para enviar datos a la red y comunicarse directamente con un proceso servidor que lo esté esperando en la computadora vecina y se cumpla la pareja cliente-servidor.
Después de crear el socket, tiene la tarea de leer los datos que el algoritmo genera por medio de una tubería de conexión, que comunica al resto del algoritmo con el proceso hijo, es decir administra el
socket de cliente.
De la misma manera que el socket del servidor fue creado y manejado por un proceso hijo, de igual
forma, aquí un proceso hijo se encarga de todos datos que se tienen que mandar al resto dc la red, por
lo que esta función en su totalidad es llamada dentro de un proceso hijo.
Tuberiaqara_el_sewidor Crea la tubería que comunica al proceso hijo que maneja al
socket servidor, también aquí se hace un fork para crear a ese proceso hijo que tiene la función de
llamar a Haz ~ socketsewidor y permitir que se realice la comunicación con el anillo.
Tuberiagara-el_cliente Crea la tubería para comunicar al algoritmo con el proceso hijo
que tiene l a tarea de crear y manejar la parte del cliente que tendrá que comunicarse y mandar datos
con el vecino próximo en la red. Después de que se crea la tubería se construye al proceso hijo que manejara al socket cliente y será quien mandará llamar a Haz-socketcliente.
ALG0RVEG.H
Este modulo incluye las funciones que representan al algoritmo <<Las Vegas>>:
‘Mensajes-en-el-anillo’ y ‘Algoritmo-Lasvegas’. Esta última es quien contiene integralmente al
algoritmo probabilista que elegirá un líder en la red de anillo. La primera es un complemento de la
segunda que tiene la tarea de intercambiar los mensajes de cada uno de los participantes en la red ademas de contar el número de integrantes que sobreviven a cada llamada del algoritmo de elección.
Mensajes-en-el-anillo(char tam-ani[TAMMAX],int num,char mensaje[TAMMAXfl
Esta fknción esta construida para mandar y recibir los mensajes que las máquinas de la red genercn durante la ejecución del ‘Algoritmo-Lasvegas’ y utiliza estos mensajes para contabilizar quiencs son
los que dentro de la red continuarán en la siguiente vuelta, es decir, regresa el número al que se
reduce el anillo después de cada ejecucion del algoritmo de elección.
Proyecto: Elección de Líder en una Red de Anillo
Casa Abierla al Tiempo
Esta función requiere de tres parámetros para poder funcionar de manera correcta.
tam-ani Contiene el tamaño del anillo que esta guardado en la variable global del programa
del mismo nombre.
num Contiene é1 numero de sobrevivientes que ‘Algoritmo-Lasvegas’ tiene registrado. Este número que se registra y sale de ‘Algoritmo-Lasvegas’, indica si el proceso que
manda llamar a ‘Mensajes-en-elanillo’ se encuentra (num = 1) ó no (num = O) como sobreviviente en la red.
mensaje Define el mensaje que el proceso que esta ejecutando manda hacia su vecino para ser
interpretado y sirva así para que los demás sepan :si sobrevive ó permanecerá vencido en la siguiente vuelta. Este último parámetrlo tiene dos tipos de mensajes:
“PERMANEZCO” ó “ME-SALGO”.
Algoritmo-lasvegas Decide quien será el líder dentro de la red y funciona mediante el
principio del algoritmo probabilista <<Las Vegas>>. Este algoritmo utiliza la probabilidad que tiene
una y solo una computadora para ser líder dentro de una red de tamaño n. Esta probabilidad es l/n y
utiliza este número para compararlo con un número aleatorio generado por una función que toma un
numero real aleatorio dentro del intervalo (0,l) y después de realizar esta comparación decide si el
proceso debe continuar a la siguiente ronda y ser el posible líd.er ó simplemente pasar a ser un
proceso que se declara vencido y solamente se dedicará a pasar los mensajes que le lleguen y permanecerá pasivo dentro de las llamadas posteriores del algoritmo. Este criterio de comparación se
puede explicar como sigue: Si número-aleatorio<=l/n el proceso se convierte candidato a ser el posible líder del anillo. De otra forma mediante comparaciones posteriores pasará a declararse como
“vencido” y no tomará parte significativa en el algoritmo.
LASVEGAS.C
oltimo modulo del programa y es el que se compila para obtener el ejecutable. Esta parte dcl
programa contiene a la función principal además de tener a la hnc.ión que será la encargada de hacer
las llamadas a las funciones que construyen el anillo y hacer una primera vuelta para darles a todos los miembros del anillo el mensaje de inicio, para que todos comiencen el algoritmo de elección de líder.
Casa Abierla al Tiempo
Pro-yecto: Elección de Líder en una Red de Anillo
Zonagrincipal Se encarga de llamar a las funciones que tienen la tarea de crear los
procesos hijos que manejarán la parte del servidor y la parte del cliente, además de armar las
tuberías que comunican a estos procesos con el resto del algoritmo. Dentro de esta función tambikn
se hace una primera comunicación para indicarle a todas las computadoras del anillo que el algoritmo
esta por iniciar, cada máquina recibe este mensaje y hace la llamada correspondiente a la función
‘Algoritmo-Lasvegas’ para así tener un líder dentro del anillo.
Main
0
Esta es la función principal en donde se obtienen todas las variablesglobales que el algoritmo necesita para ejecutarse sin problemas como son: la dirección, el modo de inicio, el tamaiío del anillo, el puerto de comunicación y el número que recibirá como semilla para la
generación de números aleatorios. Además aquí es donde se realiza la llamada a ‘Zonagrincipal’ que
dará inicio al algoritmo las vegas y que nos dará un líder.