Sunteți pe pagina 1din 12

  

          


           INSTITUTO DE COMPUTAO
          
           UNIVERSIDADE ESTADUAL DE CAMPINAS

MC715  Relatrio 1
Grupo 10

Technical Report - IC-10-10 - Relatrio Tcnico

March - 2010 - Maro

The contents of this report are the sole responsibility of the authors.

O contedo do presente relatrio de nica responsabilidade dos autores.


MC715  Relatrio 1
Grupo 10
Arthur Azevedo de Amorim Davi de Melo Jorge Barbosa
Helder dos Santos Ribeiro Virglio Santos

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

como um endereo seguido de um nmero, que representa o tamanho em bits do nmero de


rede para endereos daquela rede.
A cada rede corresponde uma mscara de sub-rede, que um endereo com os bits do
nmero de rede em 1 e o resto em 0. Dessa forma, dado um endereo, basta fazer um E bit-
a-bit com sua mscara de sub-rede associada para se descobrir o nmero da rede. Pode-se
considerar que as antigas classes de redes possuam ento mscaras de sub-rede implcitas.
CIDR interessante pois, alm de permitir uma maior granularidade na atribuio de
redes IP, possibilita que se agregue vrias redes para formar uma super-rede, o que torna as
tabelas de roteamento mais simples.

No caso da rede Ethernet, o uso de broadcast aumenta o trfego na rede? Sim


ou no? Justique.
Os quadros enviados em Ethernet sempre so vistos por todas as mquinas que comparti-
lham o mesmo enlace, logo o sistema funciona naturalmente em broadcast, sem sobrecarga
adicional. Nesse contexto, broadcasts so enviados uma nica vez, e todas as mquinas
escutam e aceitam a mensagem. O que diferencia mensagens de broadcast de mensagens
ponto-a-ponto normais o endereo de destino: existe um endereo MAC especial que in-
dica que uma mensagem destinada a todas as mquinas do enlace.

Como se consegue comunicao ponto-a-ponto na Ethernet?


Embora os quadros sejam recebidos por todas as mquinas em uma mesma rede, uma dada
mquina no manter qualquer mensagem que receber: ela o far baseada no endereo de
destino do quadro. Cada placa de rede possui um endereo MAC, idealmente nico, que
permite que se enderece um quadro para uma mquina especca da rede.

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

O seu grupo de projeto realiza broadcasts em um laboratrio do IC. Os quadros


enviados podero ser recebidos por processos no laboratrio vizinho? Suponha
que cada laboratrio uma rede Ethernet e que as redes dos laboratrios so
interligadas por roteadores.
Caso seja utilizado o endereo de broadcast usual (direct broadcast ), a passagem do broadcast
para as redes vizinhas vai depender da congurao da rede dos laboratrios envolvidos (ips
e mscaras envolvidos) e da congurao do roteador para repassar o broadcast de uma rede
para outra. Uma opo garantida para que o broadcast no extravase a rede utilizar o
endereo de broadcast especial 255.255.255.255.

Multicast e Broadcast na Internet

Aplicaes que usam multicast na escala da Internet pblica so praticamente inexistentes.


Existem vrios problemas de natureza econmica e de segurana com o protocolo e, como
o IPv4 classica seu suporte como opcional, a maioria dos roteadores da Internet no o
implementam.
Problemas de segurana incluem ataques que usam o IGMP (protocolo que controla
a entrada e sada de clientes em grupos de multicast ) como amplicador de pacotes para
negao de servio. Outro problema relacionado a segurana que no h como o remetente
controlar quais destinatrios so ou no aceitos.
Trfego multicast tambm difcil de rastrear e cobrar, motivo pelo qual provedores de
Internet (ISPs) em geral o desabilitam. O Mbone uma alternativa gratuita que consiste
de uma infraestrutura de enlaces paralela da Internet. Por ser paralela, depende de que
ISPs estejam conectados a ela para que seja acessvel a usurios nais. Como isso raramente
acontece, seu uso basicamente restrito a aplicaes cientcas e de engenharia.
O broadcast IP alm das redes locais sofre de problemas similares de segurana e controle
de uso de banda, sendo por isso desabilitado pelos provedores de camadas mais altas.

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:

