Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Canais Assíncronos II - Aplicações

1,786 views

Published on

Published in: Technology
  • Be the first to comment

  • Be the first to like this

Canais Assíncronos II - Aplicações

  1. 1. II. Memória Distibuída Passagem de Mensagens Assíncrona ( Aplica ções ) Fco. Heron de Carvalho Jr., Dr. [email_address]
  2. 2. Passagem de Mensagens Assíncrona (Aplicações) <ul><li>Algoritmos Probe/Echo </li></ul><ul><li>( computa ção distribuída em grafos) </li></ul>
  3. 3. Algoritmos Probe/Echo <ul><li>Grafos e árvores são estruturas encontradas em muitos algoritmos; </li></ul><ul><ul><li>Jogos, bancos de dados, sistemas especialistas; </li></ul></ul><ul><li>DFS (Depth First Search) </li></ul><ul><ul><li>Busca em profundidade para árvores e grafos ; </li></ul></ul><ul><ul><li>Para cada nodo ( pai ), cada nodo filho é visitado e sua informação é retornada ao pai ; </li></ul></ul><ul><ul><li>Em grafos, é necessário marcar nós visitados; </li></ul></ul>
  4. 4. Algoritmos Probe/Echo <ul><li>Computações distribuídas em processos organizados em grafos: </li></ul><ul><ul><li>Algoritmos probe/echo ; </li></ul></ul><ul><ul><li>Análogos a DFS em grafos; </li></ul></ul><ul><li>Probe (sondagem) </li></ul><ul><ul><li>Mensagem enviada de um nodo para seus sucessores na rede; </li></ul></ul><ul><li>Echo (eco) </li></ul><ul><ul><li>Resposta dos sucessores ; </li></ul></ul>
  5. 5. Algoritmos Probe/Echo (Topologia de redes de processos) <ul><li>Revisitando a computação da topologia de uma rede de processos: </li></ul><ul><ul><li>Novo algoritmos, usando probe/echo ; </li></ul></ul><ul><li>Premissas do novo algorimo </li></ul><ul><ul><li>Existência de um nodo iniciador ; </li></ul></ul><ul><ul><ul><li>Computa a topologia completa e a dissemina (broadcast) aos outros processos; </li></ul></ul></ul><ul><ul><li>Como computar a topologia ? </li></ul></ul><ul><ul><ul><li>Duas fases (próximo slide); </li></ul></ul></ul>
  6. 6. Algoritmos Probe/Echo (Topologia de redes de processos) <ul><li>Fases para computação da topologia: </li></ul><ul><ul><li>Cada nodo envia um probe para cada vizinho; </li></ul></ul><ul><ul><li>Cada nodo envia um echo contendo a informação de sua topologia local para o nodo que lhe enviou o primeiro probe ; </li></ul></ul><ul><ul><li>No final, o iniciador recebe a topologia completa e a dissemina aos outros processos; </li></ul></ul>
  7. 7. Algortimos Probe/Echo (Topologia de redes de processos) <ul><li>Solução: const source = i type kind = enum(PROBE, ECHO) chan probe_echo [1:n](kind, sender:int, links[1:n,1:n]) chan finalecho [1:n](links[1:n,1:n] int) Node[p:1..n]:: (... ) Initiator :: (...) </li></ul>
  8. 8. Algortimos Probe/Echo (Topologia de redes de processos) <ul><li>Solução ( continuação ): Node[p:1..n]:: var links[1:n]:bool := vizinhos de p var localtop[1:n,1:n]:bool := ([n*n] false) localtop[p,1:n] := links var newtop[1:n,1:n]:bool var first:int var k:kind, sender:int var need_echo: int := número de vizinhos-1 (...) </li></ul>
  9. 9. Algortimos Probe/Echo (Topologia de redes de processos) <ul><li>Solução ( continuação ): Node[p:1..n]:: (...) receive probe_echo [p](k,sender,newtop) first := sender fa q := 1 to n st links[q] and q  first send proble_echo [q](PROBE, p,  ) af (...) </li></ul>
  10. 10. Algortimos Probe/Echo (Topologia de redes de processos) <ul><li>Solução ( continuação ): Node[p:1..n]:: (...) do need_echo > 0 -> receive probe_echo [p](k,sender,newtop) if k = PROBE -> send probe_echo [sender](ECHO, p,  ) [] k = ECHO -> localtop := localtop or newtop need_echo := need_echo – 1 fi od (...) </li></ul>
  11. 11. Algortimos Probe/Echo (Topologia de redes de processos) <ul><li>Solução ( continuação ): Node[p:1..n]:: (...) if p = source -> send finalecho (localtop) [] p  source -> send probe_echo [first](ECHO, p localtop) fi (...) </li></ul>
  12. 12. Algortimos Probe/Echo (Topologia de redes de processos) <ul><li>Solução ( continuação ): Initiator :: var top[1:n,1:n]:bool send probe_echo [source](PROBE, source,  ) receive finalecho (top) </li></ul>
  13. 13. Passagem de Mensagens Assíncrona (Aplicações) <ul><li>Algoritmos de Dissemina ção ( Broadcast ) </li></ul><ul><li>- semáforos distribuídos - </li></ul>
  14. 14. Algoritmos de Disseminação <ul><li>Um algoritmo de disseminação pode ser implementado por meio de probe/echo ; </li></ul><ul><li>Todos os processos compartilhando um canal em comum; </li></ul><ul><ul><li>Suposição válida na maioria das redes locais; </li></ul></ul><ul><ul><ul><li>Ethernet, token-ring, etc. ; </li></ul></ul></ul><ul><ul><li>Primitiva broadcast : </li></ul></ul><ul><ul><ul><li>Seja P[1:n] um vetor de processos e ch[1:n] um vetor de canais, um pra cada processo: </li></ul></ul></ul><ul><ul><ul><li>Um processo P[1:n] dissemina um dado para todos os processos executando: </li></ul></ul></ul><ul><ul><ul><ul><li>broadcast ch ( m ) </li></ul></ul></ul></ul>
  15. 15. Algoritmos de Disseminação <ul><li>Observações sobre broadcast : </li></ul><ul><ul><li>Efeito semelhante a execução de n comandos send em paralelo; </li></ul></ul><ul><ul><li>Processos recebem o dado disseminado executando receive , como usualmente; </li></ul></ul><ul><ul><li>broascast não é indivisível ! </li></ul></ul><ul><ul><ul><li>Mensagens disseminadas por dois processos A e B podem ser recebidas por outros processos em diferentes ordens; </li></ul></ul></ul>
  16. 16. Algoritmos de Disseminação <ul><li>broadcast ’s podem ser usados para resolver muitos problemas de sincronização ; </li></ul><ul><li>Inicialmente, mostraremos como implementar um relógio lógico , usando broadcasts ; </li></ul><ul><li>Posteriormente, apresentarems uma solução para implementar semáforos distribuídos ; </li></ul>
  17. 17. Algoritmos de Disseminação (Relógios lógicos e ordenação de eventos) <ul><li>Em sistemas distribuídos, as ações de comunicação são os eventos relevantes; </li></ul><ul><ul><li>Eventos correspondem a ocorrência das operações send e receive ; </li></ul></ul><ul><li>Não há como saber a ordem relativa entre operações locais realizadas por processos distintos; </li></ul><ul><li>Entretanto, há meios de ordenar eventos ( operações globais ) realizadas por processos; </li></ul>
  18. 18. Algoritmos de Disseminação (Relógios lógicos e ordenação de eventos) <ul><li>Ordem parcial ! </li></ul><ul><ul><li>Sequências de eventos não-relacionadas ; </li></ul></ul><ul><ul><ul><li>Lembram de categorias ????? CPO’s ??? </li></ul></ul></ul><ul><li>Usando um relógio único centralizado: </li></ul><ul><ul><li>Podemos estabelecer ordem total; </li></ul></ul><ul><ul><li>Identificadores usados pra distinguir timestamp de mensagens enviadas simultaneamente; </li></ul></ul><ul><ul><li>Irrealístico!  </li></ul></ul>
  19. 19. Algoritmos de Disseminação (Relógios lógicos e ordenação de eventos) <ul><li>Opção realística:  </li></ul><ul><ul><li>Assumir que cada processador tem seu próprio relógio (físico); </li></ul></ul><ul><ul><li>Relógios sincronizados garantiriam ordenação; </li></ul></ul><ul><ul><ul><li>Irrealístico !  </li></ul></ul></ul><ul><ul><li>Algoritmos de sincronização de relógio servem para manter dois relógios o mais sincronizados possível, mas nunca perfeitamente; </li></ul></ul><ul><ul><ul><li>Podemos simular relógios físicos !!  </li></ul></ul></ul>
  20. 20. Algoritmos de Disseminação (Relógios lógicos e ordenação de eventos) <ul><li>Um relógio lógico é um contador simples que é incrementado quando um evento acontece; </li></ul>
  21. 21. Algoritmos de Disseminação (Relógios lógicos e ordenação de eventos) <ul><li>Regra de Atualização de relógios lógicos : </li></ul><ul><ul><li>Seja lc um relógico lógico em um processo A. </li></ul></ul><ul><ul><li>(1) Quando A envia ou dissemina uma mensagem, ele atualiza o timestamp da mensagem para lc e incrementa lc ; </li></ul></ul><ul><ul><li>(2) Quando A recebe uma mensagem com timestamp ts , ele atualiza lc para o máximo de lc e ts + 1 e incrementa lc; </li></ul></ul>
  22. 22. Algoritmos de Disseminação (Relógios lógicos e ordenação de eventos) <ul><li>O timestamp da mensagem enviada é o valor do relógio na execução de send (lc); </li></ul><ul><li>O timestamp da mensagem de recebimento é o valor do relógio após calcular o maior entre lc e ts+1 e antes de incrementar lc ; </li></ul><ul><li>Assim, garante-se que se um evento a ocorre antes de um evento b , então o valor do relógio associado a a é menor que aquele associado a b ; </li></ul><ul><ul><li>Ordem total dos eventos !  </li></ul></ul><ul><ul><li>Identificador distingue evendos com mesmo timestamp </li></ul></ul>
  23. 23. Algoritmos de Disseminação (Semáforos Distribuídos) <ul><li>Solução type kind = enum(V,P,ACK) chan semop [1:n](sender, kind, timestamp:int), go [1:n](timestamp:int) </li></ul>
  24. 24. Algoritmos de Disseminação (Semáforos Distribuídos) <ul><li>Solução User[i:1..n]:: var lc:int :=0 var ts:int # execução de uma operação V broadcast semop (i, V ,lc); lc := lc + 1; (...) # execução de uma operação P broadcast semop (i, P ,lc); receive go [i](ts); lc := max(lc, ts+1); lc := lc + 1 Helper[i:1..n]:: (..) </li></ul>
  25. 25. Algoritmos de Disseminação (Semáforos Distribuídos) <ul><li>Solução Helper[i:1..n]:: var mq: queue of (int, kind , int) var lc:int := 0 var sem:int := valor inicial var sender:int, k:kind, ts:int (...) </li></ul>
  26. 26. Algoritmos de Disseminação (Semáforos Distribuídos) <ul><li>Solução Helper[i:1..n]:: (...) do true -> {DSEM} receive semop [i](sender,k,ts) lc := max(lc,ts+1); lc := lc+1 if k = P or k = V -> (...) [] k = ACK -> (...) fi od (...) </li></ul>
  27. 27. Algoritmos de Disseminação (Semáforos Distribuídos) <ul><li>Solução Helper[i:1..n]:: (...) do true -> {DSEM} (...) if k = P or k = V -> inser ir (sender, k, ts) em mq broadcast semop (i,ACK,lc); lc := lc+1; [] k = ACK -> (...) fi od (...) </li></ul>
  28. 28. Algoritmos de Disseminação (Semáforos Distribuídos) <ul><li>Solução (...) if k = P or k = V -> (...) [] k = ACK -> registre recebimento de um ACK fa mensagens V totalmente reconhecidas-> remover a msg de mq ; sem := sem+1 ; fa fa mensagens P totalmente reconhecidas-> remover a msg de mq ; sem := sem-1 ; if sender = i -> send go [i](lc); lc := lc + 1 fi fa fi od (...) </li></ul>
  29. 29. Passagem de Mensagens Assíncrona (Aplicações) <ul><li>Algoritmos </li></ul><ul><li>Token Passing </li></ul><ul><li>- Exclusão m útua distribuída - </li></ul><ul><li>- Detecção de terminação distribuída - </li></ul>
  30. 30. Token Passing <ul><li>Token </li></ul><ul><ul><li>Um tipo especial de mensagem que pode ser usado para carregar uma permissão para executar uma ação ou capturar uma imformação relativa ao estado global da aplicação; </li></ul></ul><ul><li>Aplicações: </li></ul><ul><ul><li>Exclusão mútua distribuída; </li></ul></ul><ul><ul><li>Detecção de terminação distribuída; </li></ul></ul>
  31. 31. Token Passing <ul><li>Exclusão mútua distribuída: chan token [1:n](), enter [1:n](), go [1:n](), exit [1:n]() (...) </li></ul>
  32. 32. Token Passing <ul><li>Exclusão mútua distribuída: Helper [i:1..n]:: do true -> {DMUTEX} receive token [i]() if not ( empty ( enter [i])) -> receive enter [i]() send go [i]() receive exit [i]() fi send token [(i mod n) + 1]() od </li></ul>
  33. 33. Token Passing <ul><li>Exclusão mútua distribuída: P [i:1..n]:: do true -> send enter [i]() receive go [i]() seção crítica send token [(i mod n) + 1]() seção não-crítica od </li></ul>
  34. 34. Passagem de Mensagens Assíncrona (Aplicações) <ul><li>Servidores Replicados </li></ul><ul><li>- Replicação de Arquivos (disponibilidade) - </li></ul><ul><li>- Quadratura Adaptativa (paralelismo) - </li></ul>
  35. 35. Servidores Replicados <ul><li>Quadratura adaptativa: </li></ul><ul><ul><li>Replicação de função; </li></ul></ul><ul><ul><li>n processo encarregados de aproximar paralelamente a integral de uma função; </li></ul></ul><ul><ul><li>Solução estática X solução dinâmica; </li></ul></ul>
  36. 36. Servidores Replicados <ul><li>Solução (Quadratura Adaptativa): chan bag (a,b,fa,fb,area:real) chan result (a,b,area:real) (...) </li></ul>
  37. 37. Servidores Replicados <ul><li>Solução (Quadratura Adaptativa): Administrator:: var l,r,fl,fr,a,b,area,total:real outras variáveis para registrar intervalos finalizados fl := f(l); fr := f(r) area := (fl + fr)*(l+r)/2 send bag (l,r,fl,fr,area) do area total ainda não computada -> receive result (a,b,area) total := total + area registre que completou intervalo [a,b] od </li></ul>
  38. 38. Servidores Replicados <ul><li>Solução (Quadratura Adaptativa): Worker[1:n]:: var a,b,m,fa,fb,fm:real var larea, rarea, tarea, diff:real do true -> receive bag (a,b,fa,fb,tarea) m := (a+b)/2; fm := f(m); computar larea e rarea diff := tarea – (larea + rarea) if diff small -> send result (a,b,area) [] diff too large -> send bag (a,m,fa,fm,larea) fi od </li></ul>
  39. 39. II. Memória Distibuída Cap. 8 Passagem de Mensagens Síncrona Fco. Heron de Carvalho Jr., Dr. fhcj @ poli .upe.br

×