Sistemas Distribuídos Jorge Surian [email protected] Sistemas Distribuídos: Comunicação (RPC)

35
Sistemas Distribuídos Jorge Surian [email protected] Sistemas Distribuídos: Comunicação (RPC)

Transcript of Sistemas Distribuídos Jorge Surian [email protected] Sistemas Distribuídos: Comunicação (RPC)

Page 1: Sistemas Distribuídos Jorge Surian jsurian@uol.com.br Sistemas Distribuídos: Comunicação (RPC)

Sistemas DistribuídosJorge [email protected]

Sistemas Distribuídos: Comunicação (RPC)

Page 2: Sistemas Distribuídos Jorge Surian jsurian@uol.com.br Sistemas Distribuídos: Comunicação (RPC)

22

RPC – Chamada de Procedimento Remoto

Conceitos– Birrell e Nelson (1984), enunciaram uma ideia

bastante simples (depois que alguém a teve...) que em resumo permite a processos chamarem procedimentos localizados em outras máquinas.

– Assim, quando um processo na máquina A chama um procedimento na máquina B, o processo chamador é suspenso, e a execução do procedimento chamado ocorre em B. Informações podem ser transportadas do chamador para o chamado indo e voltando nos parâmetros desses procedimentos.

2

Page 3: Sistemas Distribuídos Jorge Surian jsurian@uol.com.br Sistemas Distribuídos: Comunicação (RPC)

33

RPC – Chamada de Procedimento Remoto

Conceitos– O desenvolvedor não precisa se preocupar mais

com detalhes de implementação de rede (ou seja, pode esquecer dos sockets!).

– A ideia é que tudo se passe como se tudo estivesse numa mesma máquina. E tudo transparente ao desenvolvedor.

– Embora conceitualmente simples, o RPC talvez não seja o que parece...

3

Page 4: Sistemas Distribuídos Jorge Surian jsurian@uol.com.br Sistemas Distribuídos: Comunicação (RPC)

44

RPC – Chamada de Procedimento Remoto

Primeiros Problemas...

1.Arquiteturas de duas máquinas podem ser diferentes.

2.Espaço de endereçamento diversos.

3.Passagem de parâmetros.

4.O que fazer quando uma das máquinas falha.

4

Page 5: Sistemas Distribuídos Jorge Surian jsurian@uol.com.br Sistemas Distribuídos: Comunicação (RPC)

55

RPC – Chamada de Procedimento Remoto

Entendendo o funcionamento...– A idéia fundamental é fazer com que uma

chamada de procedimento remoto pareça com uma chamada local.

– Consideremos uma instrução local, para compreendermos o funcionamento de procedimentos...

» count = read(fd, buffer, nbytes);

– Ora, a função em questão lerá no arquivo associado a fd, o número de caracteres indicado por nbytes, os retornado para a string buffer. Isso ocorre de acordo com a figura apresentada a seguir:

5

Page 6: Sistemas Distribuídos Jorge Surian jsurian@uol.com.br Sistemas Distribuídos: Comunicação (RPC)

66

RPC – Chamada de Procedimento Remoto

Entendendo o funcionamento...

6

Page 7: Sistemas Distribuídos Jorge Surian jsurian@uol.com.br Sistemas Distribuídos: Comunicação (RPC)

77

RPC – Chamada de Procedimento Remoto

Entendendo o funcionamento...

7

Page 8: Sistemas Distribuídos Jorge Surian jsurian@uol.com.br Sistemas Distribuídos: Comunicação (RPC)

88

RPC – Chamada de Procedimento Remoto

Entendendo o funcionamento...– Para fazer a chamada, o chamador passa os

parâmetros para a pilha em ordem, começando pelo último, em acordo com esquema abaixo:

– Lembrar que assim printf pode sempre localizar a cadeia de formato no primeiro parâmetro que lê. 8

Page 9: Sistemas Distribuídos Jorge Surian jsurian@uol.com.br Sistemas Distribuídos: Comunicação (RPC)

99

RPC – Chamada de Procedimento Remoto

Entendendo o funcionamento...– Quando concluída a execução do procedimento

read, este coloca o valor de retorno num registrador, remove o endereço de retorno e devolve o controle ao chamador.

– Finalmente são retirados os parâmetros da pilha, devolvendo-a ao estado original que tinha antes da chamada.

– Deve ser observado que parâmetros podem ser passados por valor ou por referência.

9

Page 10: Sistemas Distribuídos Jorge Surian jsurian@uol.com.br Sistemas Distribuídos: Comunicação (RPC)

1010

RPC – Chamada de Procedimento Remoto

Entendendo o funcionamento...– Passagem por Valor:

