250px|thumb|Quatro slots de placa de barramento PCI Express (de cima para baixo: x4, x16, x1 e x16), em comparação com um slot de placa de barramento PCI convencional de 32 bits (muito inferior)

Na arquitetura de computadores, um barramento (forma abreviada do latim omnibus, e historicamente também chamado de data highway (estrada de dados) ou databus) é 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 (fios, fibra óptica, etc.) e software relacionados, incluindo protocolos de comunicação.

Os primeiros barramentos de computador eram fios elétricos paralelos com múltiplas conexões de hardware, mas o termo agora é usado para qualquer arranjo físico que forneça a mesma função lógica de um barramento elétrico paralelo. Os barramentos de computador modernos podem usar conexões paralelas e seriais de bits e podem ser conectados em uma topologia multidrop (paralelo elétrico) ou em cadeia, ou conectados por hubs comutados, como no caso do Universal Serial Bus (USB).

Background e nomenclatura Os sistemas de computador geralmente consistem em três partes principais: A unidade central de processamento (CPU) que processa dados, A memória que contém os programas e dados a serem processados, e Dispositivos de E/S (entrada/saída) como periféricos que se comunicam com o mundo exterior.

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.

É possível permitir que periféricos se comuniquem com a memória da mesma forma, anexando adaptadores, seja na placa-mãe ou na forma de placas de expansão, diretamente ao barramento do sistema. Isso geralmente é realizado através de algum tipo de conector elétrico padronizado, vários deles formando o barramento de expansão ou barramento local. No entanto, como as diferenças de desempenho entre a CPU e os periféricos variam amplamente, geralmente é necessária alguma solução para garantir que os periféricos não diminuam o desempenho geral do sistema. Muitas CPUs apresentam um segundo conjunto de pinos semelhantes aos de comunicação com a memória, mas capazes de operar em velocidades muito diferentes e usando protocolos diferentes (por exemplo, UART, SPI, e Ethernet). Outros usam controladores inteligentes para colocar os dados diretamente na memória, um conceito conhecido como acesso direto à memória. A maioria dos sistemas modernos combina ambas as soluções, quando apropriado.

À medida que o número de periféricos potenciais crescia, a utilização de uma placa de expansão para cada periférico tornou-se cada vez mais insustentável. Isto levou à introdução de sistemas de barramento projetados especificamente para suportar múltiplos periféricos. Exemplos comuns são as portas SATA em computadores modernos, que permitem a conexão de vários discos rígidos sem a necessidade de uma placa. No entanto, esses sistemas de alto desempenho são geralmente muito caros para serem implementados em dispositivos de baixo custo, como um mouse. Isto levou ao desenvolvimento paralelo de uma série de sistemas de barramento de baixo desempenho para essas soluções, sendo o exemplo mais comum o Universal Serial Bus (USB) padronizado. Todos esses exemplos podem ser chamados de barramentos periféricos, embora esta terminologia não seja universal.

Nos sistemas modernos, a diferença de desempenho entre a CPU e a memória principal cresceu tanto que quantidades crescentes de memória de alta velocidade são incorporadas diretamente na CPU, conhecida como cache. Nesses sistemas, as CPUs se comunicam usando barramentos de alto desempenho que operam em velocidades muito maiores que a memória, e se comunicam com a memória usando protocolos semelhantes aos usados ​​exclusivamente para periféricos no passado. Esses barramentos de sistema também são usados ​​para se comunicar com a maioria (ou todos) os outros periféricos, por meio de adaptadores, que por sua vez se comunicam com outros periféricos e controladores. Tais sistemas são arquitetonicamente mais semelhantes a multicomputadores, comunicando-se através de um barramento em vez de uma rede. Nestes casos, os barramentos de expansão são totalmente separados e não compartilham mais nenhuma arquitetura com sua CPU hospedeira (podendo de fato suportar muitas CPUs diferentes, como é o caso do PCI). O que anteriormente seria um barramento de sistema agora é conhecido como barramento frontal.

Dadas estas mudanças, os termos clássicos “sistema”, “expansão” e “periférico” já não têm as mesmas conotações. Outros sistemas de categorização comuns baseiam-se na função principal do barramento, conectando dispositivos interna ou externamente, PCI vs. SCSI, por exemplo. No entanto, muitos sistemas de barramento modernos comuns podem ser usados ​​para ambos; SATA e o eSATA associado são um exemplo de sistema que anteriormente seria descrito como interno, enquanto certas aplicações automotivas usam principalmente o IEEE 1394 externo de uma forma mais semelhante a um barramento de sistema. Outros exemplos, como InfiniBand e I²C, foram projetados desde o início para serem usados ​​tanto interna quanto externamente.

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.

Barramento de endereço 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.

Multiplexação de endereços 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.

Barramento de memória 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.

Detalhes de implementeção 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.