Resumo de Lamport '78, Herman-Verjus '79 e Chandy-Lamport '85

12

description

Lamport '78: Algoritmo de ordenação total com relógios lógicos Herman-Verjus '79: Algoritmo de replicação consistente de dados usando Lamport '78 Chandy-Lamport '85: Algoritmo de obtenção de estados globais consistentes (snapshots) de um sistema distribuído. Todos os resumos incluem pseudo-código.

Transcript of Resumo de Lamport '78, Herman-Verjus '79 e Chandy-Lamport '85

Page 1: Resumo de Lamport '78, Herman-Verjus '79 e Chandy-Lamport '85

�������������������� ��������������������������������������������������������������������������������������������INSTITUTO DE COMPUTAÇÃOUNIVERSIDADE ESTADUAL DE CAMPINAS

MC715 � Relatório 1

Grupo 10

Technical Report - IC-10-10 - Relatório Técnico

March - 2010 - Março

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

O conteúdo do presente relatório é de única responsabilidade dos autores.

Page 2: Resumo de Lamport '78, Herman-Verjus '79 e Chandy-Lamport '85

MC715 � Relatório 1

Grupo 10

Arthur Azevedo de Amorim Davi de Melo Jorge Barbosa

Helder dos Santos Ribeiro Virgílio Santos

24 de março de 2010

1 Introdução

Neste primeiro relatório, apresentamos as bases teóricas que serão utilizadas nos outrosquatro subprojetos de implementação subseqüentes. Sistemas distribuídos necessitam deuma rede para a comunicação entre os diversos computadores do sistema, por isso, iniciamosrespondendo algumas questões sobre redes na seção 2.

Em seguida, apresentamos resumos e pseudo-códigos de três algoritmos clássicos de Sis-temas Distribuídos que serão utilizados no decorrer da disciplina. Seguindo a ordem crono-lógica, o algoritmo de ordenação total de [Lam78], juntamente com um exemplo de uso �um algoritmo de exclusão mútua � são apresentados na seção 3. Em seguida, na seção 4discutimos um algoritmo baseado nesse mecanismo, de Herman e Verjus [HV79], para orde-nação e replicação de dados. Finalmente, na seção 5, apresentamos o algoritmo de Chandye Lamport [CL85] para obtenção de estados globais consistentes num sistema distribuído,publicado em 1985.

2 Questões

Quantos classes (tipos) de endereço IP existem? Como são especi�cados?

Há cinco classes distintas de endereços IPv4, que são identi�cadas pelos quatro primeirosbits dos trinta e dois que formam um endereço IPv4. A classe A tem endereços que começamcom 0; os da B começam com 10; os da C começam com 110; os da D começam com 1110 eos da E começam 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 endereços IP em duas partes: o número de rede,que identi�ca cada rede, e o resto, que identi�ca um computador dentro de uma rede. Osnúmeros de rede têm em cada classe respectivamente 8, 16 e 24 bits.

Entretanto, vale lembrar que as antigas classe IP hoje estão essencialmente obsoletas,por seguirem um esquema demasiado restritivo, incompatível com a expansão da Internet.Em vez disso, a rede é segmentada em uma hierarquia de sub-redes seguindo um sistemaconhecido como Classless Inter-Domain Routing (CIDR). Em CIDR, cada rede é especi�cada

1

Page 3: Resumo de Lamport '78, Herman-Verjus '79 e Chandy-Lamport '85

Relatório 1 2

como um endereço seguido de um número, que representa o tamanho em bits do número derede para endereços daquela rede.

A cada rede corresponde uma máscara de sub-rede, que é um endereço com os bits donúmero de rede em 1 e o resto em 0. Dessa forma, dado um endereço, basta fazer um E bit-a-bit com sua máscara de sub-rede associada para se descobrir o número da rede. Pode-seconsiderar que as antigas classes de redes possuíam então máscaras de sub-rede implícitas.

CIDR é interessante pois, além de permitir uma maior granularidade na atribuição deredes IP, possibilita que se agregue várias redes para formar uma super-rede, o que torna astabelas de roteamento mais simples.

No caso da rede Ethernet, o uso de broadcast aumenta o tráfego na rede? Sim

ou não? Justi�que.

Os quadros enviados em Ethernet sempre são vistos por todas as máquinas que comparti-lham o mesmo enlace, logo o sistema funciona naturalmente em broadcast, sem sobrecargaadicional. Nesse contexto, broadcasts são enviados uma única vez, e todas as máquinasescutam e aceitam a mensagem. O que diferencia mensagens de broadcast de mensagensponto-a-ponto normais é o endereço de destino: existe um endereço MAC especial que in-dica que uma mensagem é destinada a todas as máquinas do enlace.

Como se consegue comunicação ponto-a-ponto na Ethernet?

Embora os quadros sejam recebidos por todas as máquinas em uma mesma rede, uma dadamáquina não manterá qualquer mensagem que receber: ela o fará baseada no endereço dedestino do quadro. Cada placa de rede possui um endereço MAC, idealmente único, quepermite que se enderece um quadro para uma máquina especí�ca da rede.

Após fazer login em uma estação UNIX do laboratório do IC, como é possível

determinar o endereço de broadcast para todas as interfaces de rede (máquinas)

dessa rede? Especi�que os comandos UNIX utilizados para obter a informação

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 ifcon�g exibe a con�guração de todas as interfaces de rede dessa máquina. Os outroscomandos são utilizados apenas para �ltrar os endereços de broadcast e remover a interfacede loopback.

Page 4: Resumo de Lamport '78, Herman-Verjus '79 e Chandy-Lamport '85

Relatório 1 3

O seu grupo de projeto realiza broadcasts em um laboratório do IC. Os quadros

enviados poderão ser recebidos por processos no laboratório vizinho? Suponha

que cada laboratório é uma rede Ethernet e que as redes dos laboratórios são

interligadas por roteadores.

Caso seja utilizado o endereço de broadcast usual (direct broadcast), a passagem do broadcastpara as redes vizinhas vai depender da con�guração da rede dos laboratórios envolvidos (ipse máscaras envolvidos) e da con�guração do roteador para repassar o broadcast de uma redepara outra. Uma opção garantida para que o broadcast não extravase a rede é utilizar oendereço de broadcast especial 255.255.255.255.

Multicast e Broadcast na Internet

Aplicações que usam multicast na escala da Internet pública são praticamente inexistentes.Existem vários problemas de natureza econômica e de segurança com o protocolo e, comoo IPv4 classi�ca seu suporte como opcional, a maioria dos roteadores da Internet não oimplementam.

Problemas de segurança incluem ataques que usam o IGMP (protocolo que controlaa entrada e saída de clientes em grupos de multicast) como ampli�cador de pacotes paranegação de serviço. Outro problema relacionado a segurança é que não há como o remetentecontrolar quais destinatários são ou não aceitos.

Tráfego multicast também é difícil de rastrear e cobrar, motivo pelo qual provedores deInternet (ISPs) em geral o desabilitam. O Mbone é uma alternativa gratuita que consistede uma infraestrutura de enlaces paralela à da Internet. Por ser paralela, depende de queISPs estejam conectados a ela para que seja acessível a usuários �nais. Como isso raramenteacontece, seu uso é basicamente restrito a aplicações cientí�cas e de engenharia.

O broadcast IP além das redes locais sofre de problemas similares de segurança e controlede uso de banda, sendo por isso desabilitado pelos provedores de camadas mais altas.

3 Lamport 1978

3.1 Ordenação total

Apresentamos aqui uma versão resumida do algoritmo descrito em [Lam78] que garantea ordenação total de eventos em um sistema distribuído. A ordenação total segue quasediretamente da de�nição de relógios lógicos, também introduzidos no artigo.

Relógios lógicos são de�nidos pela condição a seguir:

Para quaisquer eventos a e b, se a ocorre causalmente antes de b, então o a deveter ocorrido em um tempo lógico anterior ao de b1.

Qualquer implementação que garanta essa condição é um relógio lógico. Apesar dessa li-berdade dada pela de�nição, apresentaremos uma versão especí�ca � a mesma utilizada na

1Usando a notação do Lamport: para quaisquer eventos a e b, se a→ b, então C(a) < C(b)

Page 5: Resumo de Lamport '78, Herman-Verjus '79 e Chandy-Lamport '85

Relatório 1 4

prática em [Lam78]. Cada processo Pi possui um relógio Ci que segue as seguintes regrasde implementação:

• Cada processo Pi incrementa Ci entre quaisquer dois eventos consecutivos.

• Se o evento a em Pi é o envio de uma mensagem m, essa mensagem contém umtimestamp Tm que é o valor de Ci durante o evento a.

• Quando um processo Pj recebe uma mensagem m, ele atualiza Cj para um valor maiorou igual ao valor atual e a Tm.

Essas regras de implementação garantem que o relógio atende a condição que de�nerelógios lógicos de�nida anteriormente.

Para obter a ordenação total, basta ordenar os eventos pelo valor do relógio lógico localno momento em que ele ocorreu. Para desempatar, pode-se usar uma ordenação totalarbitrária dos processos, por exemplo, ordená-los por pid. Essa ordenação total é obtidapelo pseudo-código a seguir:

1 type2 c l o ck : non−negat ive i n t e g e r ;3 pid : 0 . .N−1;4

5 message = <timestamp , p roce s s id , [ payload ]> // timestamp é o relógio local dequem enviou a mensagem

6

7 on proce s s Pi

8

9 var10 l l c : c l o ck ; // relógio lógico local11

12 f unc t i on sendmsg ( des t : pid , msg : payload )13 begin14 sent ( l l c , i , msg) to des t ;15 l l c := l l c + 1 ;16 end17

18 procedure run_event ( event : f unc t i on )19 begin20 c a l l event21 l l c := l l c + 1 ;22 end23

24 on r e c e i p t // ativado pelo recebimento de mensagem25 o f ( ts , j , msg) do26 begin27 // atualiza relógio local28 i f ( l l c < t s )29 l l c : = t s ;30 l l c : = l l c + 1 ;31

32 // processa mensagem33 process_received_msg ( ts , j , msg) ;

Page 6: Resumo de Lamport '78, Herman-Verjus '79 e Chandy-Lamport '85

Relatório 1 5

34 end35

36 // ordenação total em si: compara dois pares de pid/clock37 f unc t i on compare ( ( id1 , t s1 ) : pid ∗ c lock , ( id2 , t s2 ) : pid ∗ c l o ck )38 begin39 i f ( t s1 != ts2 )40 re turn compare ( ts1 , t s2 ) ; // usa a comparação entre os timestamps41 e l s e42 re turn compare ( id1 , id2 ) ; // desempata com os pids43 end

Pseudo-código 1: Ordenação total no processo Pi

3.2 Exclusão Mútua

A partir da ordenação total, é possível implementar um algoritmo de exclusão mútua emsistemas distribuídos, como o próprio Lamport sugere na mesma publicação.

O algoritmo, da forma como será descrito, assume que as mensagens entre quaisquer doisprocessos são recebidas na mesma ordem em que foram enviadas e que toda mensagem envi-ada é recebida em algum momento. Essas suposições são apenas para evitar outros detalhesde implementação. A simples utilização de um protocolo TCP garante essas condições.

O algoritmo também assume que a região crítica é concedida inicialmente a exatamenteum processo. Cada processo processo mantém, além do relógio lógico, uma �la de requisiçõeslocal. Assumimos que as �las são iniciadas com a mensagem �T0 : P0 requests�, onde T0 é ovalor inicial de todos os relógios.

O algoritmo é de�nido da seguinte forma:

• Para requisitar um recurso, o processo Pi envia uma mensagem �Tm : Pi requests� paratodos os outros processos (broadcast), e coloca essa mensagem na sua própria �la.

• Quando um processo Pj recebe a mensagem �Tm : Pi requests�, ele coloca essa mensa-gem na sua própria �la e envia um ack2 de volta para Pi.

• Para liberar o recurso (sair da região crítica), o processo Pi remove qualquer ocorrênciade �Tm : Pi requests� de sua �la e envia uma mensagem �Pi releases� para todos osoutros processos (broadcast).

• Quando um processo Pj recebe uma mensagem �Pi releases�, ele remove qualquerocorrência 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 dequalquer outra mensagem na sua �la3.

2Sendo este evento o envio de uma mensagem, o ack também leva consigo um timestamp3Para essa ordenação, usamos o timestamp, e, como critério de desempate, o número do processo

Page 7: Resumo de Lamport '78, Herman-Verjus '79 e Chandy-Lamport '85

Relatório 1 6

� Pi recebeu de cada um dos outros processos alguma mensagem posterior4 a(Tm, Pi).

