Escolar Documentos
Profissional Documentos
Cultura Documentos
Comunicao
memria compartilhada troca de mensagens
base de comunicao em sistemas distribudos
Mensagens bsicas
send (destino, msg) receive (origem, mensagem)
questes
semntica de operaes especificao de origem e destino formato de mensagem
bloqueios
recebimento com bloqueio leva suspenso de uma linha de execuo
alternativas ao bloqueio
futuros: sobreposio de computao e comunicao
ligado ao conceito de RPC
persistncia
mensagens permanecem disponveis independentemente do tempo de vida dos processos origem e destino;
muitas vezes sistemas com persistncia associados a modelos onde no h especificao de origem e destino
envio e recebimento
sincronizao em diferentes pontos da interao
origem
destino
formato de mensagens
valores com tipos
canais declarados chamadas remotas
sequncias de bytes
interpretao por conta do programa
especicao de pares
identificao de processos
volatilidade e especificidade de endereos locais de processos servios de nomes caixas de correio ou canais
arquiteturas de sistemas
(paradigmas, padres, ) necessidade de organizar a comunicao para entender o programa distribudos arquiteturas:
centralizadas: cliente-servidor decentralizadas: p2p. filtros, ...
Cliente-Servidor
Modelo mais usado para aplicaes distribudas no paralelas; Um processo servidor est sempre a espera de comunicao; O processo cliente tem a iniciativa de comear a comunicao quando deseja algum servio.
cliente
cliente
cliente
cliente
cliente
O Modelo ClienteServidor
CLIENTE 1
Funcionamento:
SERVIDOR (passivo)
requisio de cliente Bloqueado termina servio Atendendo iniciar
mensagens
Sendo servido
rede CLIENTE 2
Sendo servido
cliente-servidor
servidores clssicos: arquivos, impresso, BD, ... servidor como executor de chamadas
servios/funes: criptografa, filtra, autentica, ... outros: paralelismo SPMD
adaptao dinmica?
modelos de servidores
servidores iterativos servidores concorrentes
multiprocesso
(ou multithread)
monoprocesso
atendimento a vrios clientes misturado em uma linha de execuo
idia manter interface de entrada e sada O socket identificado por um inteiro chamado descritor do socket descritor_do_socket = socket()
TCP/IP
transferncia de streams de bytes suporte a modelos cliente-servidor TCP/IP estabelece abstrao chamada porta
exemplo de caixa de correio!!
socket passivo: espera por uma conexo (usado por servidores) socket ativo: inicia uma conexo (usado pelos clientes) complexidade: parmetros que o programador pode/tem que configurar
endereo remoto:
especfico (geralmente usado pelo cliente) inespecfico (geralmente usado pelo servidor)
close
concorrente
main(int argc, char *argv[]) { int sockfd; struct sockaddr_in serv_addr; if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0) /* abre um socket TCP */ erro; /* Preenche a estrutura serv_addr com o endereo do servidor com o qual ele deseja se conectar*/ bzero((char *)&serv_addr, sizeof(serv_addr)); serv_addr.sin_family = AF_INET; serv_addr.sin_addr.s_addr = inet_addr(SERV_HOST_ADDR); serv_addr.sin_port = htons(SERV_TCP_PORT); if (connect(sockfd, (struct sockaddr *)&serv_addr, sizeof(serv_addr)) < 0) erro; str_cli(stdin, sockfd); /* envia a solicitao */ close(sockfd); exit(); } }
Endereamento
O socket oferece uma estrutura diferente para cada protocolo onde o programador especifica os detalhes de endereamento
Para o protocolo TCP/IP a estrutura sockaddr_in especifica o formato de endereo struct sockaddr_in { u_short sin_family; /* tipo de endereo */ u_short sin_port; /* nmero da porta */ u_long sin_addr; /* endereo IP */ }
struct sockaddr_in serv_addr; bzero((char *)&serv_addr, sizeof(serv_addr)); serv_addr.sin_family = AF_INET; serv_addr.sin_addr.s_addr = htonl (INADDR_ANY) serv_addr.sin_port = htons(6644)
Portas
mecanismo de especficos: associao a processos
o processo solicita uma porta especfica (tipicamente usado por servidores) o sistema automaticamente atribui uma porta para o processo (tipicamente usado por clientes)
o processo especifica porta = 0 antes de fazer a chamada ao bind. O bind atribui uma porta automaticamente
sockets em Lua
biblioteca LuaSocket
uso de facilidades Lua para criao de interface simplificada socket.tcp() master:bind(address, port) master:listen(backlog) master:connect(address, port) client:receive([pattern [, prefix]]) client:send(data [, i [, j]])
Trabalho 1
contruo de cliente-servidor com algumas estruturas alternativas anlise de desempenho:
throughput tempo mdio de atendimento tempo mximo de atendimento