»Considere-se a caixa do desenho, passagem por valor é equivalente a abrir a caixa, copiar o conteúdo (valor da variável) e só dar este valor ao procedimento. Obviamente, o valor original ficará na caixa e não mudará. 

10

Page 11: Sistemas Distribuídos Jorge Surian jsurian@uol.com.br Sistemas Distribuídos: Comunicação (RPC)

1111

RPC – Chamada de Procedimento Remoto

Entendendo o funcionamento...– Deve ser observado que parâmetros podem ser

passados por valor ou por referência.»Passagem por Referência é dar a caixa

(variável) ao procedimento e o procedimento pode usar e mudar o valor na caixa. No fim, o procedimento devolve a caixa com o novo valor.

11

Page 12: Sistemas Distribuídos Jorge Surian jsurian@uol.com.br Sistemas Distribuídos: Comunicação (RPC)

1212

RPC – Chamada de Procedimento Remoto

Entendendo o funcionamento...– A ideia que fundamenta a RPC é fazer com que

uma chamada de procedimento remoto pareça o mais possível uma chamada local. A RPC deve ser transparente, ou seja, o procedimento de chamadas não deve estar ciente de que o procedimento chamado está executando em uma máquina diferente ou vice-versa.

12

Page 13: Sistemas Distribuídos Jorge Surian jsurian@uol.com.br Sistemas Distribuídos: Comunicação (RPC)

1313

RPC – Chamada de Procedimento Remoto

Entendendo o funcionamento...– Exemplificando:

»O programador coloca uma chamada para read no código para obter dados.

»Num sistema tradicional, a rotina read é extraída da biblioteca pelo ligador e inserida no programa objeto.

13

Page 14: Sistemas Distribuídos Jorge Surian jsurian@uol.com.br Sistemas Distribuídos: Comunicação (RPC)

1414

RPC – Chamada de Procedimento Remoto

Entendendo o funcionamento...– Exemplificando:

»É um procedimento curto, que em geral é implementada chamando uma chamada de sistema read equivalente. Dessa forma, o programador não sabe o que read de fato está fazendo.

»RPC consegue sua transparência de modo análogo. Se um read for um procedimento que executará na máquina do servidor de arquivo – uma versão diferente de read, denominada apêndice de cliente, é colocada na biblioteca.

14

Page 15: Sistemas Distribuídos Jorge Surian jsurian@uol.com.br Sistemas Distribuídos: Comunicação (RPC)

1515

RPC – Chamada de Procedimento Remoto

Entendendo o funcionamento...– Exemplificando:

»No RPC a função read não pediria ao sistema operacional que lhe dê os dados, mas empacota os parâmetros em uma mensagem seja enviada para o servidor em acordo com o esquema abaixo:

15

Page 16: Sistemas Distribuídos Jorge Surian jsurian@uol.com.br Sistemas Distribuídos: Comunicação (RPC)

1616

RPC – Chamada de Procedimento Remoto

Apêndices– Transparência conseguida com o uso de stubs

(apêndices)– Stub do cliente responsável por empacotar os

parâmetros em uma mensagem e enviar a mensagem para a máquina do servidor. Quando resposta chega, resultado é copiado para cliente, e controle volta a ele.

– Stub do servidor responsável por desempacotar parâmetros, chamar o procedimento do servidor e retornar resposta para máquina do cliente.

16

Page 17: Sistemas Distribuídos Jorge Surian jsurian@uol.com.br Sistemas Distribuídos: Comunicação (RPC)

1717

RPC – Chamada de Procedimento Remoto Apêndices

17

Page 18: Sistemas Distribuídos Jorge Surian jsurian@uol.com.br Sistemas Distribuídos: Comunicação (RPC)

1818

RPC – Chamada de Procedimento Remoto

RPC em etapas:

1. Procedimento do cliente chama stub cliente de modo usual.

2. Stub do cliente constrói uma msg e chama o Sistema Operacional.

3. Sistema Operacional envia msg para SO remoto.

4. Sistema Operacional remoto repassa msg para stub do servidor.

5. Stub do servidor desempacota parâmetros e chama procedimento servidor.

18

Page 19: Sistemas Distribuídos Jorge Surian jsurian@uol.com.br Sistemas Distribuídos: Comunicação (RPC)

1919

RPC – Chamada de Procedimento Remoto

RPC em etapas:

6. Procedimento servidor executa e retorna o resultado.

7. Stub do servidor empacota resultado em uma msg e chama Sistema Operacional.

8. Sistema Operacional remoto envia msg para SO da máquina cliente.

9. Sistema Operacional do cliente passa msg para stub cliente.

