![Page 1: Remote Procedure Call (RPC) e Rendezvous n Com troca de mensagens, a programacao de programas do tipo cliente-servidor exigem a troca explicita de duas](https://reader036.vdocuments.net/reader036/viewer/2022062522/570638461a28abb8238f3308/html5/thumbnails/1.jpg)
Remote Procedure Call (RPC) e Rendezvous Com troca de mensagens, a
programacao de programas do tipo cliente-servidor exigem a troca explicita de duas mensagens
Se os canais forem unidirecionais, precisamos de vários canais, e vários testes para detectar o tipo de mensagem.
![Page 2: Remote Procedure Call (RPC) e Rendezvous n Com troca de mensagens, a programacao de programas do tipo cliente-servidor exigem a troca explicita de duas](https://reader036.vdocuments.net/reader036/viewer/2022062522/570638461a28abb8238f3308/html5/thumbnails/2.jpg)
RPC e Rendezvous
RPC e Rendezvous são ideais para interações do tipo cliente-servidor.
Combinam aspectos de monitores e de troca de mensagens síncronas
![Page 3: Remote Procedure Call (RPC) e Rendezvous n Com troca de mensagens, a programacao de programas do tipo cliente-servidor exigem a troca explicita de duas](https://reader036.vdocuments.net/reader036/viewer/2022062522/570638461a28abb8238f3308/html5/thumbnails/3.jpg)
RPC e Rendezvous
Como monitores, um [módulo/]processo exporta operações, que são chamadas a partir de outros [módulos/]processos.
Como troca de mensagens síncronas, o processo que faz a chamada bloqueia até que ela seja atendida.
A comunicação é bidirecional
![Page 4: Remote Procedure Call (RPC) e Rendezvous n Com troca de mensagens, a programacao de programas do tipo cliente-servidor exigem a troca explicita de duas](https://reader036.vdocuments.net/reader036/viewer/2022062522/570638461a28abb8238f3308/html5/thumbnails/4.jpg)
RPC e Rendezvous
A diferença entre RPC e rendezvous é apenas em como as solicitações são atendidas.
RPC: procedimentos atendem as chamadas, criando um “processo” para cada solicitação
Rendezvous: encontro com um processo que está rodando, através de “accept”.
![Page 5: Remote Procedure Call (RPC) e Rendezvous n Com troca de mensagens, a programacao de programas do tipo cliente-servidor exigem a troca explicita de duas](https://reader036.vdocuments.net/reader036/viewer/2022062522/570638461a28abb8238f3308/html5/thumbnails/5.jpg)
Exemplo de Rendezvous: Ada
US DOD criada para ser a linguagem padrão
para o desenvolvimento de softwares críticos
Sistema de tipos fortes Packages Suporte direto a concorrência: tasks expressibilidade vs. eficiência
![Page 6: Remote Procedure Call (RPC) e Rendezvous n Com troca de mensagens, a programacao de programas do tipo cliente-servidor exigem a troca explicita de duas](https://reader036.vdocuments.net/reader036/viewer/2022062522/570638461a28abb8238f3308/html5/thumbnails/6.jpg)
Rendezvous
Comunicação síncrona (sem buffers) duas tasks se encontram em um
rendezvous para se comunicarem o primeiro a chegar espera pelo outro accepting task é a dona do rendezvous calling task tem que saber
a identidade da accepting task o nome do local do rendezvous
![Page 7: Remote Procedure Call (RPC) e Rendezvous n Com troca de mensagens, a programacao de programas do tipo cliente-servidor exigem a troca explicita de duas](https://reader036.vdocuments.net/reader036/viewer/2022062522/570638461a28abb8238f3308/html5/thumbnails/7.jpg)
Rendezvous
modelo assimétrico bom para programar processos servidores
partes de uma task em Ada specification
entries body
![Page 8: Remote Procedure Call (RPC) e Rendezvous n Com troca de mensagens, a programacao de programas do tipo cliente-servidor exigem a troca explicita de duas](https://reader036.vdocuments.net/reader036/viewer/2022062522/570638461a28abb8238f3308/html5/thumbnails/8.jpg)
task
task Buffer is entry Append(I: in Integer); entry Take (I: out Integer);end Buffer;
![Page 9: Remote Procedure Call (RPC) e Rendezvous n Com troca de mensagens, a programacao de programas do tipo cliente-servidor exigem a troca explicita de duas](https://reader036.vdocuments.net/reader036/viewer/2022062522/570638461a28abb8238f3308/html5/thumbnails/9.jpg)
task
task body Buffer isbegin ... accept Append(I : in Integer) do ... corpo do accept end Append; ...end Buffer;
Buffer.Append(I);
![Page 10: Remote Procedure Call (RPC) e Rendezvous n Com troca de mensagens, a programacao de programas do tipo cliente-servidor exigem a troca explicita de duas](https://reader036.vdocuments.net/reader036/viewer/2022062522/570638461a28abb8238f3308/html5/thumbnails/10.jpg)
Rendezvous calling task passa o seu parâmetro in para a
accepting task e espera o rendezvous se completar
accepting task executa os comandos no corpo do accept (até o end)
os parâmetros out são passados de volta à calling task
o rendezvous está terminado e as duas tasks não estão mais suspensas
![Page 11: Remote Procedure Call (RPC) e Rendezvous n Com troca de mensagens, a programacao de programas do tipo cliente-servidor exigem a troca explicita de duas](https://reader036.vdocuments.net/reader036/viewer/2022062522/570638461a28abb8238f3308/html5/thumbnails/11.jpg)
Buffer Degenerado task body Buffer is
B: Array (0..N-1) of Integer; In_Ptr, Out_Ptr: Integer := 0; Count: Integer := 0;begin loop accept Append(I: in Integer) do B(In_Ptr) := I; end Append; Count := Count + 1; In_Ptr := (In_Ptr + 1) mod N; accept Take(I: out Integer) do I := B(Out_Ptr); end Take; Count := Count - 1; Out_Ptr := (Out_Ptr + 1) mod N; end loop; end Buffer;
![Page 12: Remote Procedure Call (RPC) e Rendezvous n Com troca de mensagens, a programacao de programas do tipo cliente-servidor exigem a troca explicita de duas](https://reader036.vdocuments.net/reader036/viewer/2022062522/570638461a28abb8238f3308/html5/thumbnails/12.jpg)
rendezvous em Ada é uma primitiva com as seguintes caracterísiticas comunicação síncrona e não
bufferizada identificação assimétrica fluxo de dados nas duas direções
durante o rendezvous
![Page 13: Remote Procedure Call (RPC) e Rendezvous n Com troca de mensagens, a programacao de programas do tipo cliente-servidor exigem a troca explicita de duas](https://reader036.vdocuments.net/reader036/viewer/2022062522/570638461a28abb8238f3308/html5/thumbnails/13.jpg)
O select task body Buffer is ...
begin loop select when Count < N => accept Append(I: in Integer) do B(In_Ptr) := I; end Append; Count := Count + 1; In_Ptr := (In_Ptr + 1) mod N; or when Count > 0 => accept Take(I: out Integer) do I := B(Out_Ptr); end Take; Count := Count - 1; Out_Ptr := (Out_Ptr + 1) mod N; end select;end loop; end Buffer;
![Page 14: Remote Procedure Call (RPC) e Rendezvous n Com troca de mensagens, a programacao de programas do tipo cliente-servidor exigem a troca explicita de duas](https://reader036.vdocuments.net/reader036/viewer/2022062522/570638461a28abb8238f3308/html5/thumbnails/14.jpg)
Semântica do select
guardas são avaliadas, gerando o conjunto de alternativas abertas tem que haver pelo menos uma, ou um
else se há tasks em fila esperando por
entries em alternativas abertas, rendezvous é iniciado com a primeira de uma das filas
![Page 15: Remote Procedure Call (RPC) e Rendezvous n Com troca de mensagens, a programacao de programas do tipo cliente-servidor exigem a troca explicita de duas](https://reader036.vdocuments.net/reader036/viewer/2022062522/570638461a28abb8238f3308/html5/thumbnails/15.jpg)
Semântica do select
Se todas as filas de espera em alternativas abertas estão vazias, a accepting task é suspensa até que uma task chame uma entrada em uma dessas filas o conjunto de alternativas abertas não
muda
![Page 16: Remote Procedure Call (RPC) e Rendezvous n Com troca de mensagens, a programacao de programas do tipo cliente-servidor exigem a troca explicita de duas](https://reader036.vdocuments.net/reader036/viewer/2022062522/570638461a28abb8238f3308/html5/thumbnails/16.jpg)
O select
pode ter como última alternativa else ... delay T ... terminate
![Page 17: Remote Procedure Call (RPC) e Rendezvous n Com troca de mensagens, a programacao de programas do tipo cliente-servidor exigem a troca explicita de duas](https://reader036.vdocuments.net/reader036/viewer/2022062522/570638461a28abb8238f3308/html5/thumbnails/17.jpg)
Programando com rendezvous
rendezvous implementa remote procedure call
delay implementa timeout else implementa polling sincronização com accept bodies
vazios
![Page 18: Remote Procedure Call (RPC) e Rendezvous n Com troca de mensagens, a programacao de programas do tipo cliente-servidor exigem a troca explicita de duas](https://reader036.vdocuments.net/reader036/viewer/2022062522/570638461a28abb8238f3308/html5/thumbnails/18.jpg)
Simulando Semáforo task body Semaphore is ...
begin loop accept Wait; accept Signal; end loop; end Buffer;
![Page 19: Remote Procedure Call (RPC) e Rendezvous n Com troca de mensagens, a programacao de programas do tipo cliente-servidor exigem a troca explicita de duas](https://reader036.vdocuments.net/reader036/viewer/2022062522/570638461a28abb8238f3308/html5/thumbnails/19.jpg)
Poder de expressão do rendezvous sincronizar múltiplas tarefas
accepts aninhados task body T1 is ...
begin ... accept Synch_2 do accept Synch_3; end Synch_2; ... end T1;
![Page 20: Remote Procedure Call (RPC) e Rendezvous n Com troca de mensagens, a programacao de programas do tipo cliente-servidor exigem a troca explicita de duas](https://reader036.vdocuments.net/reader036/viewer/2022062522/570638461a28abb8238f3308/html5/thumbnails/20.jpg)
Leitores e escritores task body Readers_and_Writers is ...
begin accept Start_Write; accept End_Write; loop select accept Start_Read ...; or accept End_Read ...; or accept Start_Write ...; or accept End_Write ...; end select; end loop;end Readers_and_Writers;
![Page 21: Remote Procedure Call (RPC) e Rendezvous n Com troca de mensagens, a programacao de programas do tipo cliente-servidor exigem a troca explicita de duas](https://reader036.vdocuments.net/reader036/viewer/2022062522/570638461a28abb8238f3308/html5/thumbnails/21.jpg)
Múltiplos accepts
task body Even_Odd is ...begin loop accept E(...) do -- process odd calls end E; accept E(...) do -- process even calls end E; end loop;end Even_Odd;
![Page 22: Remote Procedure Call (RPC) e Rendezvous n Com troca de mensagens, a programacao de programas do tipo cliente-servidor exigem a troca explicita de duas](https://reader036.vdocuments.net/reader036/viewer/2022062522/570638461a28abb8238f3308/html5/thumbnails/22.jpg)
uso de select na calling task calling task só pode suspender em uma entry task body T is ...
begin loop select Sensor.Sample(...); or delay 1.0; -- seconds Notify_Operator; end select;end loop;end T;
![Page 23: Remote Procedure Call (RPC) e Rendezvous n Com troca de mensagens, a programacao de programas do tipo cliente-servidor exigem a troca explicita de duas](https://reader036.vdocuments.net/reader036/viewer/2022062522/570638461a28abb8238f3308/html5/thumbnails/23.jpg)
Polling vários servidores task body T is ...
begin loop select Server_1.E(...); else null; end select; select Server_2.E(...); else null; end select; ...end loop;end T;
![Page 24: Remote Procedure Call (RPC) e Rendezvous n Com troca de mensagens, a programacao de programas do tipo cliente-servidor exigem a troca explicita de duas](https://reader036.vdocuments.net/reader036/viewer/2022062522/570638461a28abb8238f3308/html5/thumbnails/24.jpg)
Polling um servidor
task body T is ...begin loop select Server_1.E(...); else select Server_2.E(...); else ...; end select; end select;end loop;end T;
![Page 25: Remote Procedure Call (RPC) e Rendezvous n Com troca de mensagens, a programacao de programas do tipo cliente-servidor exigem a troca explicita de duas](https://reader036.vdocuments.net/reader036/viewer/2022062522/570638461a28abb8238f3308/html5/thumbnails/25.jpg)
Entry Families Type Priorities is (Low, Medium, High); task Server is
entry Request(Priorities)(...);end Server;
task body Server isbegin loop select accept Request(High)(...) ...; or when Request(High)’Count = 0 => accept Request(Medium)(...) ...; or when Request(High)’Count = 0 and Request(Medium)(...)’Count = 0 => accept Request(Low)(...) ...; end select;end loop;end Server;