25
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.

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

Embed Size (px)

Citation preview

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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;