comunicação entre processos - inf.ufsc.br lau.lung/ine5645/5.comun  · 1 unidade 5...

Download Comunicação entre Processos - inf.ufsc.br lau.lung/INE5645/5.Comun  · 1 Unidade 5 Comunicação…

Post on 26-Jan-2019

212 views

Category:

Documents

0 download

Embed Size (px)

TRANSCRIPT

1

Unidade 5

Comunicao entre Processos

Pipes Sockets Java RMI

2

Comunicao entre Processos

Processos e threads interagem para trabalhar conjuntamente em um sistema Trocam dados / mensagens Utilizam os servios de comunicao fornecidos pela mquina e pelo S.O.

Seguem protocolos de comunicao para que possam entender uns aos outros

2

3

Comunicao entre Processos

Protocolos Estabelecem caminhos virtuais de comunicao entre processos / threads

Duas entidades precisam usar os mesmos protocolos para trocar informaes

Protocolo

Meio de Transmisso

4

Comunicao entre Processos

ProtocolosPede conexo

tempo

Aceita conexo

Confirma recepo

Fecha conexo

Libera conexo

Envia mensagem

Com licena

Pois no

So 8 horas.

Obrigado!

De nada.

Que horas so?

3

5

Canal de Comunicao

Comunicao entre Processos

Servios de comunicao Servio sem Conexo: cada unidade de dados enviada independentemente das demais

Servio com Conexo: dados so enviados atravs de um canal de comunicao

6

Comunicao entre Processos

Caractersticas dos servios de comunicao entre processos/threads: Abrangncia: local ou remota Participantes: 1 1, 1 N ou M N Tamanho das mensagens: fixo ou varivel; limitado ou no

Sincronismo: comunicao sncrona, assncrona ou semi-sncrona

4

7

Comunicao entre Processos

APIs de comunicao Permitem que aplicaes troquem dados Fornecem primitivas de comunicao que podem ser chamadas a partir do cdigo

Provem acesso aos servios de comunicao, que podem assim ser usados pelas aplicaes

Programa

API

S.O.

8

Comunicao entre Processos

APIs de Comunicao de Sist. Operacionais Mecanismos fornecidos pelos S.O.s permitem enviar mensagens (trechos de memria) de um processo a outro

Alguns S.O.s permitem que sejam criadas reas de memria compartilhadas entre dois ou mais processos

memriaP1 P2

P1 P2

8

5

9

Comunicao entre Processos

Exemplos de APIs de comunicao: Pipes: canais de comunicao locais Sockets: portas de comunicao locais ou de rede (verso segura: SSL)

Suportes de RPC (Remote Procedure Call): permitem chamar procedimentos/mtodos remotamente (ex.: RMI, CORBA, COM, )

Canais de eventos: permitem notificar threads e processos dos eventos ocorridos no sistema(Ex.: JMS, CORBA Notification Service, )

10

Comunicao entre Processos

Mecanismos de IPC nativos do UNIX Pipes Sockets (comunicao local ou remota)

Mecanismos de IPC nativos do Windows Pipes e Mailslots WinSock (comunicao local ou remota) Microsoft RPC (comunicao local ou remota) Memria compartilhada: File Mapping e Dynamic Data Exchange (DDE)

Object Linking and Embedding (OLE)10

6

11

Comunicao entre Processos

RPC Chamada Remota de Procedimento Segue o modelo Cliente/Servidor Muito usado na interao entre objetos Objeto servidor possui interface com mtodos que podem ser chamados remotamente

Objetos clientes usam servios de servidores

x = Servidor.Soma(y,z);

Cliente

Soma(int y, int z) {return(y+z);}

Servidor

12

Comunicao entre Processos

RPC Caractersticas Em geral as requisies so ponto-a-ponto e sncronas

Dados so tipadosParmetros da requisioRetorno do procedimento/mtodoExcees

Um objeto pode ser cliente e servidor em momentos diferentes

7

13

Comunicao entre Processos

Notificao de Eventos Eventos ocorridos so difundidos por produtores e entregues a consumidores

Canal de eventos permite o desacoplamento produtor e consumidor no precisam se conhecer

Canal de Eventos

Consumidores de Eventos

Produtores de Eventos

14

Comunicao entre Processos

Notificao de Eventos Caractersticas Envio de eventos completamente assncrono

Produtor no precisa aguardar fim do envioEvento armazenado no canal de eventos

Comunicao pode ser feita atravs de UDP multicast ou fazendo mltiplos envios unicastcom TCP, UDP ou com um suporte de RPC

Os eventos podem ter tamanho fixo ou varivel, limitado ou ilimitado

Eventos podem ser tipados ou no

8

15

Thread 2Thread 1

Pipes

Pipes = canais de comunicao Duas threads podem trocar dados por um pipe comunicao de 1 para 1

Threads devem rodar na mesma mquina virtual comunicao local

PIPE

16

Pipes