10.Stub cliente desempacota resultado, repassando-o para o cliente.

19

Page 20: Sistemas Distribuídos Jorge Surian jsurian@uol.com.br Sistemas Distribuídos: Comunicação (RPC)

2020

RPC – Chamada de Procedimento Remoto

Passagem de Parâmetros– Função do stub do cliente é pegar seus

parâmetros, empacotá-los em uma mensagem e enviá-los ao stub do servidor (montagem de parâmetros - parameter marshaling).

– Operação parece simples, mas:» Arquiteturas diferentes?» Passagem de ponteiros (diferente espaço de

endereçamento)?

20

Page 21: Sistemas Distribuídos Jorge Surian jsurian@uol.com.br Sistemas Distribuídos: Comunicação (RPC)

2121

RPC – Chamada de Procedimento Remoto

Passagem de Parâmetros por Valor– A chamada do procedimento remoto add(i,j),

que pega dois parâmetros inteiros, i e j, e retorna sua soma aritmética como resultado.

– O add mostrada na parte esquerda (cliente), é um apêndice de cliente toma seus dois parâmetros e os coloca em uma mensagem como indicado. Coloca também o nome ou o número do procedimento a ser chamado na mensagem porque o servidor poderia suportar várias chamadas diferentes e é preciso lhe dizer qual delas é requerida.

21

Page 22: Sistemas Distribuídos Jorge Surian jsurian@uol.com.br Sistemas Distribuídos: Comunicação (RPC)

2222

RPC – Chamada de Procedimento Remoto Passagem de Parâmetros por Valor

22

Page 23: Sistemas Distribuídos Jorge Surian jsurian@uol.com.br Sistemas Distribuídos: Comunicação (RPC)

2323

RPC – Chamada de Procedimento Remoto

Passagem de Parâmetros por Valor– Quando a mensagem chega ao servidor, o

apêndice a examina para ver qual procedimento é necessário e então faz a chamada apropriada. Se o servidor também suportar outros procedimentos remotos, o apêndice de servidor poderia conter um comando de chaveamento para selecionar o procedimento a ser chamado, dependendo do primeiro campo da mensagem.

– A chamada propriamente dita do apêndice para o servidor é parecida com a chamada original do cliente, exceto que os parâmetros são variáveis inicializadas com base na mensagem que entra.

23

Page 24: Sistemas Distribuídos Jorge Surian jsurian@uol.com.br Sistemas Distribuídos: Comunicação (RPC)

2424

RPC – Chamada de Procedimento Remoto Passagem de Parâmetros por Valor

24

Page 25: Sistemas Distribuídos Jorge Surian jsurian@uol.com.br Sistemas Distribuídos: Comunicação (RPC)

2525

RPC – Chamada de Procedimento Remoto

Passagem de Parâmetros por Valor– Quando o servidor terminou, o apêndice de

servidor retorna novamente o controle. Ele pega o resultado devolvido pelo servidor e o empacota em uma mensagem.

– A mensagem retorna ao apêndice de cliente, que a desempacota para extrair o resultado e retorna o valor para o procedimento de cliente à espera.

25

Page 26: Sistemas Distribuídos Jorge Surian jsurian@uol.com.br Sistemas Distribuídos: Comunicação (RPC)

2626

RPC – Chamada de Procedimento Remoto

Passagem de Parâmetros por Valor Contanto que as máquinas do cliente e do

servidor sejam idênticas e que todos os parâmetros e resultados sejam tipos escalares, como inteiros, caracteres e booleanos, tudo funcionará bem, mas...– Problemas:

» Representação diferentes para caracteres (EBCDIC-mainframes IBM e ASCII-PCs IBM).

» Ordenação de bytes: Intel Pentium da direita para esquerda (little endian), mas Sun SPARC da esquerda para a direita (big endian), remetendo “As viagens de Gulliver” na questão de como quebrar ovos...

26

Page 27: Sistemas Distribuídos Jorge Surian jsurian@uol.com.br Sistemas Distribuídos: Comunicação (RPC)

2727

RPC – Chamada de Procedimento Remoto

Passagem de Parâmetros por Valor– Problemas:

(a)Mensagem original no Pentium

(b)Mensagem após recebimento na SPARC

(c)Mensagem após inversão

27

Page 28: Sistemas Distribuídos Jorge Surian jsurian@uol.com.br Sistemas Distribuídos: Comunicação (RPC)

2828

RPC – Chamada de Procedimento Remoto

Passagem de Parâmetros por Valor– Ou temos JILL e 83.886.080 (5 x 224) como em

(b) ou temos 5 e LLIJ como em (c).– Ou seja, sem informações adicionais sobre o

