Protocolo de Ligação Lógica



Documentos relacionados
Protocolo de Ligação de Dados

Comunicação Serial. Comunicação Serial RS232

Protocolo de Ligação Lógica

Porta Série. Trabalhos Práticos AM 2007/2008. Porta Série. Objectivos

COMUNICAÇÃO SERIAL ENTRE EQUIPAMENTOS

Protocolos de Transmissão

4. Protocolos Teóricos e Protocolos de Controlo de Ligação Protocolos ARQ; Especificação de Protocolos; Eficiência ARQ.

Interfaces: blindagem, ligação à terra e linhas de transmissão. Revisões. Interfaces: blindagem, ligação à terra e linhas de transmissão

2 Conceitos de transmissão de dados

Redes de Computadores. Trabalho de Laboratório Nº7

Entradas/Saídas. Programação por espera activa Programação por interrupções

Gerência de Entrada/Saída

Redes de Comunicações/Computadores I Secção de Redes de Comunicação de Dados

Trabalho DESAFIO (OPCIONAL) - ENTREGA 06/05/ IMPRETERIVELMENTE


Sistemas Operacionais Gerência de Dispositivos

3.3 Protocolos comerciais ponto a ponto Camada ligação de dados

O protocolo MODBUS define também o tipo diálogo entre os equipamentos, define por exemplo quem pode enviar dados e em que altura.

Cliente-servidor com Sockets TCP

Camada de Transporte. Protocolos TCP e UDP

CAPÍTULO 2 CARACTERÍSTICAS DE E/S E PORTA PARALELA

DARUMA INFORMAÇÃO TÉCNICA Aprovado por: Paulo Bettega

Redes de Computadores

Comunicação entre Processos Canal de comunicação Arquitetura da comunicação Modelos de comunicação

MANUAL DE INSTALAÇÃO E PROGRAMAÇÃO CONVERSOR - IP / USB / SERIAL RV1

WATCHDOG ELITE NTC OPÇÃO DE COMUNICAÇÕES SERIAIS

Copyright 2013 VW Soluções

Gerenciamento de Entrada e Saída Hélio Crestana Guardia e Hermes Senger

Entrada e Saída. Prof. Leonardo Barreto Campos 1

Comunicação Paralela Meio de transferência de dados onde a informação é transferida os 8 bits ao mesmo tempo.

Cliente-servidor com Sockets TCP

Comunicação de dados. Introdução

Endereços de transporte TPDU. Nível de Rede Endereço de rede. Figura 1. Entidade de transporte

Integração de Sistemas Embebidos MECom :: 5º ano

Redes de Computadores. Camada de Transporte

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

REDES DE COMPUTADORES I 2007/2008 LEIC - Tagus-Park TPC Nº 1. Avaliação sumário da matéria do capítulo 1

Redes de Computadores I Licenciatura em Eng. Informática e de Computadores 1 o Semestre, 26 de Outubro de o Teste A

Sistemas Operacionais Entrada / Saída. Carlos Ferraz (cagf@cin.ufpe.br) Jorge Cavalcanti Fonsêca (jcbf@cin.ufpe.br)

UNIVERSIDADE. Sistemas Distribuídos

Funções específicas de cada camada do modelo OSI da ISO.

CODIFICADORES / DECODIFICADORES

Redes de Computadores

Redes Industriais ModBus RTU

Componentes básicos de um sistema computacional. Cap. 1 (Stallings)

Redes de Computadores II. Módulo 1 Introdução e a camada de enlace

Interrupções. As interrupções são casos especiais de chamadas de procedimentos.

6 - Gerência de Dispositivos

Entradas/Saídas. Programação por interrupções Conceitos gerais Programação da porta série Transmissão

INTERFACE PARA ECF SWEDA

Nível de Enlace. Nível de Enlace. Serviços. Serviços. Serviços. Serviços. Serviços oferecidos os nível de rede

Arquitetura de Computadores. Tipos de Instruções

ISOLADOR FOTOELÉTRICO INTERFACE EM SÉRIE RS-232

Redes de Comunicação Modelo OSI

