II. Memória Distibuída Passagem de Mensagens Assíncrona ( Aplica ções ) Fco. Heron de Carvalho Jr., Dr. [email_address]
Passagem de Mensagens Assíncrona (Aplicações) <ul><li>Algoritmos  Probe/Echo </li></ul><ul><li>( computa ção distribuída e...
Algoritmos  Probe/Echo <ul><li>Grafos e árvores são estruturas encontradas em muitos algoritmos; </li></ul><ul><ul><li>Jog...
Algoritmos  Probe/Echo <ul><li>Computações distribuídas em processos organizados em grafos: </li></ul><ul><ul><li>Algoritm...
Algoritmos  Probe/Echo (Topologia de redes de processos) <ul><li>Revisitando a computação da topologia de uma rede de proc...
Algoritmos  Probe/Echo (Topologia de redes de processos) <ul><li>Fases para computação da topologia: </li></ul><ul><ul><li...
Algortimos  Probe/Echo (Topologia de redes de processos) <ul><li>Solução: const source = i type kind = enum(PROBE, ECHO) c...
Algortimos  Probe/Echo (Topologia de redes de processos) <ul><li>Solução ( continuação ): Node[p:1..n]::    var links[1:n]...
Algortimos  Probe/Echo (Topologia de redes de processos) <ul><li>Solução ( continuação ): Node[p:1..n]::    (...)   receiv...
Algortimos  Probe/Echo (Topologia de redes de processos) <ul><li>Solução ( continuação ): Node[p:1..n]::    (...)   do nee...
Algortimos  Probe/Echo (Topologia de redes de processos) <ul><li>Solução ( continuação ): Node[p:1..n]::    (...)   if p =...
Algortimos  Probe/Echo (Topologia de redes de processos) <ul><li>Solução ( continuação ): Initiator ::    var top[1:n,1:n]...
Passagem de Mensagens Assíncrona (Aplicações) <ul><li>Algoritmos  de  Dissemina ção ( Broadcast ) </li></ul><ul><li>- semá...
Algoritmos de Disseminação <ul><li>Um algoritmo de  disseminação  pode ser implementado por meio de  probe/echo ; </li></u...
Algoritmos de Disseminação <ul><li>Observações sobre  broadcast : </li></ul><ul><ul><li>Efeito semelhante a execução de  n...
Algoritmos de Disseminação <ul><li>broadcast ’s   podem ser usados para resolver muitos  problemas de sincronização ; </li...
Algoritmos de Disseminação (Relógios lógicos e ordenação de eventos) <ul><li>Em sistemas distribuídos, as ações de comunic...
Algoritmos de Disseminação (Relógios lógicos e ordenação de eventos) <ul><li>Ordem parcial ! </li></ul><ul><ul><li>Sequênc...
Algoritmos de Disseminação (Relógios lógicos e ordenação de eventos) <ul><li>Opção realística:   </li></ul><ul><ul><li>As...
Algoritmos de Disseminação (Relógios lógicos e ordenação de eventos) <ul><li>Um  relógio lógico  é um contador simples que...
Algoritmos de Disseminação (Relógios lógicos e ordenação de eventos) <ul><li>Regra de Atualização de  relógios lógicos : <...
Algoritmos de Disseminação (Relógios lógicos e ordenação de eventos) <ul><li>O  timestamp  da mensagem enviada é o valor d...
Algoritmos de Disseminação (Semáforos Distribuídos) <ul><li>Solução type kind = enum(V,P,ACK) chan  semop [1:n](sender, ki...
Algoritmos de Disseminação (Semáforos Distribuídos) <ul><li>Solução User[i:1..n]::   var lc:int :=0   var ts:int   # execu...
Algoritmos de Disseminação (Semáforos Distribuídos) <ul><li>Solução Helper[i:1..n]::    var mq: queue of (int,  kind , int...
Algoritmos de Disseminação (Semáforos Distribuídos) <ul><li>Solução Helper[i:1..n]::    (...)   do true -> {DSEM}   receiv...
Algoritmos de Disseminação (Semáforos Distribuídos) <ul><li>Solução Helper[i:1..n]::    (...)   do true -> {DSEM}   (...) ...
Algoritmos de Disseminação (Semáforos Distribuídos) <ul><li>Solução   (...)   if k = P or k = V ->    (...)   [] k = ACK -...
Passagem de Mensagens Assíncrona (Aplicações) <ul><li>Algoritmos  </li></ul><ul><li>Token Passing </li></ul><ul><li>- Excl...
Token Passing <ul><li>Token </li></ul><ul><ul><li>Um tipo especial de mensagem que pode ser usado para carregar uma  permi...
Token Passing <ul><li>Exclusão mútua distribuída: chan  token [1:n](),    enter [1:n](),    go [1:n](),    exit  [1:n]() (...
Token Passing <ul><li>Exclusão mútua distribuída: Helper [i:1..n]::    do true -> {DMUTEX}   receive   token [i]()   if no...
Token Passing <ul><li>Exclusão mútua distribuída: P [i:1..n]::    do true ->    send   enter [i]()   receive   go [i]()   ...
Passagem de Mensagens Assíncrona (Aplicações) <ul><li>Servidores Replicados </li></ul><ul><li>- Replicação de Arquivos  (d...
Servidores Replicados <ul><li>Quadratura adaptativa: </li></ul><ul><ul><li>Replicação de função; </li></ul></ul><ul><ul><l...
Servidores Replicados <ul><li>Solução (Quadratura Adaptativa): chan  bag (a,b,fa,fb,area:real) chan  result (a,b,area:real...
Servidores Replicados <ul><li>Solução (Quadratura Adaptativa): Administrator::   var l,r,fl,fr,a,b,area,total:real   outra...
Servidores Replicados <ul><li>Solução (Quadratura Adaptativa): Worker[1:n]::   var a,b,m,fa,fb,fm:real   var larea, rarea,...
II. Memória Distibuída Cap. 8 Passagem de Mensagens Síncrona Fco. Heron de Carvalho Jr., Dr. fhcj @ poli .upe.br
Próximos SlideShares
Carregando em…5
×

Canais Assíncronos II - Aplicações

1.777 visualizações

Publicada em

Publicada em: Tecnologia
0 comentários
0 gostaram
Estatísticas
Notas
  • Seja o primeiro a comentar

  • Seja a primeira pessoa a gostar disto

Sem downloads
Visualizações
Visualizações totais
1.777
No SlideShare
0
A partir de incorporações
0
Número de incorporações
52
Ações
Compartilhamentos
0
Downloads
22
Comentários
0
Gostaram
0
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

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

×