Post on 30-Nov-2018
Sistemas Operacionais:Sistemas Operacionais:
Dierone Cesar Foltran JuniorDierone Cesar Foltran Juniordcfoltran at yahoo.comdcfoltran at yahoo.com
Sistemas Distribuídos e Programação em Redes de
Computadores
Sistemas Distribuídos Sistemas Computacionais Distribuídos
Lamport:
“É um sistema que impede você de obter qualquer serviço quando uma máquina que você nem imagina que exista falhe!”
Sistemas Distribuídos
Sistemas Computacionais Distribuídos
Tanenbaum + van Renesse:
“Aparenta ser um sistema centralizado mas na realidade o S.O. executa em múltiplos e independentes processadores.”
Sistemas Distribuídos Sistemas Computacionais Distribuídos
Tanenbaum + van Renesse:
“Aparenta ser um sistema centralizado mas na realidade o S.O. executa em múltiplos e independentes processadores .”
Conceito Chave Transparência o uso de múltiplos processadores deve ser invisível ao usuário.
Sistemas Distribuídos
Evolução Histórica: 5 Fases: décadas de 50, 60, 70, 80 e 90:
50 uso exclusivo - monousuário - alto custo
Sistemas Distribuídos
Evolução Histórica: 5 Fases: décadas de 50, 60, 70, 80 e 90:
50 uso exclusivo - monousuário - alto custo
60 processamento em lote (em batch)
Evolução das memórias: espaço suficiente para acomodar o S.O. e programa de aplicação;
Máxima utilização da máquina
Sistemas Distribuídos
Evolução Histórica: 5 Fases: décadas de 50, 60, 70, 80 e 90:
50 uso exclusivo - monousuário - alto custo 60 processamento em lote (em batch)
70 multiusuário-compartilhamento da máquina (time sharing)
Ciclo de máquina se tornou mais barato (máquinas mais velozes / preço menor por ciclo).
Programadores tornaram-se mais produtivos.
Sistemas Distribuídos
Evolução Histórica: 5 Fases: décadas de 50, 60, 70, 80 e 90:
50 uso exclusivo - monousuário - alto custo 60 processamento em lote (em batch) 70 multiusuário-compartilhamento da máquina (time sharing) 80 computação pessoal e S.D.
Tecnologia de VLSI e LAN tornaram os S.D. viáveis
Sistemas Distribuídos
Evolução Histórica: 5 Fases: décadas de 50, 60, 70, 80 e 90:
50 uso exclusivo - monousuário - alto custo 60 processamento em lote (em batch) 70 multiusuário-compartilhamento da máquina (time sharing) 80 computação pessoal e S.D.
90 computação pessoal, S.D. e Internet
sedimentação dos S.D; proliferação acelerada da Internet; computação paralela sobre plataformas distribuídas; integração de ambientes computacionais.
Sistemas Distribuídos
Evolução Histórica: 5 Fases: décadas de 50, 60, 70, 80 e 90:
50 uso exclusivo - monousuário - alto custo 60 processamento em lote (em batch) 70 multiusuário-compartilhamento da máquina (time sharing) 80 computação pessoal e S.D. 90 computação pessoal, S.D. e Internet
2000 globalização, computação ubíqua,...
Sistemas distribuídos globais; Máquinas paralelas virtuais globais; Wireless e distribuição em tempo real do processamento.
Sistemas Distribuídos
Motivação: aplicações especiais: requerem alto grau de interação com os
usuários (aplicações gráficas); minicomputadores: passam a ser usados como “máquina
pessoal” (monousuário); redes locais de computadores: retorno da conectividade; servidores: algums equipamentos “transformados” para
desempenhar tarefa específica; custo: obter desempenho esperado de um único “recurso”
pode ser muito caro com a tecnologia disponível no momento;;
desempenho: vários fatores a mais alteram o desempenho (cuidado!).
Sistemas Distribuídos
Modelos Arquiteturais: Estações de Trabalho - Servidores
Cliente-servidor Usuário – estação de trabalho Servidores - serviços especializados
Sistemas Distribuídos
Modelos Arquiteturais: Banco de Processadores
Cliente-servidor Usuário – terminais Processadores formam um banco Login – associa processador a terminal Servidores – serviços especiais
Programação Concorrente Máquinas “von Neumann”
Programação Seqüencial → Um processo por vez; Gargalo de von Neumann → Baixo desempenho; Serialização de problemas paralelos.
Solução: Computação Paralela Arquiteturas Paralelas:
vários processadores/memórias trabalhando em uma mesma aplicação;
Programação Concorrente: inciar/finalizar, coordenar e comunicar
Diversas instruções executadas em paralelo para resolver problemas complexos mais eficientemente;
Programação Concorrente
Execução Seqüencial: Várias instruções sendo executadas uma após a outra.
Execução Concorrente: Várias instruções sendo executadas concorrentemente; Único processador: há um pseudo-paralelismo; Em arquiteturas paralelas (vários processadores) têm-se:.
Execução Paralela: na computação paralela há vários processos executando em
diferentes processadores e trabalhando juntos em um único problema;
Programação Concorrente
Arquiteturas Paralelas Objetivo principal:
Acelerar o processamento
Há diferentes soluções: Organizações de propósito geral Organizações orientadas a aplicações
Redes de Computadores
Exemplo de protocolo: TCP/IP
Padrão amplamente utilizado Origem na ARPANET Protocolo base
da Internet
Redes de Computadores
Redes de Alta Velocidade
Qualidade de Serviço (QoS) Evolução das redes convencionais Fibras óticas Protocolos especiais
Protocolos da Internet
ARP HardwareInterface RARP
ICMP IP IGMP
UDPTCP
FTPHTTP RPCDNS... ...
Enlace
Rede
Transporte
Aplicação
UsuárioNúcleo do SO
Identificação de aplicações Como cada máquina é identificada unicamente na
Internet ? Como a entidade de rede (IP) identifica para qual
protocolo de transporte está sendo utilizado ? Como a entidade de transporte identifica qual
aplicação está sendo utilizada ? Um cliente pode abrir várias conexões com o
mesmo servidor (ex. páginas web). Como o cliente sabe para qual programa enviar os pacotes?
Identificação de aplicações
Internet
TCP
www.uol.com.br200.221.8.18procololo = 6
porta = 80
host-0-13.re.apartnet.br.inter.net200.199.75.13
ssh.cin.ufpe.br150.161.2.106procololo = 6
porta = 22
porta15398
porta20348
porta20345
protocolo = 6
servidor DNS200.185.56.49protocol = 17
porta = 53
UDP
porta10340
protocolo = 17
www.bbc.co.uk212.58.224.61protocolo = 17porta = 44585
porta6970
Programação na Internet Sockets
− Estilo: envia/recebe (send/receive)− Característica: eficiente
RPC − Chamada remota de procedimento− Transparência e facilidade de programação
Objetos distribuídos− Transparência, facilidade e todos os benefícios da programação orientada
a objetos− Execução mais lenta− Exemplos:
DCOM CORBA Java RMI etc.
Unix BSD Sockets
Interface padrão para comunicação entre processos em redes TCP/IP
Nasceu com o Unix de Berkeley Os projetistas tentaram usar ao máximo as chamadas
de sistema do Unix Implementada hoje em vários SOs Programar com sockets pode ser visto como
desenvolver um protocolo de aplicaçãodesenvolver um protocolo de aplicação
Tipos de sockets Serviço com conexão
− Implementa um streamstream de dados (SOCK_STREAM)− Protocolo TCP (tipicamente)
Serviço sem conexão− Implementa um serviço de datagramas
(SOCK_DGRAM)− Protocolo UDP (tipicamente)− Acessa diretamente a camada de rede (SOCK_RAW)
Serviço de baixo nível− Protocolo IP (tipicamente
Principais funções da APIsocket Cria um novo descritor para comunicação
connect Iniciar conexão com servidor
write Escreve dados em uma conexão
read Lê dados de uma conexão
close Fecha a conexão
bind Atribui um endereço IP e uma porta a um socket
listen Coloca o socket em modo passivo, para “escutar” portas
accept Bloqueia o servidor até chegada de requisição de conexão
recvfrom Recebe um datagrama e guarda o endereço do emissor
sendto Envia um datagrama especificando o endereço
Serviço com Conexão (TCP)
close ()
listen ()
bind ()
socket ()
accept ()
read ()
write ()
Servidor
socket ()
Cliente
connect ()bloqueado Estabelecimento de conexão
write ()
read ()
close ()
Dados (pedido)
Dados resposta)
Serviço sem Conexão (UDP)
sendto ()
bind ()
socket ()
recvfrom ()
Servidor
socket ()
Cliente
bloqueado
sendto ()
recvfrom ()
Dados (pedido)
Dados resposta)
close ()close ()
Números de portas 1-255 reservadas para serviços padrão
portas “bem conhecidas” 256-1023 reservado para serviços
Unix 1-1023 Somente podem ser usadas
por usuários privilegiados(super-usuário)
1024-4999 Usadas por processos desistema e de usuário
5000- Usadas somente por processosde usuário
Sockets em Java Java modernizou a API para trabalhar com sockets O programador não precisa chamar todas as funções,
algumas chamadas são automáticas Exemplos
− Socket: equivalente a socketsocket e bindbind− ServerSocket: equivalente a socketsocket, bindbind e listenlisten
Sockets são implementados no pacote java.net A transmissão e o envio de dados são feitos através de
classes do pacote java.io de maneira semelhante à escrita e leitura em arquivos
− Classes DataInputStreamDataInputStream, DataOutputStreamDataOutputStream, etc.,
import java.net.*;import java.io.*;public class SimpleJavaClient {
public static void main(String[] args) {try {
SocketSocket s = new SocketSocket("127.0.0.1", 9999);InputStream i = s.getInputStream();OutputStream o = s.getOutputStream();String str;do {
byte[] line = new byte[100];System.in.read(line);o.writewrite(line);i.readread(line);str = new String(line);System.out.println(str.trim());
} while ( !str.trim().equals("bye") );s.closeclose();
}catch (Exception err) {
System.err.println(err);}
}}
import java.io.*;import java.net.*;public class SimpleJavaServer {
public static void main(String[] args) {try {
ServerSocket s = new ServerSocketServerSocket(9999);String str;while (true) {
SocketSocket c = s.acceptaccept();InputStream i = c.getInputStream();OutputStream o = c.getOutputStream();do {
byte[] line = new byte[100];i.readread(line);o.writewrite(line);str = new String(line);
} while ( !str.trim().equals("bye") );c.closeclose();
}}catch (Exception err){ System.err.println(err);}
}}
Sockets em C/C++
C é a linguagem “básica” para programação com sockets
De maneira diferente de Java, programar com sockets em C/C++ envolve utilizar todas as chamadas da API
#include ...#include <sys/socket.h>int main(int argc, char **argv){
int s;struct sockaddr_in dest;char msg_write[100], msg_read[100];s = socketsocket(AF_INET, SOCK_STREAM, 0));bzero(&dest, sizeof(dest));dest.sin_family = AF_INET;dest.sin_port = htons(9999);inet_aton(“127.0.0.1”, &dest.sin_addr.s_addr);connectconnect(s, (struct sockaddr*)&dest, sizeof(dest));do {
scanf("%s",msg_write); writewrite (s, msg_write, strlen(msg_write)+1); readread (s, msg_read, MAXBUF);
} while (strcmp(msg_read,"bye")); closeclose(s);}
#include ...#include <sys/socket.h>int main(int argc, char **argv){ int s, client_s; struct sockaddr_in self, client;
int addrlen = sizeof(client); char msg_write[100], msg_read[100];
s = socketsocket(AF_INET, SOCK_STREAM, 0);bzero(&self, sizeof(self));self.sin_family = AF_INET;self.sin_port = htons(9999);self.sin_addr.s_addr = INADDR_ANY;bindbind(s, (struct sockaddr*)&self, sizeof(self));listenlisten(s, 5);while (1) {
client_s = acceptaccept(s, (struct sockaddr*)&client, &addrlen);do {
readread (client_s, msg_read, MAXBUF); writewrite (client_s, msg_read, strlen(msg_read)+1);
} while (strcmp(msg_read,"bye")); closeclose(client_s);}}
Sockets sem Conexão (Java) Cliente: » socket = new DatagramSocket( );» message = new DatagramPacket(msg,length,Addr,Port);» reply = new DatagramPacket( new byte[100], 100 );» socket.send( message );» socket.receive( reply );» socket.close();
Servidor: » socket = new DatagramSocket(porta);» socket.receive( message );» socket.send( message );
Sockets sem Conexão (C)
Cliente: » s = socket(AF_INET, SOCK_DGRAM, 0);
» sendto(s, msg, length, flags, destaddr, addrlen);» recvfrom(s, msg, length, flags, fromaddr, addrlen);
Servidor: » s = socket(AF_INET, SOCK_DGRAM, 0);» bind(s, dest, sizeof(dest));» recvfrom(s, msg, length, flags, fromaddr, addrlen);» sendto(s, msg, length, flags, destaddr, addrlen);