Para quaisquer eventos a e b, se a ocorre causalmente antes de b, ento o a deve


ter ocorrido em um tempo lgico anterior ao de b1 .

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:

Cada processo Pi incrementa Ci entre quaisquer dois eventos consecutivos.

Se o evento a em Pi o envio de uma mensagem m, essa mensagem contm um


timestamp Tm que o valor de Ci durante o evento a.

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

3.2 Excluso Mtua

A partir da ordenao total, possvel implementar um algoritmo de excluso mtua em


sistemas distribudos, como o prprio Lamport sugere na mesma publicao.
O algoritmo, da forma como ser descrito, assume que as mensagens entre quaisquer dois
processos so recebidas na mesma ordem em que foram enviadas e que toda mensagem envi-
ada recebida em algum momento. Essas suposies so apenas para evitar outros detalhes
de implementao. A simples utilizao de um protocolo TCP garante essas condies.
O algoritmo tambm assume que a regio crtica concedida inicialmente a exatamente
um processo. Cada processo processo mantm, alm do relgio lgico, uma la de requisies
local. Assumimos que as las so iniciadas com a mensagem  T0 : P0 requests, onde T0 o
valor inicial de todos os relgios.
O algoritmo denido da seguinte forma:

Para requisitar um recurso, o processo Pi envia uma mensagem  Tm : Pi requests para


todos os outros processos (broadcast ), e coloca essa mensagem na sua prpria la.

Quando um processo Pj recebe a mensagem  Tm : Pi requests, ele coloca essa mensa-


2
gem na sua prpria la e envia um ack de volta para 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 ).

Quando um processo Pj recebe uma mensagem  Pi releases, ele remove qualquer


ocorrncia de  Tm : Pi requests de sua la.

O recurso concedido ao processo Pi quando

 Existe uma mensagem  Tm : Pi requests na sua la que ordenada antes de


qualquer outra mensagem na sua la .
3

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

 Pi recebeu de cada um dos outros processos alguma mensagem posterior


4 a