Para obter uma especi�cação do algoritmo mais próxima de uma implementação real,seguimos o mesmo estilo do pseudo-código 1, utilizando inclusive a função on receipt. A�la é implementada de uma forma um pouco diferente da especi�cação anterior. A variávelq mantém a última mensagem recebida de cada processo, servindo como �la (se olharmosapenas as posições com req) e facilitando a veri�cação do timestamp para a entrada naregião crítica.

1 type2 c l o ck : non−negat ive i n t e g e r ;3 pid : 0 . .N−1;4 msgtype : ( req , rel , ack ) ;5

6 message = <timestamp , p roce s s id , msgtype> // timestamp é o relógio local de quemenviou a mensagem

7

8 on proce s s Pi

9

10 var11 l l c : c l o ck ; // relógio lógico local12 q : array [ 0 . . N−1] o f message ; // �la13

14 procedure broadcast (msg : msgtype , des t : pid )15 begin16 f o r a l l j != i17 sent ( l l c , i , msg) to des t ;18 l l c := l l c + 1 ;19 end20

21 main_routine : // Rotina principal em Pi: requisição, aquisição e liberação da região crítica22 begin23 // requisição24 q [ i ] := ( l l c , i , req ) ;25 broadcast ( l l c , i , req ) ;26

27 // espera28 whi le ( e x i s t s j != i with ( timestamp (q [ j ] ) , j ) < ( timestamp (q [ i ] ) , i ) )29 wait ;30

31 // Região Crítica aqui32 c r i t i c a l_reg i on_code ( ) ;33

34 // liberação35 q [ i ] := ( l l c , i , rel ) ;36 broadcast ( l l c , i , rel ) ;37 end38

4Posterior no sentido da ordenação total que de�nimos � Pi deve ter recebido de cada um dos processosPj com j < i alguma mensagem com timestamp maior que Tm, e de cada dos Pj com i < j alguma mensagemcom timestamp maior ou igual que Tm

Page 8: Resumo de Lamport '78, Herman-Verjus '79 e Chandy-Lamport '85

Relatório 1 7

39 // chamado pelo on receipt de�nido no código anterior40 procedure process_received_msg ( ts , j , msg)41 begin42 case (msg) o f43 req :44 q [ j ] := ( ts , j , req ) ;45 sendmsg ( j , ack ) ;46 rel :47 q [ j ] := ( ts , j , rel ) ;48 ack :49 i f ( type (q [ j ] ) != req )50 q [ j ] := ( ts , j , ack ) ;51 end52 end

Pseudo-código 2: Exclusão mútua no processo Pi

4 Herman e Verjus 1979

O algoritmo de Herman e Verjus [HV79] usa o esquema de ordenação com relógios lógicosexposto por Lamport [Lam78] para poder replicar uma base de dados através de múltiplasmáquinas de forma consistente. A ideia básica é muito simples e consiste em fazer com quetodas as máquinas enxerguem a mesma sequência de operações na base de dados. Comoas operações são deterministas, isso implica que todas as bases terão o mesmo estado, ouentão, mais precisamente, como dito pelos autores, �se toda atividade de usuário parar, ascópias devem convergir, após um período de tempo �nito, para o mesmo estado�. Segundo osautores, ao contrário de outros algoritmos semelhantes, este busca �maximizar o paralelismominimizando o travamento global�. Vale notar, porém, que o algoritmo não é tolerante afalhas.

São de�nidas quatro operações abstratas que podem ser feitas sobre a base de dados.Numa estimação (estimate), a máquina devolve o valor contido na cópia local do item dedados pedidos imediatamente. Uma leitura (read) também devolve esse valor, mas o faz apósgarantir que todas as requisições feitas até então sejam processadas. Uma escrita (write)altera um valor de um item de dados, propagando essa mudança para todas as outras cópias.En�m, uma atualização (update) executa uma sequência de operações de escrita e leituraque são vistas como atômicas pelos outros processos.

O modelo de comunicação entre os processos é o mesmo daquele da seção anterior, ouseja, temos canais de comunicação ponto-a-ponto sem falhas e que preservam a ordem deenvio das mensagens. Cada processo mantém uma �la para cada outro, incluindo ele mesmo,onde ele registra as requisições pendentes advindas de cada processo. Apenas quando elepercebe que uma requisição não pode ser precedida por nenhuma outra ele a executa. Maisdetalhadamente, temos o seguinte pseudo-código:

