Sistemas Operacionais:



Documentos relacionados
Programação com sockets (em Java)

Comunicação entre Processos

Cliente-servidor com Sockets TCP

Comunicação em Sistemas Distribuídos. Conceitos: Paradigma C/S. Conceitos: Paradigma C/S. Paradigma Cliente/Servidor

socket Objetivo: aprender a construir aplicações cliente/servidor que se comunicam usando sockets

Programação com Sockets TCP e UDP - Cliente. Gustavo Leitão

Programação Paralela e Distribuída. Prof. Cidcley T. de Souza

Sistemas de Operação Sockets

Programação de sockets com TCP

Bibliotecas. Apoio à Programação Distribuída. Socket. Socket. bibliotecas bibliotecas+ferramentas linguagens de programação distribuídas

Modelo Cliente/Servidor e Introdução a Sockets

Aula Prática. Comunicação em SOCKTS. Disciplina: INF01151

Programação de Sockets

Programando sistemas distribuídos com objetos distribuídos na rede TCP/IP. Prof. Me. Sérgio Carlos Portari Júnior

INF01018 Aula Prática 1 Cliente-Servidor e Multicast

Sockets. Bruno Guimarães Lucas Rossini

Comunicação entre processos

INF1013 MODELAGEM DE SOFTWARE

Computação Distribuída

Programação de Sockets em C/C++

Aula 30 - Sockets em Java

Sistemas Distribuídos

Mecanismos de Comunicação. Sockets em java (

Sistemas Distribuídos. Professora: Ana Paula Couto DCC 064

Cliente/Servidor. Programação com Sockets. Graça Bressan. Graça Bressan/LARC

Sistemas Distribuídos Java Sockets

Sistemas Distribuídos Capítulos 3 e 4 - Aula 4

Programação em Rede Baseada em Java. Luiz Affonso Guedes Tópicos em Redes de Computadores Programação Distribuída

Engenharia Elétrica Eletrônica Slides 20: TCP/IP em Winsocks 2. API do Windows para programar utilizando o protocolo TCP/IP Prof. Jean Marcelo SIMÃO

Sistemas Distribuídos. Coulouris Capítulo 4

Relatório do Laboratório 3

Sockets em Java. Leonardo R. Nunes - leonardo@sumersoft.com. 1. Introdução. 2. Sockets TCP/IP

UNIVERSIDADE. Sistemas Distribuídos

TROCA DE MENSAGENS SOCKETS. Comunicando processos através de SOCKETS. SOCKETS com conexão. SOCKETS sem conexão

Projeto de Sistemas Distribuídos. Prof. Andrêza Leite

Sistemas Distribuídos

Objetos Distribuídos - Programação Distribuída Orientado a Objetos. Luiz Affonso Guedes

UMA ABORDAGEM SOBRE A INTERFACE DE PROGRAMAÇÃO DE APLICAÇÕES SOCKETS E A IMPLEMENTAÇÃO DE UM SERVIDOR HTTP

Passagem de Mensagens

Cliente-servidor com Sockets TCP

Capítulo II Modelos de Programação Distribuída

SISTEMAS DISTRIBUIDOS

sockets interprocess communication Taisy Weber

Um pouco do Java. Prof. Eduardo

Java 2 Standard Edition Fundamentos de

Adriano Reine Bueno Rafael Barros Silva

} Monolíticas Aplicações em um computador centralizado. } Em Rede Aplicações com comunicação em rede. } Distribuídas Comunicação e cooperação em rede

Um Tutorial sobre Sockets Parte I

Sistemas Distribuídos

Sistemas Distribuídos

Aula 2 Arquitetura de Redes. Prof. Dr. S. Motoyama

Considerações no Projeto de Sistemas Cliente/Servidor

Sistemas Distribuídos Capítulos 2 e 3: Modelos, Arquitecturas e Revisão de Redes

Sistemas Operacionais - Básico e Avançado - Prof. Celso Maciel da Costa Mestrado em Informática - PUCRS


Redes de Computadores e Aplicações

Sockets - Conceitos Básicos. COMUNICAÇÃO ENTRE PROCESSOS Sockets. Conceitos Básicos. Tipos de Sockets

MÓDULO 8 Modelo de Referência TCP/IP

Comunicação Inter-Processos. Prof. Adriano Fiorese. Conceitos Iniciais

Introdução às Redes de Computadores. Por José Luís Carneiro

Redes de Computadores (PPGI/UFRJ)

Camada de Transporte

Programação com Sockets

IMPLEMENTAÇÃO DE SOCKETS E THREADS NO DESENVOLVIMENTO DE SISTEMAS CLIENTE / SERVIDOR: UM ESTUDO EM VB.NET

Programação de Sockets

REDES DE COMPUTADORES Prof. Ricardo Rodrigues Barcelar

Sistemas Distribuídos. Prof. Ricardo Ribeiro dos Santos

Comunicação via Sockets. Prof. Orlando Loques - IC/UFF. versão

Tópicos em Sistemas Distribuídos. Modelos de Comunicação

Prof. Marcelo Cunha Parte 5

Comunicação em Sistemas Distribuídos

Sistemas Distribuídos

Redes de Computadores II. Programação com Sockets em Python