Disponveis em Java atravs das classes PipedInputStream e PipedOutputStream

Principais mtodos: Criao dos Pipes:

is = new PipedInputStream();os = new PipedOutputStream(is);

Envio e recepo de bytes / arrays de bytes:is.read()os.write(dado); os.flush();

Exceo: java.io.IOException

9

17

Pipes

Uso de Pipes com fluxos (streams) de dados Criao do fluxo:

in = new java.io.DataInputStream(is);out = new java.io.DataOutputStream(os);

Envio e recepo de dados: var = in.read();out.write(var);onde = Int, Long, Float, Double, etc.

18

Pipes

public class Producer extends Thread {private DataOutputStream out;private Random rand = new Random();public Producer(PipedOutputStream os) {

out = new DataOutputStream(os); }public void run() {while (true)

try {int num = rand.nextInt(1000);out.writeInt(num);out.flush();sleep(rand.nextInt(1000));

} catch(Exception e) { e.printStackTrace(); }}

}

10

19

Pipes

public class Consumer extends Thread {private DataInputStream in;public Consumer(PipedInputStream is) {

in = new DataInputStream(is); }public void run() {

while(true) try {

int num = in.readInt();System.out.println("Nmero recebido: " + num);

} catch(IOException e) { e.printStackTrace(); }}

}

20

Pipes

public class PipeTest {public static void main(String args[]) {try {PipedOutputStream out = new PipedOutputStream();PipedInputStream in = new PipedInputStream(out);

Producer prod = new Producer(out);Consumer cons = new Consumer(in);

prod.start();cons.start();

} catch (IOException e) { e.printStackTrace(); }}

}

11

21

Pipes

Uso de Pipes com fluxos de objetos Criao do fluxo:

in = new java.io.ObjectInputStream(is);out = new java.io.ObjectOutputStream(os);

Envio e recepo de objetos: obj = () in.readObject();out.writeObject(obj);onde = classe do objeto lido/enviado

Envio e recepo de Strings:String str = in.readUTF();out.writeUTF(str);

22

Sockets

Socket Abstrao que representa uma porta de comu-nicao bidirecional associada a um processo

Principais Tipos de Socket Socket Datagrama: envia/recebe datagramas sem criar conexo; usa protocolo UDP

Socket Multicast: recebe as mensagens endereadas a um grupo; usa UDP multicast

Socket Stream: estabelece uma conexo com outro socket; usa protocolo TCP

12

23

Sockets

Operaes com Sockets Datagrama Criar um socket datagrama:

DatagramSocket s = new DatagramSocket(porta);

Criar pacotes de dados para envio:DatagramPacket pack = new DatagramPacket(msg, tamanho, destino, porta);

Enviar dados: s.send(pack); Criar pacotes de dados para recepo:

DatagramPacket pack = new DatagramPacket(msg,tam);

Receber dados: s.receive(pack); Ler dados do pacote: pack.getData()

24

Sockets

Sockets Datagrama Enviotry {

DatagramSocket socket = new DatagramSocket();InetAddress destino = InetAddress.getByName(

"127.0.0.1");String mensagem = "Hello";byte[] dados = mensagem.getBytes();int porta = 1234;DatagramPacket pacote = new DatagramPacket(

dados, dados.length, destino, porta);socket.send(pacote);

} catch (SocketException e) { e.printStackTrace();} catch (IOException e) {e.printStackTrace(); }

13

25

Sockets

Sockets Datagrama Recepotry {

int porta = 1234;DatagramSocket socket = new DatagramSocket(porta);byte[] dados = new byte[100];DatagramPacket pacote = new DatagramPacket(

dados, dados.length);socket.receive(pacote);String mensagem = new String(pacote.getData(), 0,

pacote.getLength() );System.out.println("Mensagem: " + mensagem);

} catch (SocketException e) { e.printStackTrace();} catch (IOException e) {e.printStackTrace(); }

26

Sockets

Sockets Multicast Permitem o envio simultneo de datagramas a grupos de destinatrios

Grupos multicast so identificados por endereos IP de 224.0.0.0 a 239.255.255.255

Grupo Multicast

Emissores

14

27

Sockets

Sockets Multicast Vrios emissores podem mandar mensagens para o grupo (ou seja, mensagens vo de X emissores Y receptores)

Emissor no precisa fazer parte do grupo para enviar mensagens ao grupo, e nem precisa saber quem so os seus membros; basta conhecer o endereo IP do grupo

O receptor entra em um grupo (se torna um membro do grupo) e passa a receber as mensagens destinadas ao grupo

28

Sockets

Sockets Multicast Envio try {

DatagramSocket socket = new DatagramSocket();InetAddress grupo = InetAddress.getByName(

"230.1.2.3");String mensagem = "Hello";byte[] dados = mensagem.getBytes();int porta = 1234;DatagramPacket pacote = new DatagramPacket(

dados, dados.length, grupo, porta);socket.send(pacote);

} catch (SocketException e) { e.