1 var pid , queues , db , c l o ck ;2

3 f unc t i on es t imate ( i )4 re turn db [ i ] ;

Page 9: Resumo de Lamport '78, Herman-Verjus '79 e Chandy-Lamport '85

Relatório 1 8

5

6 f unc t i on wr i t e ( i , v )7 msg := ( pid , c lock , (" wr i t e " , i , v ) ) ;8 c l o ck++;9 enqueue (msg , queues [ pid ] ) ;

10 f o r each p != pid11 send (msg , p) ;12

13 f unc t i on read ( i )14 msg := ( pid , c lock , (" read " , i ) ) ;15 c l o ck++;16 enqueue (msg , queues [ msg ] ) ;17 whi le ( ! newest (msg) )18 wait ;19 re turn db [ i ] ;20

21 f unc t i on update ( l )22 msg := ( pid , c lock , " begin ") ;23 enqueue (msg , queues [ pid ] ) ;24 f o r each p != pid25 send (msg , p) ;26 f o r each op in l27 execute op keeping c l o ck value ;28 msg := ( pid , c lock , "end ") ;29 enqueue (msg , queues [ pid ] ) ;30 f o r each p != pid31 send (msg , p) ;32 c l o ck++;33

34 f unc t i on r e c e i v e ( )35 // ativado pelo recebimento de mensagem msg36 c l o ck := max( c lock , timestamp (msg) ) + 1 ;37 i f ( type (msg) == "answer ")38 send ( ( pid , c lock , "ack ") , sender (msg) ) ;39 c l o ck++;40 enqueue (msg , queues [ sender (msg) ] ) ;41

42 f unc t i on proce s s ( )43 // ocorre paralelamente enquanto houver requisições44 f o r each p != pid45 i f ( is_empty ( queues [ p ] ) )46 send ( ( pid , c lock , "answer ") , p ) ;47 c l o ck++;48 wait f o r pending acks ;49 op := operat i on o f h i ghe s t p r i o r i t y among a l l queues ;50 execute ( op ) ;

Pseudo-código 3: Algoritmo de Herman e Verjus para manter a consistência de cópias deuma base de dados em um sistema distribuído.

Esse código merece alguns comentários. As mensagens enviadas contêm sempre, além deseu corpo, o identi�cador do processo que a enviou e o instante lógico no qual a requisiçãoocorreu (variável clock). Mensagens de atualização são formadas pelas mensagens das

Page 10: Resumo de Lamport '78, Herman-Verjus '79 e Chandy-Lamport '85

Relatório 1 9

operações individuais entre mensagens especiais marcando início e �m da transação. Aprecedência temporal das operações é sempre julgada combinando-se seu tempo lógico como identi�cador requisitante, como explicado anteriormente. Como leituras e estimações nãoafetam o estado geral, elas não precisam ser informadas aos outros processos. Finalmente,exige-se um reconhecimento de processos com �las vazias para garantir que não há umarequisição de prioridade maior que ainda não chegou: se existir, o algoritmo esperá-la-á;senão, o reconhecimento chegará e então ele poderá prosseguir.

5 Chandy e Lamport 1985

Um grande problema em Sistemas Distribuídos é a di�culdade de enxergar o estado dosistema como um todo a partir de um processo, advinda em parte da ausência de umanoção global de tempo. Tal conhecimento seria muito útil, por exemplo, na determinação depropriedades estáveis do sistema, isto é, propriedades que uma vez satisfeitas permanecemverdadeiras, como a terminação de uma computação distribuída.

Em uma primeira tentativa, um processo que deseja determinar o estado global poderiasimplesmente mandar um pedido a ser propagado a todos os nós da rede, pedindo queestes lhe mandassem um retrato de seu estado. Infelizmente, ao combinar todos os estadosindividuais amostrados, o estado global obtido pode ser inconsistente, devido à propagaçãodas mensagens contidas nos canais enquanto a requisição era feita. Por exemplo, em umbanco distribuído, suponha que haja uma transferência de cem reais da conta de um clienteA para um cliente B. Se o saldo da conta de A é transmitido por um nó e o da de B poroutro, seria possível que o saldo de A fosse transmitido anteriormente à transferência e ode B após, fazendo com que a quantidade total de dinheiro nas contas fosse maior que averdadeira.