que é uma string e o que é um número o dano será irreversível.

– Solução: Cliente diz seu tipo e a conversão feita pelo servidor se tipos forem diferentes.

28

Page 29: Sistemas Distribuídos Jorge Surian jsurian@uol.com.br Sistemas Distribuídos: Comunicação (RPC)

2929

RPC – Chamada de Procedimento Remoto

Passagem de Parâmetros por Referência– Como passar ponteiros?

» Na verdade, o que se quis perguntar é como passar valores por referência, pois os ponteiros nada mais são do que endereços de outras variáveis quaisquer.

29

Page 30: Sistemas Distribuídos Jorge Surian jsurian@uol.com.br Sistemas Distribuídos: Comunicação (RPC)

3030

RPC – Chamada de Procedimento Remoto

Passagem de Parâmetros por Referência– Problema: um ponteiro é significativo somente

dentro do espaço de endereço do processo no qual está sendo usado!» Na verdade, esse nem chega a ser um

problema, retomemos o exemplo da função em C.count = read(fd, buffer, nbytes);

» Lembrando que há um arquivo associado a fd, que o número de caracteres é indicado por nbytes, e ainda que o valor retorna ára string buffer, vamos adotar que 1000 seja o endereço de buffer no cliente. Ora, não podemos esperar que 1000 venha a ser usado no servidor, pois esse endereço poderia estar bem no meio de um programa em execução! 30

Page 31: Sistemas Distribuídos Jorge Surian jsurian@uol.com.br Sistemas Distribuídos: Comunicação (RPC)

3131

RPC – Chamada de Procedimento Remoto

Passagem de Parâmetros por Referência– Mecanismo de passagem de parâmetro →

copiar/restaurar.– Variável é copiada na pilha do cliente

(passagem de parâmetro por valor). O apêndice cliente copia o vetor para a mensagem e o envia ao servidor.

– Variável é manipulada no servidor. O apêndice de servidor pode chamar o servidor como um ponteiro para esse vetor, ainda que esse ponteiro tenha um valor numérico distinto do que consta foi fornecido pelo cliente.

– Valor de retorno sobre-escreve o valor original na pilha do cliente, pelo apêndice cliente findando o processo.

31

Page 32: Sistemas Distribuídos Jorge Surian jsurian@uol.com.br Sistemas Distribuídos: Comunicação (RPC)

3232

RPC – Chamada de Procedimento Remoto

Passagem de Parâmetros por Referência– No caso do read, stub do cliente “sabe” que o

segundo parâmetro aponta para um conjunto de caracteres

– Suponha que o cliente saiba o tamanho do vetor.» Solução:

1. Copiar o vetor para a mensagem e enviar ao servidor.

2. Stub do servidor, chama o servidor com um ponteiro para este vetor.

3. Modificação feita pelo servidor e armazenada diretamente no vetor que esta no stub.

4. Ao enviar o vetor de volta ao stub do cliente, o vetor é copiado de volta ao cliente.

32

Page 33: Sistemas Distribuídos Jorge Surian jsurian@uol.com.br Sistemas Distribuídos: Comunicação (RPC)

3333

RPC – Chamada de Procedimento Remoto

RPC – Linguagem de Programação de Interface - IDL– Interface consiste em um conjunto de

procedimentos que podem ser chamados por um cliente e que são implementados por um servidor.

– Utilização de interface simplifica consideravelmente aplicações cliente-servidor baseadas em RPCs.

– Gerar completamente stubs de cliente e servidor - todos os sistemas de middleware baseados em RPC oferecem uma IDL para suportar desenvolvimento de aplicação.

33

Page 34: Sistemas Distribuídos Jorge Surian jsurian@uol.com.br Sistemas Distribuídos: Comunicação (RPC)

3434

RPC – Chamada de Procedimento Remoto

Em Resumo...– Permite a um cliente o acesso a um serviço

remoto por meio de uma simples chamada a um procedimento local.

– Possibilita que programas clientes sejam escritos de modo simples.

– Pode localizar automaticamente o servidor correto.

– Estabelece a comunicação entre software cliente e software servidor.

34

Page 35: Sistemas Distribuídos Jorge Surian jsurian@uol.com.br Sistemas Distribuídos: Comunicação (RPC)

3535

Copyright © 2010 Prof. Jorge Surian

Todos direitos reservados. Reprodução ou divulgação total ou parcial deste documento é expressamente proíbido sem o consentimento formal, por escrito, do Professor Surian.

Fonte:

Tanenbaum, Andrew S. e Steen, Marteen Van. Sistemas Distribuídos, São Paulo: Prentice Hall, 2008.