# Bus (informatica)

Il bus (da una contrazione del latino omnibus), in elettronica e informatica, è un canale di comunicazione che permette a periferiche e componenti di un sistema elettronico - come ad esempio un computer - di interfacciarsi tra loro scambiandosi informazioni o dati di vario tipo attraverso la trasmissione e la ricezione di segnali.

## Caratteristiche

Diversamente dalle connessioni punto-punto, un solo bus può collegare tra loro più dispositivi. In pratica è il canale di trasferimento con cui colloquiano le componenti di un elaboratore elettronico. Le connessioni elettriche del bus possono essere realizzate direttamente su circuito stampato oppure tramite un apposito cavo. Ciò nonostante, i bus possono essere di due tipi: seriale oppure parallelo. Un bus è di tipo parallelo quando adotta una trasmissione parallela. Sono di questo tipo i bus ISA, PCI e AGP. Un bus è invece seriale se adotta una trasmissione seriale. Esempi di bus seriali sono: SPI, I²C, SATA, PCI Express, USB, LonWorks, Konnex, PROFIBUS, CAN, LIN.
Principalmente esistono due tipologie di bus in un elaboratore elettronico: il bus interno o FSB (front side bus), e i bus esterni (bus di espansione, USB, etc.). Ci possono poi essere delle varianti ibride, come le porte eSATA con prese esterne.
Il progredire della tecnologia sembra preferire la trasmissione seriale a quella parallela, parzialmente caduta in disuso sui bus esterni, che talvolta soffre di maggiori ingombri e spesso anche di maggiori costi, mentre nei bus interni è ampiamente impiegata, per esempio nel bus PCI Express 4.0, che utilizza uno schema ibrido con un parallelismo di 128 bit (128 linee solo per i dati principali). A livello di connessione e contando le linee di gestione e di alimentazione il totale aumenta, cosicché già una PCI Express da x16 ha 82 pin.

### Principi di funzionamento

In ogni transazione sul bus:
* un dispositivo prende il controllo del bus;
* invia una richiesta (I/O) a un secondo dispositivo;
* svolta la richiesta, il bus viene liberato per un'altra comunicazione
Il ruolo di un dispositivo può cambiare nel tempo; un dispositivo può comportarsi da master o da slave in contesti differenti. Lo standard che definisce il bus deve fornire le regole per gestire tali condizioni o vietarle.
Esistono due diversi meccanismi di temporizzazione dei segnali:
* Protocollo sincrono: è previsto un segnale di sincronizzazione (clock) che permette di gestire la temporizzazione delle comunicazioni.
* Protocollo asincrono: tutta la temporizzazione della comunicazione è gestita dal protocollo stesso attraverso lo scambio dei messaggi.
La scelta dipende da:
* Interfaccia del dispositivo;
* adattare interfacce con differenti velocità;
* tempo totale richiesto per il trasferimento;
* possibilità di rilevare errori;
* Uno schema completamente asincrono è affidabile e flessibile ma le interfacce e la logica di controllo sono molto più complicate da realizzare.
Si sente spesso parlare in ambito hardware della velocità (larghezza di banda) del FSB, acronimo che sta per Front Side Bus e identifica il bus interno della scheda madre del caso specifico dell'architettura Intel, che designava l'interconnessione fra ALU o CPU con il northbridge, o gli hub con interfaccia di gestione per la RAM, in contrapposizione con il BSB (backside bus) che connette la CPU alla cache L2 a frequenza massima (cioè alla stessa velocità di lavoro della CPU). L'FSB è stato sostituito dall'HyperTransport mutuata da PowerPC G5 e poi dagli AMD ai socket Intel-based, ma anche dal canale DMI e dai sistemi UPI, CSI e QPI. In linea generale si può intendere con FSB il canale che connette la CPU alla RAM a una frequenza superiore agli altri bus delle mainboard e rispetto ai bus esterni e di interconnessione. In AMD si usano anche le equivalenti tecnologie LDT.

### Modalità di connessione

* A stella, in cui ogni nodo della rete è collegato agli altri passando per uno o più concentratori, detti hub, ed esiste un solo percorso che colleghi un nodo a un altro. Ogni nodo ha un solo ramo, collegato a un hub, mentre gli hub hanno almeno due rami di connessione verso altri nodi e altri hub.
* Daisy-chain, in cui i nodi sono collegati uno di seguito all'altro, e quindi ogni nodo ha due rami (connessioni) con l'eccezione dei 2 nodi posti alle estremità.
* Ring, simile alla rete daisy-chain in cui i punti estremi sono anch'essi connessi fra loro, creando quindi un anello.

## Bus di sistema

Il bus di sistema, presente in tutti i microcalcolatori, è composto da una o più piste in rame sulla scheda madre (di solito da 4 a centinaia, a seconda della tipologia di computer e dell'implementazione della SoC o della mother board) ed è dotato di connettori separati a intervalli regolari per l'innesto dei moduli di memoria e di I/O. Si tratta di una serie di connessioni elettriche ognuna delle quali può trasmettere cifre binarie (0 o 1) in successione, l'insieme delle quali (che può essere o meno interpretato come un valore numerico) è interpretato dai vari componenti del sistema secondo protocolli prestabiliti. Un bus che collega due componenti appartenenti alla stessa scheda integrata è detto bus interno (internal bus) (di solito proprietario), se collega due componenti generici è detto bus esterno (external bus). Se c'è un solo bus esterno è detto bus di sistema (system bus).
Il bus di sistema si divide in tre bus minori:
* bus dati
* bus indirizzi
* bus controllo
Il motivo per cui gli elaboratori dispongono in genere di un solo bus è semplice: l'architettura a più bus, proposta teoricamente agli albori dell'informatica dall'architettura Harvard nel 1943, non è praticamente realizzabile, visto l'altissimo numero di connessioni che sarebbero necessarie.

### Bus dati per tutti i tipi

È il bus sul quale transitano le informazioni. È usufruibile da tutti i componenti del sistema, sia in scrittura sia in lettura. È bidirezionale (permette il passaggio dati in più direzioni contemporaneamente).

### Bus indirizzi

È il bus (unidirezionale) attraverso il quale la CPU decide in quale indirizzo andare a scrivere o a leggere informazioni; sia le celle di memoria (RAM) sia le periferiche di I/O (Input/Output) sono infatti divise in zone e porte, ognuna delle quali ha un dato indirizzo. La memoria viene usualmente suddivisa in segmenti, offset, pagine, e locazioni interne o inter-pagina. Dopo aver comunicato l'indirizzo tramite questo bus, la scrittura o lettura avviene normalmente tramite il bus dati. Il bus indirizzi è fruibile in scrittura dalla CPU e anche in lettura dagli altri componenti, mediante l'utilizzo del DMA controllato solo parzialmente dalla CPU e poi dalla DMAC (controller DMA) anche in modo bidirezionale, per dare accesso a dischi, schede grafiche ed eventuali altre risorse.
Tali caratteristiche possono essere accompagnate dalla presenza di un supporto in parallelo per la paginazione della RAM, che tipicamente consta di una o più unità MMU per paging o per sistema ibrido a segmentazione e paging.

### Bus controllo

Il bus controllo è un insieme di collegamenti il cui scopo è coordinare le attività del sistema; tramite esso, la CPU può decidere quale componente deve scrivere sul bus dati in un determinato momento, quale indirizzo leggere sul bus indirizzi, quali celle di memoria devono essere scritte e quali invece lette, etc. Infatti la memoria e tutti gli altri componenti comunicano con la CPU attraverso un unico bus condiviso; questo significa che senza un controllo da parte della CPU si verrebbero a creare dei conflitti e delle collisioni.
Per agevolare e rendere efficienti i vari processi sui bus, di norma, almeno su computer abbastanza recenti (in passato non era una regola fissa), vengono utilizzati meccanismi di controllo supplementari, quali interrupt hardware (IRQ, ma non NMI, che hanno diversa funzione) e software (int xx, syscall), e soprattutto firmware e device di controllo quali il DMA (Direct Memory Access), gli schemi PIO, la gestione dei PIC in cascata.

## Bus di dati

Il bus dati viene utilizzato per lo scambio di informazioni tra i vari dispositivi. È bidirezionale in quanto l'invio dei dati non è di sola appartenenza alla CPU e si divide:
ISA (Industry Standard Architecture Bus)
Evoluzione dei bus PC bus e PC/AT bus utilizzati nei primi PC (8086, 80286). Sviluppato da un consorzio in contrapposizione all'IBM Microchannel.
Contiene 64 + 36 linee:
* 20 + 4 linee indirizzi
* 8 + 8 linee dati
Sincrono con clock a 8,33 MHz. Estensione a 32 bit: EISA
Zorro
Bus di espansione sviluppato per i computer Amiga prodotti dalla Commodore. Esistono tre versioni di questo bus, le prime due erano a 16 bit, la terza era a 32 bit. Questo bus è stato fornito nativamente della capacità Plug and Play fin dalla prima versione risalente al 1985. È un bus parallelo che lavora in modo sincrono ma nella terza revisione poteva lavorare anche in modo asincrono rendendo le comunicazioni più efficienti ma nel contempo rendendo le schede di espansione più costose e difficili da progettare.
PCI (Peripheral Component Interconnect Bus)
Bus di sistema PC, (ma anche Apple, Sun), sviluppato dalla Intel nel 1992 (in sostituzione del bus ISA). Esiste in diverse versioni: PCI, PCI 2.0, PCI 2.1, PCI 2.2, PCI-X, PCI-X DDR. 32 – 64, PCI-E linee dati-indirizzi (sovrapposte) (multiplexed) Clock a 33 – 66 – 133 – 266 MHz. Alimentazione 5 – 3,3 Volt. Il trasferimento che avviene attraverso un bus PCI è un "burst", composto da una fase di indirizzamento e da una o più fasi di dato, con bassa latenza ed elevato throughput(velocità effettiva).
USB (Universal Serial Bus)
Bus per il collegamento di periferiche (lente), sviluppato nel 1995 da un consorzio: (Compaq, HP, Intel, Lucent, Microsoft, Nec, Philips). Caratteristiche: flessibilità, semplicità; un unico bus per molte periferiche; non sono necessari dispositivi di controllo e porte dedicate; facilmente espandibile; economico e con possibilità di connessione a caldo; supporto dispositivi tempo reale (audio - telefono).
Il cavo è composto da 4 fili: massa, alimentazione (5V), Dati+, Dati-.
Frequenza:
* USB 1.0: 1,5 Mbit/s;
* USB 1.1: 12 Mbit/s;
* USB 2.0: 480 Mbit/s;
* USB 3.0: 4,8 Gbit/s.
SCSI (Small Computer System Interface)
Collegamento per dispositivi interni o esterni al computer: dischi rigidi (dischi SCSI), ma anche CD - DVD – unità nastro - stampanti - scanner.
* versioni: SASI ('79), SCSI-1, SCSI-2, Fast SCSI-2, Fast & wide SCSI-2, SCSI-3 Ultra.
* frequenze: 5 – 10 – 20 – 40 – 80 – 160 MHz
* linee di dati: 8 - 16 line
* banda passante 5 - 320 MB/sec
Collega sino a 7- 15 controllori (unità) e massimo 2048 periferiche per controllore. Collegamento a cascata, con terminatore. Semplice ed economico. Parte della logica delegata ai controllori. 50 fili - 25 di massa per eliminare disturbi (8 dati — 1 parità — 9 controllo — 7 alimentazione e usi futuri). Asincrono: con protocollo di hand-shake. Arbitraggio decentralizzato: utilizzo linee dati, priorità prestabilita. Il bus SCSI è un bus parallelo, mentre una sua estensione, il Serial Attached SCSI (SAS), è di tipo seriale.
FireWire (IEEE 1394)
Ha molte similitudini con l'USB: bus seriale con alimentazione (60 W), sviluppato da un consorzio di aziende (1984 - Apple, 1995 Standard, ma con Royalties); possibilità di connessione a caldo, meccanismi di identificazione, struttura ad albero.
Differenze fra FireWire e USB:
* Maggiori prestazioni e costi: destinato a periferiche veloci.
* Differenze nei protocolli: le comunicazioni non incominciano necessariamente dal Root.
* Non necessita di un calcolatore (Root Hub) di riferimento.
* Alcuni protocolli sono simili a quelli del bus SCSI.
La porta FireWire ha due tipi di standard che differiscono tra loro essenzialmente nella velocità e nel numero di conduttori pin di trasporto dati. Questi standard, stabiliti dall'Institute of Electrical and Electronic Engineer (IEEE), sono la IEEE 1394a e la IEEE 1394b.
L'IEEE 1394a può avere da 4 a 6 conduttori e una velocità di comunicazione non superiore a 400 Mbit/s.
L'IEEE 1394b può avere 9 conduttori e una velocità di comunicazione non superiore a 800 Mbit/s.
È importante sapere che entrambi i cavi non possono avere lunghezza superiore a 4,5 m
Low Pin Count
È un bus interno ideato da Intel per evitare di usare l'obsoleto ISA per collegare il chip southbridge al Super I/O nelle schede madri e ridurre così sia il numero di piedini impiegati (da cui il nome) che il numero di piste di rame nel circuito stampato.
PCI-X
Il PCI-X è un'evoluzione del PCI. È stata sviluppata dallo stesso consorzio che sviluppò il PCI e fornisce una larghezza di banda fino a 4 GByte. Pur avendo prestazioni molto più elevate del PCI è retrocompatibile con le periferiche PCI e quindi permette il riutilizzo delle schede PCI.
PCI Express
Il PCI Express è il successore (seriale) del bus di espansione PCI (parallelo) e ha sostituito il bus AGP precedentemente in uso per le schede grafiche.
Chiamato PCI-Express, è in genere abbreviato in PCIe o PCIx (da non confondere con PCI-X che si trova in molte schede madri attualmente in commercio). L'architettura è completamente differente dal bus PCI classico.
La sua caratteristica seriale aiuta a semplificare il layout del PCB delle schede madri ed è costituito da una serie di canali. Tali canali possono essere aggregati secondo le esigenze rendendo di fatto il sistema molto flessibile. La banda a disposizione di ciascun canale (FULL DUPLEX) è dedicata e quindi non condivisa con gli altri.
Un canale PCIe (detto x1) ha una banda disponibile di 266 MB/s. Pertanto, nelle moderne schede video che utilizzano 16 canali PCIe la banda a disposizione è di circa 4 GB/s (il doppio del bus AGP 8x).