(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

com timestamp maior ou igual que T


Pj m j
m
Relatrio 1 7

39 // chamado pelo on receipt denido no cdigo anterior


40 procedure process_received_msg ( ts , , msg)j
41 begin
42 case (msg) of
43 req :
44 q[ j ] := ( ts , j , req ) ;
45 sendmsg( j , ack ) ;
46 rel :
47 q[ j ] := ( ts , j , r e l ) ;
48 ack :
49 i f ( type (q[ j ]) != req )
50 q[ j ] := ( ts , j , ack ) ;
51 end
52 end
Pseudo-cdigo 2: Excluso mtua no processo Pi

4 Herman e Verjus 1979


O algoritmo de Herman e Verjus [HV79] usa o esquema de ordenao com relgios lgicos
exposto por Lamport [Lam78] para poder replicar uma base de dados atravs de mltiplas
mquinas de forma consistente. A ideia bsica muito simples e consiste em fazer com que
todas as mquinas enxerguem a mesma sequncia de operaes na base de dados. Como
as operaes so deterministas, isso implica que todas as bases tero o mesmo estado, ou
ento, mais precisamente, como dito pelos autores, se toda atividade de usurio parar, as
cpias devem convergir, aps um perodo de tempo nito, para o mesmo estado. Segundo os
autores, ao contrrio de outros algoritmos semelhantes, este busca maximizar o paralelismo
minimizando o travamento global. Vale notar, porm, que o algoritmo no tolerante a
falhas.
So denidas quatro operaes abstratas que podem ser feitas sobre a base de dados.
Numa estimao (estimate ), a mquina devolve o valor contido na cpia local do item de
dados pedidos imediatamente. Uma leitura (read ) tambm devolve esse valor, mas o faz aps
garantir que todas as requisies feitas at ento sejam processadas. Uma escrita (write )
altera um valor de um item de dados, propagando essa mudana para todas as outras cpias.
Enm, uma atualizao (update ) executa uma sequncia de operaes de escrita e leitura
que so vistas como atmicas pelos outros processos.
O modelo de comunicao entre os processos o mesmo daquele da seo anterior, ou
seja, temos canais de comunicao ponto-a-ponto sem falhas e que preservam a ordem de
envio das mensagens. Cada processo mantm uma la para cada outro, incluindo ele mesmo,
onde ele registra as requisies pendentes advindas de cada processo. Apenas quando ele
percebe que uma requisio no pode ser precedida por nenhuma outra ele a executa. Mais
detalhadamente, temos o seguinte pseudo-cdigo:

1 var pid , queues , db , clock ;


2
3 function estimate ( i )
4 return db[ i ] ;
Relatrio 1 8

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

operaes individuais entre mensagens especiais marcando incio e m da transao. A


precedncia temporal das operaes sempre julgada combinando-se seu tempo lgico com
o identicador requisitante, como explicado anteriormente. Como leituras e estimaes no
afetam o estado geral, elas no precisam ser informadas aos outros processos. Finalmente,
exige-se um reconhecimento de processos com las vazias para garantir que no h uma
requisio de prioridade maior que ainda no chegou: se existir, o algoritmo esper-la-;
seno, o reconhecimento chegar e ento ele poder prosseguir.

5 Chandy e Lamport 1985


Um grande problema em Sistemas Distribudos a diculdade de enxergar o estado do
sistema como um todo a partir de um processo, advinda em parte da ausncia de uma
noo global de tempo. Tal conhecimento seria muito til, por exemplo, na determinao de
propriedades estveis do sistema, isto , propriedades que uma vez satisfeitas permanecem
verdadeiras, como a terminao de uma computao distribuda.
Em uma primeira tentativa, um processo que deseja determinar o estado global poderia
simplesmente mandar um pedido a ser propagado a todos os ns da rede, pedindo que
estes lhe mandassem um retrato de seu estado. Infelizmente, ao combinar todos os estados
individuais amostrados, o estado global obtido pode ser inconsistente, devido propagao
das mensagens contidas nos canais enquanto a requisio era feita. Por exemplo, em um
banco distribudo, suponha que haja uma transferncia de cem reais da conta de um cliente
A para um cliente B. Se o saldo da conta de A transmitido por um n e o da de B por
outro, seria possvel que o saldo de A fosse transmitido anteriormente transferncia e o
de B aps, fazendo com que a quantidade total de dinheiro nas contas fosse maior que a
verdadeira.
Chandy e Lamport [CL85] observam que determinar a unio exata dos estados de todos
os processos do sistema em um dado instante no essencial, bastando muitas vezes que
a coleo de estados quando composta seja coerente. Informalmente, a noo de coerncia
denida quando o estado total amostrado poderia ocorrer em uma sequncia de eventos
equivalente verdadeira.
O modelo computacional adotado pelos autores o de uma rede formada por ns e ca-
nais de comunicao unidirencionais entre eles. Os podem acessar seu estado local, alter-lo,
enviar mensagens atravs de canais saindo dele e receber mensagens previamente enviadas
por outros ns de canais incidentes. Assume-se que os canais preservam a ordem das mensa-
gens, no falham e entregam todas as mensagens enviadas eventualmente. Alm dos estados
dos ns no sistema, gravaremos tambm os estados de cada canal do sistema, isto , as
mensagens ainda no recebidas enviadas atravs de cada canal.
O algoritmo em si simples:

1
2 var recorded ;
3
4 function propagate ()
5 record state ;
6 recorded := true ;
Relatrio 1 10

7 for each chan in outgoing


8 send_marker(chan) ;
9 for each chan in incoming
10 start_record (chan) ;
11
12 function receive_marker (chan : channel )
13 // marker recebido atravs de chan
14 i f (! recorded )
15 propagate () ;
16 stop_record (chan) ;
Pseudo-cdigo 4: Algoritmo de Chandy e Lamport para amostra de estado global
consistente.

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

[HV79] D. Herman and J. P. Verjus. An algorithm for maintaining the consistency of


multiple copies. IRISA, pages 625631, 1979.

[Lam78] Leslie Lamport. Time, clocks, and the ordering of events in a distributed system.
Commun. ACM, 21(7):558565, 1978.

[Tan02] Andrew Tanenbaum. Computer Networks. Prentice Hall Professional Technical


Reference, 2002.

[wik] Classful network - wikipedia. http://en.wikipedia.org/wiki/Classful_


network (21/03/2010).

S-ar putea să vă placă și