Barramento (computação)
Na arquitetura de computadores, um barramento é um sistema de comunicação que transfere dados entre componentes dentro de um computador, ou entre computadores. Esta expressão abrange todos os componentes de hardware e software relacionados, incluindo protocolos de comunicação.
Os sistemas de computador geralmente consistem em três partes principais: Um computador antigo pode conter uma CPU de tubos de vácuo conectada manualmente, um tambor magnético para a memória principal e uma fita perfurada e uma impressora para leitura e gravação de dados, respectivamente. Um sistema moderno pode ter uma CPU multi-core, DDR4 SDRAM para memória, uma unidade de estado sólido para armazenamento secundário, uma placa gráfica e LCD como sistema de exibição, um mouse e teclado para interação e uma conexão Wi-Fi para rede. Em ambos os exemplos, barramentos de computador de uma forma ou de outra movem dados entre todos esses dispositivos. Na maioria das arquiteturas de computadores tradicionais, a CPU e a memória principal tendem a ser fortemente acopladas. Convencionalmente, um microprocessador é um único chip que possui várias conexões elétricas em seus pinos que podem ser usadas para selecionar um "endereço" na memória principal e outro conjunto de pinos para ler e gravar os dados armazenados naquele local. Na maioria dos casos, a CPU e a memória compartilham características de sinalização e operam em sincronia. O barramento que conecta a CPU e a memória é uma das características que definem o sistema e geralmente é chamado simplesmente de barramento do sistema.
Barramento interno
O barramento interno, também conhecido como barramento de dados interno, barramento de memória, barramento de sistema ou barramento frontal, conecta todos os componentes internos de um computador, como CPU e memória, à placa-mãe. Os barramentos de dados internos também são chamados de barramentos locais, porque se destinam à conexão com dispositivos locais. Esse barramento é normalmente bastante rápido e independente do restante das operações do computador.
Barramento externo
O barramento externo, ou barramento de expansão, é composto pelos caminhos eletrônicos que conectam os diversos dispositivos externos, como impressora etc., ao computador.
Um barramento de endereço é um barramento usado para especificar um endereço físico. Quando um processador ou dispositivo habilitado para DMA precisa ler ou escrever em um local de memória, ele especifica esse local de memória no barramento de endereço (o valor a ser lido ou escrito é enviado no barramento de dados). A largura do barramento de endereços determina a quantidade de memória que um sistema pode endereçar. Por exemplo, um sistema com um barramento de endereços de 32 bits pode endereçar 2 32 (4.294.967.296) locais de memória. Se cada local de memória contiver um byte, o espaço de memória endereçável será de 4 GiB.
Os primeiros processadores usavam um fio para cada bit da largura do endereço. Por exemplo, um barramento de endereços de 16 bits tinha 16 fios físicos constituindo o barramento. À medida que os barramentos se tornaram mais largos e mais longos, esta abordagem tornou-se cara em termos do número de pinos do chip e traços da placa. Começando com a DRAM Mostek 4096, a multiplexação de endereços implementada com multiplexadores tornou-se comum. Num esquema de endereço multiplexado, o endereço é enviado em duas partes iguais em ciclos de barramento alternados. Isso reduz pela metade o número de sinais do barramento de endereço necessários para conectar-se à memória. Por exemplo, um barramento de endereços de 32 bits pode ser implementado usando 16 linhas e enviando a primeira metade do endereço de memória, imediatamente seguida pela segunda metade do endereço de memória. Normalmente, dois pinos adicionais no barramento de controle - um estroboscópio de endereço de linha (RAS) e um estroboscópio de endereço de coluna (CAS) - são usados para informar à DRAM se o barramento de endereço está enviando atualmente a primeira metade do endereço de memória ou A segunda parte.
Implementação
Acessar um byte individual frequentemente requer a leitura ou gravação de toda a largura do barramento (uma palavra) de uma só vez. Nestes casos, os bits menos significativos do barramento de endereços podem nem mesmo ser implementados - em vez disso, é responsabilidade do dispositivo de controle isolar o byte individual necessário da palavra completa transmitida. É o caso, por exemplo, do barramento local VESA que carece dos dois bits menos significativos, limitando este barramento a transferências alinhadas de 32 bits. Historicamente, também houve alguns exemplos de computadores que só eram capazes de endereçar palavras – máquinas de palavras.
O barramento de memória é o barramento que conecta a memória principal ao controlador de memória em sistemas de computador. Originalmente, barramentos de uso geral como o VMEbus e o barramento S-100 eram usados, mas para reduzir a latência, os barramentos de memória modernos são projetados para se conectarem diretamente aos chips DRAM, e assim são projetados por órgãos de padronização de chips como o JEDEC. Exemplos são as diversas gerações de SDRAM, e barramentos seriais ponto a ponto como SLDRAM e RDRAM. Uma exceção é o DIMM Fully Buffered que, apesar de ter sido cuidadosamente projetado para minimizar o efeito, tem sido criticado por sua maior latência.
Os barramentos podem ser barramentos paralelos, que transportam palavras de dados em paralelo em vários fios, ou barramentos seriais, que transportam dados na forma serial de bits. A adição de conexões extras de alimentação e controle, drivers diferenciais e conexões de dados em cada direção geralmente significa que a maioria dos barramentos seriais tem mais condutores do que o mínimo usado em 1-Wire e UNI/O. À medida que as taxas de dados aumentam, os problemas de distorção de tempo, consumo de energia, interferência eletromagnética e diafonia em barramentos paralelos tornam-se cada vez mais difíceis de contornar. Uma solução parcial para este problema tem sido bombear duas vezes o barramento. Frequentemente, um barramento serial pode operar com taxas de dados gerais mais altas do que um barramento paralelo, apesar de ter menos conexões elétricas, porque um barramento serial inerentemente não tem distorção de tempo ou diafonia. USB, FireWire e Serial ATA são exemplos disso. As conexões multiponto não funcionam bem para barramentos seriais rápidos, portanto, a maioria dos barramentos seriais modernos usa designs de conexão em série ou hub.
Multiplexação de barramento
O barramento do sistema mais simples possui linhas de dados de entrada, linhas de dados de saída e linhas de endereço completamente separadas. Para reduzir custos, a maioria dos microcomputadores possui um barramento de dados bidirecional, reutilizando os mesmos fios para entrada e saída em momentos diferentes. Alguns processadores usam um fio dedicado para cada bit do barramento de endereço, barramento de dados e barramento de controle. Por exemplo, o STEbus de 64 pinos é composto por 8 fios físicos dedicados ao barramento de dados de 8 bits, 20 fios físicos dedicados ao barramento de endereços de 20 bits, 21 fios físicos dedicados ao barramento de controle e 15 fios físicos dedicados a vários barramentos de energia.
Com o tempo, vários grupos de pessoas trabalharam em vários padrões de barramento de computador, incluindo o IEEE Bus Architecture Standards Committee (BASC), o grupo de estudo "Superbus" do IEEE, a iniciativa de microprocessador aberto (OMI), a iniciativa de microsistemas abertos (OMI), o "Gang of Nine" que desenvolveu o EISA, etc.[carece de fontes?]
Primeira geração
Os primeiros barramentos de computador eram feixes de fios que conectavam a memória e os periféricos do computador. Curiosamente chamados de "tronco de dígitos" no antigo computador CSIRAC australiano, eles receberam o nome de barramentos de energia elétrica, ou barramentos. Quase sempre havia um barramento para memória e um ou mais barramentos separados para periféricos. Estes foram acessados por instruções separadas, com tempos e protocolos completamente diferentes. Uma das primeiras complicações foi o uso de interrupções. Os primeiros programas de computador executavam E/S aguardando em loop até que o periférico ficasse pronto. Isso foi uma perda de tempo para programas que tinham outras tarefas a realizar. Além disso, se o programa tentar executar essas outras tarefas, poderá demorar muito para que o programa verifique novamente, resultando em perda de dados. Os engenheiros fizeram com que os periféricos interrompessem a CPU. As interrupções tiveram que ser priorizadas, porque a CPU só pode executar código para um periférico por vez, e alguns dispositivos são mais críticos em termos de tempo do que outros.
Minis e micros
A Digital Equipment Corporation (DEC) reduziu ainda mais o custo dos minicomputadores produzidos em massa e mapeou periféricos no barramento de memória, de modo que os dispositivos de entrada e saída pareciam ser locais de memória. Isso foi implementado no Unibus do PDP-11 por volta de 1969. Os primeiros sistemas de barramento de microcomputadores eram essencialmente um backplane passivo conectado diretamente ou através de amplificadores de buffer aos pinos da CPU. Memória e outros dispositivos seriam adicionados ao barramento usando o mesmo endereço e pinos de dados usados pela própria CPU, conectados em paralelo. A comunicação era controlada pela CPU, que lia e escrevia os dados dos dispositivos como se fossem blocos de memória, utilizando as mesmas instruções, todas cronometradas por um relógio central que controlava a velocidade da CPU. Ainda assim, os dispositivos interromperam a CPU sinalizando em pinos separados da CPU.
Segunda geração
Sistemas de barramento de “segunda geração”, como o NuBus, resolveram alguns desses problemas. Eles normalmente separavam o computador em dois “mundos”, a CPU e a memória de um lado e os vários dispositivos do outro. Um controlador de barramento aceitava que dados do lado da CPU fossem movidos para o lado dos periféricos, transferindo assim a carga do protocolo de comunicação da própria CPU. Isso permitiu que o lado da CPU e da memória evoluísse separadamente do barramento do dispositivo, ou apenas "barramento". Os dispositivos no barramento poderiam se comunicar entre si sem intervenção da CPU. Isso levou a um desempenho muito melhor no "mundo real", mas também exigiu que os cartões fossem muito mais complexos. Esses barramentos também frequentemente abordavam problemas de velocidade por serem "maiores" em termos de tamanho do caminho de dados, passando de barramentos paralelos de 8 bits na primeira geração para 16 ou 32 bits na segunda, além de adicionar configuração de software (agora padronizado como Plug-n-play) para suplantar ou substituir os jumpers.
Terceira geração
Os barramentos de "terceira geração" têm surgido no mercado desde cerca de 2001, incluindo HyperTransport e InfiniBand. Eles também tendem a ser muito flexíveis em termos de conexões físicas, permitindo que sejam utilizados tanto como barramentos internos, quanto para conectar diferentes máquinas entre si. Isso pode levar a problemas complexos ao tentar atender a diferentes solicitações; portanto, grande parte do trabalho nesses sistemas diz respeito ao design de software, e não ao hardware em si. Em geral, esses barramentos de terceira geração tendem a se parecer mais com uma rede do que com o conceito original de barramento, com uma sobrecarga de protocolo mais alta necessária do que os sistemas anteriores, ao mesmo tempo que permitem que vários dispositivos usem o barramento ao mesmo tempo.
Serial
Muitos barramentos de campo são barramentos de dados seriais (não devem ser confundidos com a seção paralela de "barramento de dados" de um barramento de sistema ou placa de expansão), vários dos quais usam as características elétricas RS-485 e então especificam seu próprio protocolo e conector:


