Documente Academic
Documente Profesional
Documente Cultură
MC715 Relatrio 1
Grupo 10
The contents of this report are the sole responsibility of the authors.
24 de maro de 2010
1 Introduo
Neste primeiro relatrio, apresentamos as bases tericas que sero utilizadas nos outros
quatro subprojetos de implementao subseqentes. Sistemas distribudos necessitam de
uma rede para a comunicao entre os diversos computadores do sistema, por isso, iniciamos
respondendo algumas questes sobre redes na seo 2.
Em seguida, apresentamos resumos e pseudo-cdigos de trs algoritmos clssicos de Sis-
temas Distribudos que sero utilizados no decorrer da disciplina. Seguindo a ordem crono-
lgica, o algoritmo de ordenao total de [Lam78], juntamente com um exemplo de uso
um algoritmo de excluso mtua so apresentados na seo 3. Em seguida, na seo 4
discutimos um algoritmo baseado nesse mecanismo, de Herman e Verjus [HV79], para orde-
nao e replicao de dados. Finalmente, na seo 5, apresentamos o algoritmo de Chandy
e Lamport [CL85] para obteno de estados globais consistentes num sistema distribudo,
publicado em 1985.
2 Questes
Quantos classes (tipos) de endereo IP existem? Como so especicados?
H cinco classes distintas de endereos IPv4, que so identicadas pelos quatro primeiros
bits dos trinta e dois que formam um endereo IPv4. A classe A tem endereos que comeam
com 0; os da B comeam com 10; os da C comeam com 110; os da D comeam com 1110 e
os da E comeam com 1111. A classe D reservada para grupos de multicast e a classe E
reservada para uso futuro.
As classes A, B e C dividem seus endereos IP em duas partes: o nmero de rede,
que identica cada rede, e o resto, que identica um computador dentro de uma rede. Os
nmeros de rede tm em cada classe respectivamente 8, 16 e 24 bits.
Entretanto, vale lembrar que as antigas classe IP hoje esto essencialmente obsoletas,
por seguirem um esquema demasiado restritivo, incompatvel com a expanso da Internet.
Em vez disso, a rede segmentada em uma hierarquia de sub-redes seguindo um sistema
conhecido como Classless Inter-Domain Routing (CIDR). Em CIDR, cada rede especicada
1
Relatrio 1 2
Aps fazer login em uma estao UNIX do laboratrio do IC, como possvel
determinar o endereo de broadcast para todas as interfaces de rede (mquinas)
dessa rede? Especique os comandos UNIX utilizados para obter a informao
sobre broadcast para a rede e explique porque foram utilizados e como funcio-
nam.
Basta utilizar o comando:
$ ifconfig | grep 'inet addr:'| grep -v '127.0.0.1' | awk '{print $3}'
O ifcong exibe a congurao de todas as interfaces de rede dessa mquina. Os outros
comandos so utilizados apenas para ltrar os endereos de broadcast e remover a interface
de loopback.
Relatrio 1 3
3 Lamport 1978
3.1 Ordenao total
Apresentamos aqui uma verso resumida do algoritmo descrito em [Lam78] que garante
a ordenao total de eventos em um sistema distribudo. A ordenao total segue quase
diretamente da denio de relgios lgicos, tambm introduzidos no artigo.
Relgios lgicos so denidos pela condio a seguir:
Qualquer implementao que garanta essa condio um relgio lgico. Apesar dessa li-
berdade dada pela denio, apresentaremos uma verso especca a mesma utilizada na
1
Usando a notao do Lamport: para quaisquer eventos a e b, se a b, ento C(a) < C(b)
Relatrio 1 4
prtica em [Lam78]. Cada processo Pi possui um relgio Ci que segue as seguintes regras
de implementao:
Quando um processo Pj recebe uma mensagem m, ele atualiza Cj para um valor maior
ou igual ao valor atual e a Tm .
Essas regras de implementao garantem que o relgio atende a condio que dene
relgios lgicos denida anteriormente.
Para obter a ordenao total, basta ordenar os eventos pelo valor do relgio lgico local
no momento em que ele ocorreu. Para desempatar, pode-se usar uma ordenao total
arbitrria dos processos, por exemplo, orden-los por pid. Essa ordenao total obtida
pelo pseudo-cdigo a seguir:
1 type
2 clock : nonnegative integer ;
3 pid : 0..N 1;
4
5 message = <timestamp , process id , [ payload]> // timestamp o relgio local de
quem enviou a mensagem
6
7 on process P i
8
9 var
10 l lc : clock ; // relgio lgico local
11
12 function sendmsg( dest : pid , msg : payload )
13 begin
14 sent ( llc , i , msg) to dest ;
15 l lc := ll c + 1;
16 end
17
18 procedure run_event( event : function )
19 begin
20 call event
21 l lc := ll c + 1;
22 end
23
24 on receipt // ativado pelo recebimento de mensagem
25 of ( ts , j , msg) do
26 begin
27 // atualiza relgio local
28 i f ( l l c < ts )
29 l lc : = ts ;
30 l lc : = l lc + 1;
31
32 // processa mensagem
33 process_received_msg ( ts , j , msg) ;
Relatrio 1 5
34 end
35
36 // ordenao total em si: compara dois pares de pid/clock
37 function compare( (id1 , ts1 ) : pid clock , (id2 , ts2 ) : pid clock )
38 begin
39 i f ( ts1 != ts2 )
40 return compare( ts1 , ts2 ) ; // usa a comparao entre os timestamps
41 else
42 return compare(id1 , id2 ) ; // desempata com os pids
43 end
Pseudo-cdigo 1: Ordenao total no processo Pi
Para liberar o recurso (sair da regio crtica), o processo Pi remove qualquer ocorrncia
de Tm : Pi requests de sua la e envia uma mensagem Pi releases para todos os
outros processos (broadcast ).
2
Sendo este evento o envio de uma mensagem, o ack tambm leva consigo um timestamp
3
Para essa ordenao, usamos o timestamp, e, como critrio de desempate, o nmero do processo
Relatrio 1 6
(Tm , Pi ).
Para obter uma especicao do algoritmo mais prxima de uma implementao real,
seguimos o mesmo estilo do pseudo-cdigo 1, utilizando inclusive a funo on receipt. A
la implementada de uma forma um pouco diferente da especicao anterior. A varivel
q mantm a ltima mensagem recebida de cada processo, servindo como la (se olharmos
apenas as posies com req) e facilitando a vericao do timestamp para a entrada na
regio crtica.
1 type
2 clock : nonnegative integer ;
3 pid : 0..N 1;
4 msgtype : ( req , rel , ack ) ;
5
6 message = <timestamp , process id , msgtype> // timestamp o relgio local de quem
enviou a mensagem
7
8 on process P i
9
10 var
11 l lc : clock ; // relgio lgico local
12 q : array [ 0 . .N 1] of message ; // la
13
14 procedure broadcast (msg : msgtype , dest : pid )
15 begin
16 for all j != i
17 sent ( llc , i , msg) to dest ;
18 l lc := ll c + 1;
19 end
20
21 main_routine : // Rotina principal em P : requisio, aquisio e liberao da regio crtica
begin
i
22
23 // requisio
24 q[ i ] := ( llc , i , req ) ;
25 broadcast ( llc , i , req ) ;
26
27 // espera
28 while ( exists j != i with (timestamp(q[ j ]) , j ) < (timestamp(q[ i ]) , i ) )
29 wait ;
30
31 // Regio Crtica aqui
32 critical_region_code () ;
33
34 // liberao
35 q[ i ] := ( llc , i , rel );
36 broadcast ( llc , i , rel );
37 end
38
Posterior no sentido da ordenao total que denimos P deve ter recebido de cada um dos processos
4
com j < i alguma mensagem com timestamp maior que T , e de cada dos P com i < j alguma mensagem
i
5
6 function write ( i , v)
7 msg := (pid , clock , (" write " , i , v) ) ;
8 clock++;
9 enqueue(msg, queues [ pid ]) ;
10 for each p != pid
11 send(msg, p) ;
12
13 function read ( i )
14 msg := (pid , clock , (" read " , i ) ) ;
15 clock++;
16 enqueue(msg, queues [msg]) ;
17 while (! newest(msg) )
18 wait ;
19 return db[ i ] ;
20
21 function update( l )
22 msg := (pid , clock , "begin ") ;
23 enqueue(msg, queues [ pid ]) ;
24 for each p != pid
25 send(msg, p) ;
26 for each op in l
27 execute op keeping clock value ;
28 msg := (pid , clock , "end") ;
29 enqueue(msg, queues [ pid ]) ;
30 for each p != pid
31 send(msg, p) ;
32 clock++;
33
34 function receive ()
35 // ativado pelo recebimento de mensagem msg
36 clock := max( clock , timestamp(msg) ) + 1;
37 i f ( type (msg) == "answer")
38 send (( pid , clock , "ack") , sender (msg) ) ;
39 clock++;
40 enqueue(msg, queues [ sender (msg) ]) ;
41
42 function process ()
43 // ocorre paralelamente enquanto houver requisies
44 for each p != pid
45 i f (is_empty( queues [p ]) )
46 send (( pid , clock , "answer") , p) ;
47 clock++;
48 wait for pending acks ;
49 op := operation of highest priority among all queues ;
50 execute (op) ;
Pseudo-cdigo 3: Algoritmo de Herman e Verjus para manter a consistncia de cpias de
uma base de dados em um sistema distribudo.
Esse cdigo merece alguns comentrios. As mensagens enviadas contm sempre, alm de
seu corpo, o identicador do processo que a enviou e o instante lgico no qual a requisio
ocorreu (varivel clock). Mensagens de atualizao so formadas pelas mensagens das
Relatrio 1 9
1
2 var recorded ;
3
4 function propagate ()
5 record state ;
6 recorded := true ;
Relatrio 1 10
Assume-se que algum evento faz com que um ou mais ns iniciem o algoritmo chamando a
funo propagate. O algoritmo termina quando todos os ns tiverem recebido um marcador
de todos seus canais incidentes, e ocorre parte da computao distribuda principal.
simples de ver que isso sempre ocorre se o grafo da rede for fortemente conexo. Os autores
armam que aps o algoritmo ter terminado pode-se empregar um dos vrios mecanismos
existentes para coletar a informao gravada, como fazer com que cada n propague o seu
estado e os estados novos que receber para seus vizinhos.
Finalmente, os autores denem seu critrio de consistncia e provam que o algoritmo dado
o satisfaz: se a amostragem comea em um estado Ei e termina em um estado Ef resultando
em um estado Ea , ento existem duas sequncias de eventos que levam respectivamente Ei
at Ea e Ea Ef . essa propriedade que usada para denir um meio de deteco de
at
propriedades estveis: basta gravar um estado global e vericar se a propriedade vlida
nesse estado. Como o estado nal alcanvel do estado amostrado atravs de alguma
sequncia de eventos e a propriedade invariante sob os eventos ocorridos, a propriedade
ser vlida para o estado global verdadeiro.
6 Concluso
Neste trabalho analisamos alguns conceitos bsicos em redes e algoritmos distribudos. Esse
ferramental importante pois formar a base do sistema que construiremos ao decorrer do
curso. Embora a exposio original dos algoritmos inclua s vezes breves discusses sobre
falhas que podem ocorrer nos sistemas e seus efeitos na computao, tolerncia a falhas no
uma preocupao essencial, tornando os sistemas vulnerveis. Devido s condies favo-
rveis, como experimentar com uma rede local e no desenvolver um sistema de produo,
isso dicilmente ser um problema grave. Porm, seja por necessidade ou por propsitos
didticos, poder-se- futuramente buscar solues para contornar tais situaes.
Referncias
[CL85] K. Mani Chandy and Leslie Lamport. Distributed snapshots: Determining global
states of distributed systems. ACM Trans. Comput. Syst., 3(1):6375, 1985.
Relatrio 1 11
[Lam78] Leslie Lamport. Time, clocks, and the ordering of events in a distributed system.
Commun. ACM, 21(7):558565, 1978.