Remote Procedure Call RPC e Rendezvous n n

  • Slides: 25
Download presentation
Remote Procedure Call (RPC) e Rendezvous n n Com troca de mensagens, a programacao

Remote Procedure Call (RPC) e Rendezvous n n 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.

RPC e Rendezvous n n RPC e Rendezvous são ideais para interações do tipo

RPC e Rendezvous n n RPC e Rendezvous são ideais para interações do tipo cliente-servidor. Combinam aspectos de monitores e de troca de mensagens síncronas

RPC e Rendezvous n n n Como monitores, um [módulo/]processo exporta operações, que são

RPC e Rendezvous n n n 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

RPC e Rendezvous n n n A diferença entre RPC e rendezvous é apenas

RPC e Rendezvous n n n 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”.

Exemplo de Rendezvous: Ada n n n US DOD criada para ser a linguagem

Exemplo de Rendezvous: Ada n n n 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

Rendezvous n n n Comunicação síncrona (sem buffers) duas tasks se encontram em um

Rendezvous n n n 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

Rendezvous n modelo assimétrico · bom para programar processos servidores n partes de uma

Rendezvous n modelo assimétrico · bom para programar processos servidores n partes de uma task em Ada · specification Þentries · body

task n task Buffer is entry Append(I: in Integer); entry Take (I: out Integer);

task n task Buffer is entry Append(I: in Integer); entry Take (I: out Integer); end Buffer;

task n n task body Buffer is begin. . . accept Append(I : in

task n n task body Buffer is begin. . . accept Append(I : in Integer) do. . . corpo do accept end Append; . . . end Buffer; Buffer. Append(I);

Rendezvous n n calling task passa o seu parâmetro in para a accepting task

Rendezvous n n 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

Buffer Degenerado n task body Buffer is B: Array (0. . N-1) of Integer;

Buffer Degenerado n 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;

rendezvous em Ada é uma primitiva com as seguintes caracterísiticas n n n comunicação

rendezvous em Ada é uma primitiva com as seguintes caracterísiticas n n n comunicação síncrona e não bufferizada identificação assimétrica fluxo de dados nas duas direções durante o rendezvous

O select n task body Buffer is. . . begin loop select when Count

O select n 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;

Semântica do select n guardas são avaliadas, gerando o conjunto de alternativas abertas ·

Semântica do select n guardas são avaliadas, gerando o conjunto de alternativas abertas · tem que haver pelo menos uma, ou um else n se há tasks em fila esperando por entries em alternativas abertas, rendezvous é iniciado com a primeira de uma das filas

Semântica do select n Se todas as filas de espera em alternativas abertas estão

Semântica do select n 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

O select n pode ter como última alternativa · else. . . · delay

O select n pode ter como última alternativa · else. . . · delay T. . . · terminate

Programando com rendezvous n n rendezvous implementa remote procedure call delay implementa timeout else

Programando com rendezvous n n rendezvous implementa remote procedure call delay implementa timeout else implementa polling sincronização com accept bodies vazios

Simulando Semáforo n task body Semaphore is. . . begin loop accept Wait; accept

Simulando Semáforo n task body Semaphore is. . . begin loop accept Wait; accept Signal; end loop; end Buffer;

Poder de expressão do rendezvous n n sincronizar múltiplas tarefas · accepts aninhados task

Poder de expressão do rendezvous n n sincronizar múltiplas tarefas · accepts aninhados task body T 1 is. . . begin. . . accept Synch_2 do accept Synch_3; end Synch_2; . . . end T 1;

Leitores e escritores n task body Readers_and_Writers is. . . begin accept Start_Write; accept

Leitores e escritores n 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;

Múltiplos accepts n task body Even_Odd is. . . begin loop accept E(. .

Múltiplos accepts n 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;

uso de select na calling task n n calling task só pode suspender em

uso de select na calling task n n 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;

Polling vários servidores n task body T is. . . begin loop select Server_1.

Polling vários servidores n 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;

Polling um servidor n task body T is. . . begin loop select Server_1.

Polling um servidor n task body T is. . . begin loop select Server_1. E(. . . ); else select Server_2. E(. . . ); else. . . ; end select; end loop; end T;

Entry Families n n n Type Priorities is (Low, Medium, High); task Server is

Entry Families n n n Type Priorities is (Low, Medium, High); task Server is entry Request(Priorities)(. . . ); end Server; task body Server is begin 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;