Il bus è un sistema di interconnessione condiviso che consente lo scambio di informazioni tra i componenti di un calcolatore (processore, memoria, periferiche). Si articola logicamente in tre sottosistemi:
- bus dati: trasporta i dati veri e propri; la sua larghezza (8, 16, 32, 64 bit) determina la quantità di informazione trasferibile in un singolo ciclo;
- bus indirizzi: specifica la locazione di memoria o la periferica destinataria; con linee di indirizzo si possono indirizzare locazioni;
- bus di controllo: veicola i segnali di sincronizzazione (clock, read/write, interrupt, bus request/grant).
La banda (throughput) massima teorica di un bus sincrono è:
dove è la frequenza di clock del bus e la larghezza in byte.
Le architetture moderne adottano topologie gerarchiche per superare i limiti del bus condiviso classico: i bus ad alta velocità (PCIe) collegano il processore a GPU e storage NVMe con collegamenti punto-punto seriali, mentre i bus più lenti (USB, I²C, SPI) gestiscono le periferiche a bassa banda.
Il passaggio dal bus parallelo (PCI, ATA) al bus seriale (PCIe, SATA) ha permesso di aumentare le frequenze di clock eliminando i problemi di disallineamento temporale (skew) tra le linee parallele.