Académique Documents
Professionnel Documents
Culture Documents
Espaço de
Espaço de
endereçamento
Espaço de endereçamento
Privado
endereçamento Privado
do
Sistema Operativo
Processo A Processo B
Espaço de
Espaço de
endereçamento
endereçamento
Privado
Privado
Espaço de
Espaço de
endereçamento
endereçamento
Privado
Privado
IPC
Processo A Processo B
Alexandre Fonte Material de Apoio a AD, ESTCB Edição 2010-2011
Comunicação entre Processos
Fundamentalmente, existem dois tipos de soluções,
fornecidas pelos SO:
1. Suporte de alguma forma de partilha entre espaços de
endereçamento:
Memória partilhada
2. Utilização de mecanismos explícitos para transporte de
dados entre o espaço de endereçamento de um processo
e o espaço de endereçamento do outro processo:
Passagem de Ficheiros, passagem mensagens, chamadas de
procedimentos remotos, invocação remota de métodos, etc
.
main () { write variable x .
. .
x = 10 x: 10
print(x);
. read variable x .
. .
. .
}
Buffer
do receptor
OS
Dados de A
enviados para B
Processo A Processo B
Alexandre Fonte Material de Apoio a AD, ESTCB Edição 2010-2011
Chamadas de Procedimentos
(Remote Procedure Calls)
Método que permite a chamada de procedimentos sobre outros
espaços de endereçamento
Usa uma interface remota idêntica à interface local
Os dados são passados como parâmetros
Geralmente, a chamada de um RPC bloqueia até à chegada dos
resultados da execução do RPC
main () { .
. Dados como parâmetros .
rpc(); .
. server();
. .
. Dados como .
} valores de retorno .
a message
Message passing
Corpo
Conteúdo (dados)
Receive(message).
Unmarshalling:
Descodificação do formato rede para o formato interno;
Processo 1
Middleware
Marshalling
0110101 ....1010101010....
Middleware
Unmarshalling
Processo 2
Double a=10.1
String str=Sistemas Distribuídos
Pipes e Fifos
Sockets
Pipes
Um pipe é uma técnica primitiva para passar dados entre processos no
mesmo sistema;
Um pipe fornece apenas comunicação num sentido, não formatada e não
interpretada;
Os pipes são implementados sobre o sistema de ficheiros, o acesso é
semelhante ao dos ficheiros;
Um processo escreve bytes no pipe;
Um segundo processo lê bytes do pipe.
Um pipe é criado invocando a chamada de sistema pipe(), a qual cria um
par de descritores de ficheiro que apontam para o pipe:
fd[0] é usado para leitura;
fd[1] é usado para escrita.
Os processos que utilizam os pipes têm que ter um processo pai em
comum.
Fork
Pai Filho
process
Kernel
Pipe
(saltar slide seguinte)
Dados
Pai Filho
fd1[1] fd1[0]
process
Kernel
Pipe1
Dados
pipe 2 (fd2[1])
O filho fecha os descritor de escrita do pipe 1 (fd1[1]) e leitura do
pipe 2 (fd2[0])
Pai Filho
process
Kernel
Pipe2
Dados
Pipe1
Dados
process
Kernel
/tmp/fifo.2
Fifo2
Dados
/tmp/fifo.1
Fifo1
Alexandr
Alexandre Fonte Material de Apoio a AD, ESTCB Edição 2010-2011 e 39
Fonte
Dados
Sockets
Foram originalmente introduzidos no Free BSD 4.3
Podem ser vistos como uma evolução dos pipes, dado que se
inserem na estrutura habitual dos descritores de ficheiros do UNIX
Emissor Receptor
Processo Processo
Porto Porto
Canal de comunicação
Transporte
TCP/IP
Rede
Lógica
Lógica(Driver/
placa rede)
Física
Alexandre Fonte Material de Apoio a AD, ESTCB Edição 2010-2011
Sockets API que usa os serviços da Pilha
TCP/IP
Protocolo C/S
Aplicação Cliente Aplicação Servidor
IP IP
lógica lógica