Chandy e Lamport [CL85] observam que determinar a união exata dos estados de todosos processos do sistema em um dado instante não é essencial, bastando muitas vezes quea coleção de estados quando composta seja coerente. Informalmente, a noção de coerênciade�nida é quando o estado total amostrado poderia ocorrer em uma sequência de eventosequivalente à verdadeira.

O modelo computacional adotado pelos autores é o de uma rede formada por nós e ca-nais de comunicação unidirencionais entre eles. Os podem acessar seu estado local, alterá-lo,enviar mensagens através de canais saindo dele e receber mensagens previamente enviadaspor outros nós de canais incidentes. Assume-se que os canais preservam a ordem das mensa-gens, não falham e entregam todas as mensagens enviadas eventualmente. Além dos estadosdos nós no sistema, gravaremos também os estados de cada canal do sistema, isto é, asmensagens ainda não recebidas enviadas através de cada canal.

O algoritmo em si é simples:

1

2 var recorded ;3

4 f unc t i on propagate ( )5 record s t a t e ;6 recorded := true ;

Page 11: Resumo de Lamport '78, Herman-Verjus '79 e Chandy-Lamport '85

Relatório 1 10

7 f o r each chan in outgoing8 send_marker ( chan ) ;9 f o r each chan in incoming

10 s tar t_record ( chan ) ;11

12 f unc t i on receive_marker ( chan : channel )13 // marker recebido através de chan14 i f ( ! recorded )15 propagate ( ) ;16 stop_record ( chan ) ;

Pseudo-código 4: Algoritmo de Chandy e Lamport para amostra de estado globalconsistente.

Assume-se que algum evento faz com que um ou mais nós iniciem o algoritmo chamando afunção propagate. O algoritmo termina quando todos os nós tiverem recebido um marcadorde todos seus canais incidentes, e ocorre à parte da computação distribuída principal. Ésimples de ver que isso sempre ocorre se o grafo da rede for fortemente conexo. Os autoresa�rmam que após o algoritmo ter terminado pode-se empregar um dos vários mecanismosexistentes para coletar a informação gravada, como fazer com que cada nó propague o seuestado e os estados novos que receber para seus vizinhos.

Finalmente, os autores de�nem seu critério de consistência e provam que o algoritmo dadoo satisfaz: se a amostragem começa em um estado Ei e termina em um estado Ef resultandoem um estado Ea, então existem duas sequências de eventos que levam respectivamente Ei

até Ea e Ea até Ef . É essa propriedade que é usada para de�nir um meio de detecção depropriedades estáveis: basta gravar um estado global e veri�car se a propriedade é válidanesse estado. Como o estado �nal é alcançável do estado amostrado através de algumasequência de eventos e a propriedade é invariante sob os eventos ocorridos, a propriedadeserá válida para o estado global verdadeiro.

6 Conclusão

Neste trabalho analisamos alguns conceitos básicos em redes e algoritmos distribuídos. Esseferramental é importante pois formará a base do sistema que construiremos ao decorrer docurso. Embora a exposição original dos algoritmos inclua às vezes breves discussões sobrefalhas que podem ocorrer nos sistemas e seus efeitos na computação, tolerância a falhas nãoé uma preocupação essencial, tornando os sistemas vulneráveis. Devido às condições favo-ráveis, como experimentar com uma rede local e não desenvolver um sistema de produção,isso di�cilmente será um problema grave. Porém, seja por necessidade ou por propósitosdidáticos, poder-se-á futuramente buscar soluções para contornar tais situações.

Referências

[CL85] K. Mani Chandy and Leslie Lamport. Distributed snapshots: Determining globalstates of distributed systems. ACM Trans. Comput. Syst., 3(1):63�75, 1985.

Page 12: Resumo de Lamport '78, Herman-Verjus '79 e Chandy-Lamport '85

Relatório 1 11

[HV79] D. Herman and J. P. Verjus. An algorithm for maintaining the consistency ofmultiple copies. IRISA, pages 625�631, 1979.

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

[Tan02] Andrew Tanenbaum. Computer Networks. Prentice Hall Professional TechnicalReference, 2002.

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

network (21/03/2010).