Tratamento de erros. Escola Superior de Tecnologia e Gestão Instituto Politécnico de Bragança Abril de 2006

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

COMUNICAÇÃO SERIAL. Prof. Clayrton Henrique Microprocessadores Aula 30 Rev.02

ENTRADA E SAÍDA DE DADOS

SISTEMAS OPERACIONAIS ABERTOS Prof. Ricardo Rodrigues Barcelar

Programação de Sistemas

Rede de Computadores. Carlos Eduardo Pereira GCAR GCAR. IMP= Interface Message Processor. hosts. IMPs. Referência: Tanenbaum - Redes de Computadores

Identificação das variáveis de entrada; resultados/variáveis de saída e método ou solução. (procedimentos e funções)

SW DE E/S INDEPENDENTE DE DISPOSITIVO

Guia de Cabeamento para Portas de Console e AUX

ABB Automação kV 119.4kA kV 121.3kA kV 120.2kA IDR 144 INDICADOR DIGITAL REMOTO MODO DE USO

Projeto: Camada Independente de Dispositivo

Organização e Arquitetura de Computadores

EIA232. Introdução. Comunicação de Dados 3º EEA 2004/2005

Prof. Sandrina Correia

Nome Endereço IRQ COM1 3F8 4 COM2 2F8 3 COM3 3E8 4 COM4 2E UART - Universal Asynchronous Receiver/Transmitter. descrição

Módulo 1 Introdução às Redes

Notas da Aula 15 - Fundamentos de Sistemas Operacionais

Comunicação em Sistemas Distribuídos

Arquitetura de Sistemas Operacionais

Capítulo 4. MARIE (Machine Architecture Really Intuitive and Easy)

Arquitetura de Computadores - Revisão -

6. Comunicação entre processos - Pipes

Arquitecturas Tolerantes a faltas em Sistemas Distribuídos

Organização de Computadores 1

Estrutura de um Computador

Arquitetura de Computadores II

Comunicação de Dados

PLACAS DE COMUNICAÇÃO

Deve justificar convenientemente todas as suas respostas.

Redes de Computadores

6 de Julho de Exercício 23 Para que servem portas na camada de transporte?

Entrada e Saída. Interface entre periféricos, processador e memória. Fonte: Minho - Portugal 1

Sistema de Entrada/Saída

Dispositivos de Entrada e Saída

Sistemas Operacionais

Transcrição:

S 1 Ligação Lógica (Trabalho Laboratorial) FEUP/DEEC/CDRC I 2002/03 MPR/JAR S 2 Descrição do Trabalho Objectivos» Implementar um protocolo» Testar o protocolo com uma aplicação transferência ficheiros Ambiente senvolvimento» PC com Unix (LINUX)» Linguagem programação - C» Portas série RS-232 (comunicação assíncrona) Avaliação» Contínua» Demonstração» Relatório

S 3 Configuração Teste PC PC Ligação Lógica Driver porta série (ttys1) Porta série assíncrona (RS-232) Ligação Lógica Driver porta série (ttys1) Porta série assíncrona (RS-232) S 4 Código ASCII American Standard Co for Information Interchange

S 5 Transmissão Série Assíncrona» Cada caracter é limitado por Startbit Stop bit (1 ou 2)» Parida Par número par 1s Ímpar número ímpar 1s Nenhuma (bit D7 usado para dados)» Taxa transmissão: 300 a 115200 bit/s S 6 Sinais RS-232 nível físico entre computador ou terminal (DTE) e mom (DCE)» DTE (Data Terminal Equipment)» DCE (Data Circuit-Terminating Equipment) Conectores DB25 e DB9 sinal activo: sinais controlo (> + 3 V) sinais dados (< - 3 V) DTR (Data Terminal Ready) - Computador ligado DSR (Data Set Ready) - Mom ligado DCD (Data Carrier Detected) - Mom tecta portadora na linha telefónica RI (Ring Indicator) - Mom tecta ring RTS (Request to Send) - Computador pronto a comunicar CTS (Clear To Send) - Mom pronto a comunicar TD (Transmit data) - Transmissão dados RD (Receive data) - Recepção dados