Redes de Computadores I Conceitos Básicos

AULA Redes de Computadores e a Internet

Redes. Pablo Rodriguez de Almeida Gross

Introdução à Programação Sockets. Programação Sockets. (c) Volnys Bernal. Agenda. Introdução à Programação Sockets

MODELO CLIENTE SERVIDOR

REDES DE COMPUTADORES

Arquitetura e Protocolos de Rede TCP/IP. Modelo Arquitetural

Redes de Computadores Aula 3

Comparação SDs X Scs

Orientação a Objetos

Rede d s d e d Com o pu p t u ado d r o es Conceitos Básicos M d o e d los o de d Re R de d s:

MC823 Laboratório de Teleprocessamento e Redes

Implementando comunicação em JAVA via Sockets. Alcides Calsavara - alcides@ppgia.pucpr.br Leonardo R. Nunes - leonardo@sumersoft.

Descrição. Implementação. Departamento de Informática e Estatística Universidade Federal de Santa Catarina LAB 4 Transferência de Arquivos

Máquinas Multiníveis

Protocolo TCP/IP. Protocolo TCP/IP. Protocolo TCP/IP. Protocolo TCP/IP. Conexão de Redes. Protocolo TCP/IP. Arquitetura Internet.

Comunicação. Parte II

Professor: Gládston Duarte

Transcrição:

Sistemas Operacionais: Sistemas Distribuídos e Programação em Redes de Computadores Dierone Cesar Foltran Junior dcfoltran at yahoo.com

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: Aspectos físicos Aspectos lógicos

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

Programação Concorrente Classificação de Flynn

Programação Concorrente SISD Single Instruction Single Data

Programação Concorrente SIMD Single Instruction Multiple Data

Programação Concorrente MISD Multiple Instruction Single Data

Programação Concorrente MIMD Multiple Instruction Multiple Data

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

Redes de Computadores Redes modernas Integração de: Dados Voz Imagens

Programação com sockets

Protocolos da Internet HTTP FTP... DNS RPC... Aplicação Usuário TCP UDP Transporte Núcleo do SO ICMP IP IGMP Rede ARP Hardware Interface RARP Enlace

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 porta 20345 porta 20348 TCP porta 15398 porta 10340 UDP porta 6970 protocolo = 6 protocolo = 17 ssh.cin.ufpe.br 150.161.2.106 procololo = 6 porta = 22 Internet host-0-13.re.apartnet.br.inter.net 200.199.75.13 www.uol.com.br 200.221.8.18 procololo = 6 porta = 80 www.bbc.co.uk 212.58.224.61 protocolo = 17 porta = 44585 servidor DNS 200.185.56.49 protocol = 17 porta = 53

Programação na Internet Sockets RPC Estilo: envia/recebe (send/receive) Característica: eficiente 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ção

Berkeley Sockets

Berkeley Sockets

Sockets - visão conceitual

Tipos de sockets Serviço com conexão Implementa um stream 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 API socket connect write read close bind listen accept Cria um novo descritor para comunicação Iniciar conexão com servidor Escreve dados em uma conexão Lê dados de uma conexão Fecha a conexão Atribui um endereço IP e uma porta a um socket Coloca o socket em modo passivo, para escutar portas Bloqueia o servidor até chegada de requisição de conexão recvfrom Recebe um datagrama e guarda o endereço do emissor Envia um datagrama especificando o endereço sendto

Serviço com Conexão (TCP) Servidor socket () bind () listen () accept () bloqueado read () Estabelecimento de conexão Dados (pedido) Cliente socket () connect () write () write () close () Dados resposta) read () close ()

Serviço sem Conexão (UDP) Servidor socket () bind () recvfrom () bloqueado Cliente socket () Dados (pedido) sendto () sendto () close () Dados resposta) recvfrom () close ()

Estrutura Típica de um Servidor

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 de sistema e de usuário 5000- Usadas somente por processos de 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 socket e bind ServerSocket: equivalente a socket, bind e listen 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 DataInputStream, DataOutputStream, etc.,

import java.net.*; import java.io.*; public class SimpleJavaClient { public static void main(string[] args) { try { Socket s = new Socket("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.write(line); } } i.read(line); str = new String(line); System.out.println(str.trim()); } while (!str.trim().equals("bye") ); s.close(); } 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 ServerSocket(9999); String str; while (true) { Socket c = s.accept(); InputStream i = c.getinputstream(); OutputStream o = c.getoutputstream(); do { byte[] line = new byte[100]; i.read(line); o.write(line); str = new String(line); } while (!str.trim().equals("bye") ); c.close(); } } 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 = socket(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); connect(s, (struct sockaddr*)&dest, sizeof(dest)); do { scanf("%s",msg_write); write (s, msg_write, strlen(msg_write)+1); read (s, msg_read, MAXBUF); } while (strcmp(msg_read,"bye")); close(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 = socket(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; } bind(s, (struct sockaddr*)&self, sizeof(self)); listen(s, 5); while (1) { client_s = accept(s, (struct sockaddr*)&client, &addrlen); do { read (client_s, msg_read, MAXBUF); write (client_s, msg_read, strlen(msg_read)+1); } while (strcmp(msg_read,"bye")); close(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);