Entradas/Saídas (I/O) Dispositivos de entrada/saída (periféricos) Barramento (Bus) Endereçamento de dispositivos entrada/saída
Dispositivos de entrada/saída Componentes da arquitectura de Von Neumann Grande variedade de tipos: Teclados Ratos Monitores Discos Impressoras... Arquitectura de Computadores (2008/2009): Entradas/Saídas 605
Exemplo: Teclado orientado ao byte De cada vez, o teclado, disponibiliza um byte com o carácter premido Podemos obter cada um desses bytes individualmente Podemos "ver" o teclado como um periférico de leitura que providencia uma sequência (stream) de bytes Arquitectura de Computadores (2008/2009): Entradas/Saídas 606
Exemplo: Discos orientados ao bloco A unidade de transferência é o sector (2KB, 4KB, etc.) Arquitectura de Computadores (2008/2009): Entradas/Saídas 607
Bus (barramento) Um Bus é um mecanismo de comunicação digital que permite a duas ou mais unidades funcionais transferir dados e sinais de controle Um computador pode conter vários buses que estão optimizados para um determinado objectivo Bus de sistema (FSB Front Side Bus): liga o CPU aos restantes componentes Na realidade algumas arquitecturas têm um segundo bus que liga o CPU a memórias cache, melhorando a performance Bus de memória: liga o FSB ao subsistema de memória Bus de entrada/saída (I/O bus) interliga um conjunto de dispositivos de entrada/saída Arquitectura de Computadores (2008/2009): Entradas/Saídas 608
Exemplos de bus ponto a ponto Ligação via bus Exemplos de bus multiponto Arquitectura de Computadores (2008/2009): Entradas/Saídas 609
Requisitos de um bus Cada bus tem de suportar a taxa de transferência dos compontes que interliga Consideremos uma motherboard com relógio de 200MHz O CPU parte esse relógio para definir o seu relógio interno. Se partir em 10 vezes terá um relógio de 2GHz Uma motherboard actual permite 4 transferências de informação de/para CPU por ciclo de relógio O FSB terá um relógio de 800MHZ (4x200MHz) Componentes com maiores requisitos de velocidade Memória e placa gráfica Ficam ligados na Northbridge Os restantes ficam ligados à Southbridge Arquitectura de Computadores (2008/2009): Entradas/Saídas 610
Organização dos buses CPU Front Side Bus Placa gráfica AGP ou PCI express Northbridge Bus memória Memória Bus interno Ligações PCI: placas onboard slots de expansão Southbridge Ligação ethernet Ligação USB Ligação Firewire Ligação aos discos Arquitectura de Computadores (2008/2009): Entradas/Saídas Arquitectura de Computadores (2008/2009): Entradas/Saídas 611
Transferência em série vs. paralelo Interface paralelo Num dado instante de tempo, transferem-se vários bits em simultâneo; Largura da interface é o nº de bits transferidos em paralelo (8 bits, 16,...) Por exemplo, pode ser composta por vários fios para transferir os dados, em que cada fio transporta um bit Arquitectura de Computadores (2008/2009): Entradas/Saídas 612
Transferência em série vs. paralelo Interface série 1 bit enviado de cada vez (para enviar um byte tem de ser enviada uma série de bits) Só um fio para dados Mais lento que a interface paralela mas usa menos fios e os controladores são mais simples Arquitectura de Computadores (2008/2009): Entradas/Saídas 613
Sentido das transferências De um modo geral as transferências são bidireccionais. Por exemplo, num disco pode-se ler e escrever. A bidireccionalidade pode ser conseguida de duas formas: Interacção full-duplex: são permitidas transferências nos dois sentidos em simultâneo; conseguido através da duplicação das ligações Interacção half-duplex: em cada momento pode-se transferir apenas num sentido; as entidades nas extremidades têm de negociar a inversão do sentido Arquitectura de Computadores (2008/2009): Entradas/Saídas 614
Sincronização entre os intervenientes Um bus pode ser síncrono ou assíncrono consoante exista, ou não, um relógio único para os intervenientes Os buses CPU-periférico não podem ser síncronos Não há a garantia que o periférico esteja pronto para processar o pedido É preciso acomodar diferentes ritmos de transmissão Duas formas possíveis O sinal é codificado de forma a que se conseguem identificar as fronteiras entre bits Há linhas de controlo extras que transportam um sinal de relógio ou marcam a existência de novos dados Arquitectura de Computadores (2008/2009): Entradas/Saídas 615
Latência e débito de uma interface Latência (latency): é o tempo que demora a transferir uma dada unidade de informação (neste cado um só bit) Tempo entre a emissão de 1 bit e a sua recepção medida em unidades de tempo (por exemplo ns) Débito (throughput): quantidade de informação (neste caso bits) que se conseguem transmitir por unidade de tempo Medido por exemplo em Mbit/s (Mbps) ou Mbytes/s (MBps) Arquitectura de Computadores (2008/2009): Entradas/Saídas 616
Multiplexagem Para aumentar o débito dever-se-iam usar interfaces paralelas com um grande número de linhas e fullduplex Há muitas considerações contra esta solução: o número de contactos nos circuitos integrados, o custo das ligações e dos controladores, etc. Uma solução é a multiplexagem: permite transferir uma quantidade arbitrária de dados sobre uma ligação com um número limitado de linhas. Os dados são divididos em blocos que são transmitidos de forma independente: 1 sector de 512 bytes pode ser transferido byte a byte Arquitectura de Computadores (2008/2009): Entradas/Saídas 617
Um bus pode ser Proprietário Tipos de bus Coberto por uma patente e não acessível a outros fabricantes Normalizado Obedece a uma especificação publicada; Permite a inter-operação de equipamentos de diferentes fabricantes, ou seja, permite que no bus existam dispositivos de diferentes fabricantes A norma define: As especificações eléctricas exactas As temporizações dos sinais A forma como os dados são codificados Arquitectura de Computadores (2008/2009): Entradas/Saídas 618
Suporte físico do bus Conjunto de ligações, usualmente sob forma de um circuito impresso Fichas (sockets) permitem inserir e remover dispositivos facilmente Arquitectura de Computadores (2008/2009): Entradas/Saídas 619
Interface com o bus As normas usadas nos buses são relativamente complicadas e exigem bastante lógica para as suportar A norma inclui também especificações mecânicas que permitem ligar facilmente circuitos impressos ao socket do bus (fichas/contactos) Arquitectura de Computadores (2008/2009): Entradas/Saídas 620
Partilha do bus Buses são partilhados por múltiplas entidades CPUs e periféricos, múltiplos CPUs,... A norma do bus tem de incluir um protocolo de acesso: Determina qual a entidade que pode usar o Bus num dado momento Todos os dispositivos ligados ao Bus têm de obedecer a este protocolo Arquitectura de Computadores (2008/2009): Entradas/Saídas 621
Características do bus Transferência de dados em paralelo Pode transferir múltiplos bits em simultâneo Largura típica: 32 ou 64 bits O bus é normalmente passivo Não contém muita lógica própria; pode ser visto como um mero conjunto de fios (linhas) São os dispositivos a ele ligados que suportam a comunicação Pode conter um árbitro: suporta a partilha, decidindo quem é tem acesso Arquitectura de Computadores (2008/2009): Entradas/Saídas 622
Entradas/saídas: ponto de vista do CPU O CPU não acede directamente aos periféricos Usa uma interface programável para passar pedidos ao controlador de interface e para receber as repostas a esses pedidos O controlador de interface converte esses pedidos em sinais eléctricos Esses sinais são interpretados pelo controlador do lado do periférico Este é que interage directamente com o dispositivo físico. Arquitectura de Computadores (2008/2009): Entradas/Saídas 623
Transferências nas Entradas/Saídas CPU Ligação externa (BUS de sistema) controlador do periférico periférico out in Várias transferências de dados envolvidas Os programas executam no CPU (só podem controlar directamente I/O com o bus de sistema) outro periférico Arquitectura de Computadores (2008/2009): Entradas/Saídas 624
Organização do Bus Bus está separado funcionalmente em 3 partes Controlo Especificação do endereço (origem/destino dos dados) Dados a transferir Linhas de controlo Linhas de endereço Linhas de dados Arquitectura de Computadores (2008/2009): Entradas/Saídas 625
Acesso ao Bus O Bus só suporta duas operações Leitura Escrita Todas as operações de I/O são efectuadas efectuando leituras e escritas no Bus Estas traduzem-se na transferência dos dados de/para as interfaces dos periféricos, como se fossem leituras e escritas em registos internos ao controlador do periférico Arquitectura de Computadores (2008/2009): Entradas/Saídas 626
Acesso em leitura 1. Usa as linhas de controlo para obter acesso ao Bus 2. Coloca um endereço nas linhas de endereço 3. Usa as linhas de controlo para requerer uma operação de leitura 4. Testa as linhas de controlo para verificar se a transferência já se concluiu 5. Lê um valor das linhas de dados 6. Posiciona as linhas de controlo para deixar outra entidade fazer acesso ao Bus Arquitectura de Computadores (2008/2009): Entradas/Saídas 627
Acesso em escrita 1. Usa as linhas de controlo para obter acesso ao Bus 2. Coloca um endereço nas linhas de endereço 3. Coloca um valor nas linhas de dados 4. Usa as linhas de controlo para indicar uma operação de escrita 5. Testa as linhas de controlo para verificar se a transferência já se concluiu 6. Posiciona as linhas de controlo para deixar outra entidade fazer acesso ao Bus Arquitectura de Computadores (2008/2009): Entradas/Saídas 628
Controlador de dispositivo periférico Dispositivo Interacção interna ao periférico CPU Controlador (interface do dispositivo) Endereços Dados Controlo Endereços Dados Controlo Bus de sistema Arquitectura de Computadores (2008/2009): Entradas/Saídas 629
Bus: ponto de vista do CPU A interface do bus fornece uma interface de programação, que tem apenas duas operações: Ler e escrever Quando há uma referência à memória ou a periféricos o CPU deixa tudo a cargo da interface do bus: Leitura o CPU pede à interface para efectuar a leitura Escrita idem Para o programador, a interface de bus é invisível: ela define um espaço de endereçamento, em que cada periférico possui um controlador com uma faixa de endereços distinta Arquitectura de Computadores (2008/2009): Entradas/Saídas 630
Endereçamento no bus A interface de bus de cada controlador ou da memória implementa o protocolo do Bus e trata de todas as transferências Usa as linhas de controlo para acesso ao bus Lê as linhas de endereços e lê/altera as linhas de dados Cada entidade no Bus tem um conjunto de endereços atribuídos Embora "veja" todos os pedidos que passam no Bus, a interface só atende os que contêm os endereços para os quais a interface foi configurada Arquitectura de Computadores (2008/2009): Entradas/Saídas 631
Ponto de vista da interface do dispositivo Seja R o conjunto de endereços associado à interface while (1) { monitorar o bus até aparecer um pedido if (pedido refere um endereço pertencente a R) aceitar e processar o pedido else ignorar o pedido } Podem ocorrer dois tipos de erros (bus errors): Conflito de endereços: mais que um responde Endereços não atribuído: nenhum responde (timeout) Arquitectura de Computadores (2008/2009): Entradas/Saídas 632
Espaço de endereços único: memory-mapped I/O Uma faixa de endereços corresponde à memória Cada controlador é configurado para responder a uma faixa de endereços fora do espaço da memória e a que nenhum outro controlador responde As faixas de endereços da memória e dos controladores são disjuntos Entidade Memória Periférico 1 Periférico 2 Memória Faixa de endereços 0x000000-0x0FFFFF 0x100000-0x10000B 0x10000C-0x100017 0x100000 Periférico 2 Periférico 1 0x000000 Arquitectura de Computadores (2008/2009): Entradas/Saídas 633
Espaço único Espaço de endereços único Não há instruções máquina especiais para acesso aos controladores. São usadas LOAD/STORE (MOV) para endereços que pertencem à faixa de endereços de entrada/saída Exemplo: Envio de 1 byte OUT para o periférico 2: mov byte [0x10000C], 5 Arquitectura de Computadores (2008/2009): Entradas/Saídas 634
Espaço de endereços separado Dois espaços de endereçamento separados Um para a memória Um para os controladores dos dispositivos, os portos ou portas (ports) Cada controlador é configurado para responder a uma faixa de endereços diferente A faixa de endereços da memória é sempre disjunta da dos periféricos O CPU necessita de instruções diferentes para separar os acessos a memória dos acessos aos periféricos Entidade Memória Periférico 1 Periférico 2 Faixa de endereços 0x000000-0xFFFFFF 0x000000-0x00000B 0x00000C-0x000017 Memória Periférico 1 0x000000 Periférico 2 Arquitectura de Computadores (2008/2009): Entradas/Saídas 635
Espaço de endereços separado Espaço separado Há instruções máquina dedicadas ao acesso do espaço de endereços de entrada/saída (ports) Exemplo da família Intel 80x86/Pentium IN rega, port (leitura para o registo EAX/AX/AL) OUT port, rega (escrita a partir do conteúdo do EAX/ ) Se port > 255 então usa-se um registo: IN rega, DX e OUT DX, rega O mesmo exemplo do acetato anterior: mov al, 1 out 0x0C,al Arquitectura de Computadores (2008/2009): Entradas/Saídas 636
Ler/escrever Entrada/Saída Como é que operações de leitura e escrita manipulam periféricos? O bus apenas fornece um meio de passar bits de uma entidade para outra Os bits que passam no bus podem ser: Dados que estão a ser transferidos Representar operações de controlo sobre o periférico; cada configuração de bits é interpretada pelo controlador do periférico CPU Interface Bus I/O Bits com dados Bits com comandos Controlador periférico Interface Bus I/O Periférico Arquitectura de Computadores (2008/2009): Entradas/Saídas 637
Interface genérica de periférico Cada registo da interface tem um propósito Cada um tem um endereço de I/O atribuído Endereços Dispositivo registo comando descodificação dos endereços Controlo Bus de sistema registo estado registo dados leitura/escrita de dados Dados Contro olador Arquitectura de Computadores (2008/2009): Entradas/Saídas 638
Controlador genérico Em geral, as interfaces têm três tipos de registos (portos ou portas): Porta de dados: para guardar os dados enviados pelo CPU ou recebidos do exterior pelo dispositivo periférico Porta de estado: indica informação sobre o estado corrente do periférico Existência de dados para ler Disponível para receber dados Erros e outras informações Porta de controlo: para receber comandos vindos do CPU (inicializar interface, posicionar a interface em estados para receber ou enviar, e outros comandos que desencadeiam a operação do periférico) Arquitectura de Computadores (2008/2009): Entradas/Saídas 639
Programação dos controladores de I/O Cada controlador oferece uma interface de operação: Uma linguagem específica desse hardware Controladores podem ser mais ou menos autónomos em relação ao CPU Controladores com pouca inteligência precisam de grande interacção com o CPU Controladores com grande inteligência oferecem funcionalidades mais potentes. Exemplo: só necessitam de atenção do CPU no início e fim da transferência Sincronização entre o CPU e os controladores Periféricos são muito mais lentos do que o CPU O CPU tem de interactuar com o periférico para saber se este já está disponível para receber novo comando, ou se já tem o dado pretendido Arquitectura de Computadores (2007/2008): Entradas/Saídas 640
Programação dos controladores de I/O Existem vários métodos para programar um controlador de I/O: Espera activa (programmed I/O ou polled I/O) Por interrupções (interrupt-driven I/O) DMA (Direct Memory Access) Canais (Channel I/O) Arquitectura de Computadores (2007/2008): Entradas/Saídas 641