Algoritmos Distribuídos Modelo Computacional Antonio Alfredo Ferreira Loureiro loureiro@dcc.ufmg.br http://www.dcc.ufmg.br/~loureiro AD Modelo Computacional 1
Modelo Computacional Modelo: Esquema que possibilita a representação de uma entidade (Houaiss). No modelo, só se deve incluir o que for relevante para a modelagem do objeto em questão. Computacional: Relativo ao processamento (Houaiss). Definição (nosso contexto): Esquema que descreve como é o modelo abstrato do processamento de algoritmos. Importância: Um algoritmo não existe, ou seja, não é possível escrevê-lo, se antes não for definido o modelo computacional onde será executado. Conceito básico no projeto de qualquer algoritmo. AD Modelo Computacional 2
Modelo Computacional Que modelos existem? Literalmente dezenas deles. Se não estiver satisfeito, invente o seu!. O mais popular (usado) de todos: RAM Random Access Machine. Mundo distribuído: Normalmente nós que seguem o modelo RAM interconectados entre si através de troca de mensagens. Não existe compartilhamento de memória. Elementos desse modelo: Nó computacional representado pelo modelo RAM. Canal normalmente representado pelo modelo FIFO. AD Modelo Computacional 3
Modelo RAM Elementos do modelo: um único processador; memória. Observações: Podemos ignorar os dispositivos de entrada e saída (teclado, monitor, etc) assumindo que a codificação do algoritmo e os dados já estão armazenados na memória. Em geral, não é relevante para a modelagem do problema saber como o algoritmo e os dados foram codificados e armazenados na memória. AD Modelo Computacional 4
Modelo RAM Computação nesse modelo: Processador busca instrução/dado da memória. Uma única instrução é executada de cada vez. Cada instrução é executada seqüencialmente. Cada operação executada pelo processador, incluindo cálculos aritméticos, lógicos e acesso a memória, implica num custo de tempo: Função de complexidade de tempo. Cada operação e dado armazenado na memória, implica num custo de espaço: Função de complexidade de espaço. AD Modelo Computacional 5
Complexidade de tempo e espaço A complexidade de tempo não representa tempo diretamente, mas o número de vezes que determinada operação considerada relevante é executada. A complexidade de espaço representa a quantidade de memória (numa unidade qualquer) que é necessário para armazenar as estruturas de dados associadas ao algoritmo. Usa-se a notação assintótica para representar essas complexidades O, Ω, Θ, o, ω. AD Modelo Computacional 6
Modelos computacionais para o mundo distribuído Um espectro bastante largo! Pergunta importante: Todo algoritmo distribuído pode ser implementado em qualquer modelo computacional? Definitivamente NÃO! AD Modelo Computacional 7
Problema dos dois exércitos Na Grécia antiga, lugares maravilhosos como este...... podiam se transformar em cenários de guerra. Vale perto de Almfiklia, Grécia É quando algum filósofo propõe o Problema dos dois exércitos. AD Modelo Computacional 8
Problema dos dois exércitos Cenário inicial Exército Alfa está em maior número que o exército Gama mas está dividido em duas metades, cada uma numa lateral do vale. Cada metade do exército Alfa está em menor número que o exército Gama. Objetivo do exército Alfa: coordenar um ataque ao exército Gama para ganhar a guerra. AD Modelo Computacional 9
Problema dos dois exércitos O problema da coordenação 1. General do exército Alfa, do lado esquerdo do vale, chama o seu melhor soldado para levar uma mensagem para o general do exército Alfa do lado direito: Vamos atacar conjuntamente o exército Gama amanhã às 6:00h? Observações: A única possibilidade de comunicação entre os dois generais é através de um mensageiro. Os dois generais têm um relógio perfeitamente sincronizado, ou seja, eles sabem pela posição do sol quando é 6:00h. AD Modelo Computacional 10
Problema dos dois exércitos O problema da coordenação 2. O soldado do exército Alfa atravessa as linhas inimigas e leva a mensagem até o general do outro lado. AD Modelo Computacional 11
Problema dos dois exércitos O problema da coordenação 3. O general do exército Alfa do lado direito concorda em atacar o exército Gama no dia seguinte às 6:00h. AD Modelo Computacional 12
Problema dos dois exércitos O problema da coordenação 4. O soldado do exército Alfa atravessa novamente as linhas inimigas e confirma com seu general o ataque para o dia seguinte. AD Modelo Computacional 13
Problema dos dois exércitos O problema da coordenação Após esses quatro passos terem sido realizados com sucesso, vai haver ataque amanhã às 6:00h? AD Modelo Computacional 14
O problema dos dois robôs Imagine dois ou mais robôs que vão carregar uma mesa de tal forma que um ficará de frente para outro. Problema: Projete um algoritmo para coordenar a velocidade e direção do movimento de cada robô para que a mesa não caia. Os robôs só podem comunicar entre si através de um canal de comunicação sem fio. Variante do problema anterior! AD Modelo Computacional 15
O problema dos dois robôs É possível projetar um algoritmo distribuído para esse problema? NÃO! Não existe um algoritmo distribuído para o problema de coordenação considerando o modelo computacional proposto! AD Modelo Computacional 16
Alguns comentários sobre algoritmos distribuídos São a base do mundo distribuído, ou seja, de sistemas distribuídos. Sistemas distribuídos podem ser: Tempo real ou não; Reativos ou não. Sistemas distribuídos podem ser especificados tomando-se como base: tempo; eventos. AD Modelo Computacional 17
Projeto de algoritmos distribuídos: Modelo de falhas Descreve as suposições sobre o comportamento funcional dos elementos do modelo computacional ao longo do tempo: nó computacional; canal. Para cada um destes elementos é possível fazer diferentes considerações. Modelo de falhas associado a um nó computacional (dois extremos): Falha e pára; Bizantino. Modelo de falhas associado ao canal: Mensagens são perdidas, duplicadas, corrompidas, entregues fora de ordem. Qual a importância do modelo de falhas no projeto de algoritmos distribuídos? AD Modelo Computacional 18
Projeto de algoritmos distribuídos: Canal de comunicação Mecanismo através do qual mensagens são trocadas entre os nós computacionais. Aspectos a considerar: Modelo de falhas; Sentido da comunicação: simplex, half-duplex, full-duplex; Sincronismo: assíncrono, síncrono; Tipo de comunicação: unicast, multicast, broadcast, anycast. Qual a importância do canal de comunicação no projeto de algoritmos distribuídos? AD Modelo Computacional 19
Projeto de algoritmos distribuídos: Topologia Define como os nós são interconectados entre si através dos canais de comunicação. Existem diferentes possibilidades: Anel; Hipercubo; Árvore; Uma outra específica. Qual a importância da topologia no projeto de algoritmos distribuídos? AD Modelo Computacional 20
Complexidade de algoritmos distribuídos Tempo; Espaço; Número de mensagens/bits enviadas(os) pelos nós. Por que esta esta outra métrica é importante? Notação usada: O, Ω, Θ AD Modelo Computacional 21
Aspecto típico de algoritmo distribuído: Não determinismo Não é possível especificar a priori qual será a ordem exata de uma computação distribuída. É possível ter não determinismo devido à: Concorrência entre os nós (veja Diagrama de Hasse); Especificação (simplificação do número de estados); Não observabilidade (falta de acesso aos estados internos dos nós). Não é possível evitar AD Modelo Computacional 22
Aspecto típico de algoritmo distribuído: Sincronização Deve-se definir como será feita. É necessário ter sincronização devido à: Competição entre recursos (exclusão mútua); Coordenação distribuída. AD Modelo Computacional 23