S 7 Ligações entre Equipamentos RD 2 2 RD TD 3 3 TD GND 5 5 GND Null Mom (9 pinos) S 8 Drivers Unix» Características Software que gere um controlador hardware Conjunto rotinas baixo nível com execução privilegiada Resintes em memória (fazem parte do kernel) Interrupção hardware associada» Método acesso Mapeados no sistema ficheiros Unix (/v/hda1, /v/ttys0) Serviços oferecidos são semelhantes aos dos ficheiros (open, close, read, write)» Tipos drivers Caracter leitura e escrita no controlador feita em múltiplos caracteres acesso directo (dados não são guardados em buffers) Bloco leitura/escrita em múltiplos um bloco (bloco = 512 ou 1024 octetos) dados guardados em buffers e acesso aleatório Re leitura e escrita pacotes dados comprimento variável interface sockets

S 9 Driver da Porta Série - API API - Application Programming Interface API tcgetattr() tcsetattr() open() read() write() close()... /v/ttysx (x = 0, 1, 2, 3) Algumas funções da API Porta série int open(device, O_RDWR); /*retorna um scritor para ficheiro*/ int read(int scritorficheiro, char * buffer, int numchars); /*retorna o número caracteres lidos*/ int write(int scritorficheiro, char * buffer, int numchars); /*retorna o número caracteres escritos*/ int close(int scritorficheiro); int tcgetattr(int scritorficheiro, struct termios *termios_p); int tcflush(int scritorficheiro, int selectorfila); /*TCIFLUSH, TCOFLUSH ou TCIOFLUSH*/ int tcsetattr (int scritorficheiro, int modo, struct termios *termios_p); Driver da Porta Série - API Estrutura dados termios - permite configurar e guardar todos os parâmetros configuração da porta série S 10 struct termios { tcflag_t c_iflag; /*flags configuração da recepção*/ tcflag_t c_oflag; /*flags configuração da transmissão*/ tcflag_t c_cflag; /*flags controlo*/ tcflag_t c_lflag; /*flags configuração local*/ cc_t c_line; /*não usado */ cc_t c_cc[nccs] /*caracteres controlo; NCCS = 19*/ ; Exemplo: #fine BAUDRATE B38400 struct termios newtio; /* CS8: 8n1 (8 bits, sem bit parida,1 stopbit)*/ /* CLOCAL: ligação local, sem mom*/ /* CREAD: activa a recepção caracteres*/ newtio.c_cflag = BAUDRATE CS8 CLOCAL CREAD; /* IGNPAR: Ignora erros parida*/ /* ICRNL: Converte CR para NL*/ newtio.c_iflag = IGNPAR ICRNL; newtio.c_oflag = 0; /*Saída não processada*/ /* ICANON: activa modo entrada canónico, sactiva o eco e não envia sinais ao programa*/ newtio.c_lflag = ICANON;

S 11 Tipos Recepção na Porta Série Canónica» read( ) retorna apenas linhas completas (terminadas por ASCII LF, EOF, EOL)» utilizada nos terminais Não canónica» read( ) retorna até um número máximo caracteres» permite configurar o tempo máximo entre caracteres» aquada para leitura grupos caracteres Assíncrona» read( ) retorna imediatamente e envia um sinal à aplicação quando termina» utilização um signal handler Exemplos programas S 12 main() { Recepção canónica int fd,c, res; struct termios oldtio,newtio; char buf[255]; fd = open(/v/ttys1,o_rdonly O_NOCTTY); tcgetattr(fd,&oldtio); bzero(&newtio, sizeof(newtio)); newtio.c_cflag = B38400 CS8 CLOCAL CREAD; newtio.c_iflag = IGNPAR ICRNL; newtio.c_oflag = 0; newtio.c_lflag = ICANON; tcflush(fd, TCIFLUSH); tcsetattr(fd,tcsanow,&newtio); res = read(fd,buf,255); tcsetattr(fd,tcsanow,&oldtio); close(fd); main() { Recepção não canónica int fd,c, res; struct termios oldtio,newtio; char buf[255]; fd = open(argv[1], O_RDWR O_NOCTTY ); tcgetattr(fd,&oldtio); bzero(&newtio, sizeof(newtio)); newtio.c_cflag = B38400 CS8 CLOCAL CREAD; newtio.c_iflag = IGNPAR; newtio.c_oflag = 0; newtio.c_lflag = 0; newtio.c_cc[vtime] = 0; /* temporizador entre caracteres*/ newtio.c_cc[vmin] = 5; /* bloqueia até ler 5 caracteres */ tcflush(fd, TCIFLUSH); tcsetattr(fd,tcsanow,&newtio); res = read(fd,buf,255); /*pelo menos 5 caracteres*/ tcsetattr(fd,tcsanow,&oldtio); close(fd);

S 13 Exemplos programas Recepção assíncrona void signal_handler_io (int status); /*finição signal handler */ main() { /* claração variáveis e abertura do dispositivo série...*/ saio.sa_handler = signal_handler_io; saio.sa_flags = 0; saio.sa_restorer = NULL; /*obsoleto*/ sigaction(sigio,&saio,null); fcntl(fd, F_SETOWN, getpid()); fcntl(fd, F_SETFL, FASYNC); /* configuração da porta através da estrutura termios...*/ while (loop) { write(1, ".", 1);usleep(100000); /* após o sinal SIGIO, wait_flag = FALSE, existem dados na entrada para o read */ if (wait_flag==false) { read(fd,buf,255); wait_flag = TRUE; /*aguardar novos dados*/ /* configurar a porta com os valores iniciais e fechar...*/ void signal_handler_io (int status) { wait_flag = FALSE; Recepção múltipla main(){ int fd1, fd2; /* input sources 1 and 2 */ fd_set readfs; /* file scriptor set */ int maxfd, loop = 1; int loop=true; /* open_input_source opens a vice, sets the port correctly, and returns a file scriptor */ fd1 = open_input_source("/v/ttys1"); /* COM2 */ fd2 = open_input_source("/v/ttys2"); /* COM3 */ maxfd = MAX (fd1, fd2)+1; /*max bit entry (fd) to test*/ while (loop) { /* loop for input */ FD_SET(fd1, &readfs); /* set testing for source 1 */ FD_SET(fd2, &readfs); /* set testing for source 2 */ /* block until input becomes available */ select(maxfd, &readfs, NULL, NULL, NULL); if (FD_ISSET(fd1)) /* input from source 1 available */ handle_input_from_source1(); if (FD_ISSET(fd2)) /* input from source 2 available */ handle_input_from_source2(); S 14 Ligação Lógica Objectivo» Fornecer serviços à camada protocolar superior Exemplo: serviço confirmado (fiável) orientado às ligações Funções» Sincronismo trama dados organizados em tramas (framing) Alternativas: caracteres / flags início e fim Tamanho dos dados implícito ou indicado explicitamente» Estabelecimento / terminação da ligação» Confirmação recepção» Controlo erro Confirmação negativa / pedido retransmissão Temporizadores Números sequência permitem tectar omissões e duplicados Caso mais simples números sequência 0 e 1» Controlo fluxo (exemplo: Stop-and-Wait, Janela)

S 15 Ligação Lógica» Formato das tramas Informação (I) SYN SYN SOH C L BCC D1 Dados DN BCC C Campo Controlo 0 0 0 N(s) 0 0 0 0 L Comprimento do campo dados D1.DN (N octetos)» Formato das restantes tramas SYN SYN SOH C L BCC C Campo Controlo SET (set up) 0 0 0 0 0 0 1 1 DISC (disconnect) 0 0 0 0 1 0 1 1 UA (unnumbered acknowledgment) 0 0 0 0 0 1 1 1 RR (receiver ready / positive ACK) 0 0 0 N(r) 0 0 0 1 REJ (reject / negative ACK) 0 0 0 N(r) 0 1 0 1 RNR (receiver not ready) opcional 0 0 0 N(r) 1 0 0 1 L Comprimento do campo dados (0) Ligação Lógica S 16» O Emissor ve gerar tramas iniciadas com dois ou mais caracteres SYN» O Receptor reconhece o início uma trama após receber um ou mais caracteres SYN, seguido(s) um caracter SOH» Todas as tramas têm um cabeçalho com formato comum C (Campo Controlo) fine o tipo trama e transporta números sequência em tramas I e em tramas Supervisão (RR, REJ e RNR) L (Campo Comprimento) fine o tamanho do campo dados (não nulo nas tramas I, nulo nas restantes) BCC (Block Check Character) tecção erros baseada em parida par sobre cada um dos bits C, L e BCC» As tramas I têm um campo dados protegido por um BCC próprio (parida par sobre cada um dos bits dos octetos dados e do BCC)» Tramas com cabeçalho errado são ignoradas, sem qualquer acção» Tramas I com cabeçalho correcto mas com erros nos dados são scartadas e confirmadas negativamente (pedido retransmissão, antes time-out)» Tramas I, SET e DISC são protegidas por um temporizador; em caso time-out, vem ser efectuadas duas tentativas retransmissão

S 17 Ligação Lógica» Exemplo uma sequência típica tramas (sem erros) Emissor Receptor Estabelecimento UA SET Transferência Dados RR (Nr = 1) RR (Nr = 0) I (Ns = 0) I (Ns = 1) Terminação DISC DISC UA S 18 Ligação Lógica Controlo fluxo» Stop-and-Wait Temporizador» activado após o envio uma trama I, SET ou DISC» sactivado após recepção uma resposta sem erro» quando excedido (time-out) obriga a retransmissão Retransmissão» Recepção confirmação negativa» Temporizador excedido perda da trama enviada ou da sua confirmação» Duas tentativas retransmissão Protecção do cabeçalho e dados» O emissor calcula o OU exclusivo dos octetos a proteger; o resultado é colocado no octeto protecção (BCC)» O receptor faz a verificação timeout timeout Emissor I, Ns = 0 RR, Nr = 1 I, Ns = 0 I, Ns = 0 RR, Nr = 1 Receptor

S 19 Interface - llopen() llread() llwrite() llclose() Interface protocolo-aplicação API /v/ttysx (x = 0, 1, 2, 3) Porta série S 20 Interface - Exemplos estruturas dados» struct applicationlayer { int filedescriptor; int status;» /*Descritor corresponnte à porta série*/ /*TRANSMITTER RECEIVER*/ struct linklayer { char port[20]; /*Dispositivo /v/ttysx, x = 0, 1, 2, 3*/ int baudrate; /*Velocida transmissão*/ unsigned int sequencenumber; /*Número sequência da trama: 0, 1*/ unsigned int timeout; /*Valor do temporizador: 1 s*/ unsigned int numtransmissions; /*Número tentativas em caso falha*/ char frame[max_size]; /*Trama*/

S 21 Interface - int llopen(int porta, TRANSMITTER RECEIVER) argumentos porta: COM1, COM2,... flag: TRANSMITTER ou RECEIVER retorno intificador valor negativo em caso erro Receptor Emissor Receptor llopen() llopen() (I) SET UA (II) Interface - int llwrite(int fd, char * buffer, int length) argumentos - fd: intificador da -buffer: array caracteres a transmitir - length: comprimento do array caracteres retorno - número caracteres escritos - valor negativo em caso erro S 22 int llread(int fd, char * buffer) argumentos - fd: intificador da -buffer: array caracteres recebidos retorno - comprimento do array (número caracteres lidos) - valor negativo em caso erro Emissor Receptor llwrite() write() read() I (Ns = 0, 1) RR (Nr = 0, 1) llread() read() write()

S 23 Interface - int llclose(int fd) argumentos - fd: intificador da retorno - valor positivo em caso sucesso - valor negativo em caso erro Emissor Receptor Receptor llclose() llclose() DISC DISC UA S 24 Teste PC1 Ficheiro texto PC2 Ficheiro texto ligação Driver porta série ligação Driver porta série Porta série assíncrona Porta série assíncrona