Il bus non sono altro che le connessioni di una CPU.
Abbiamo:
Più precisamente il bus è l'insieme di linee elettriche che collegano i moduli di un elaboratore.
Ci sono vari tipi di bus:
Possono essere considerati tutti bus in quanto le funzionalità ed i problemi da affrontare sono gli stessi.
Un bus è costituito da un fascio di collegamenti elettrici.
In genere tale fascio viene rappresentato con una freccia larga per indicare che le linee contenute hanno funzionalità distinte.
Affinché i moduli connessi dal bus siano in grado di comunicare è necessario che essi interagiscano con il bus secondo un insieme di regole ben definite. Tali regole sono raccolte in un protocollo del bus.
Le linee del bus possono essere linee di dati, di indirizzo e di controllo:
I dispositivi hanno connessioni diverse a seconda della loro natura.
I dispositivi collegati ad un bus si dividono in:
Analizziamoli uno alla volta.
In questo caso la CPU può indirizzare
Il numero delle linee utilizzate per traferire gli indirizzi determinano la massima quantità della memoria indirizzabile.
Il numero delle linee utilizzate per il trasferimento di dati determinano la quantità di informazioni che è possibile trasferire con una singola operazione.
Bus larghi sono più costosi di quelli stretti, ma offrono banda più larga e dunque maggiore velocità di trasferimento.
Maggiore velocità si ottiene o aumentando la larghezza del bus (più bit per trasferimento) o diminuendo il ciclo di bus (più trasferimenti al secondo).
Per ovviare ai problemi dati da bus molto larghi talvolta si opta per un multiplexed bus: le linee utilizzate per il trasferimento dei dati e degli indirizzi sono le stesse, prima si trasmettono gli indirizzi, poi i dati. Tale bus è più lento.
Possiamo distinguere:
Non illustriamo nel dettaglio il funzionamento di tali bus, ma diamo solo un infarinatura di come essi funzionano.
La lettera grega
La durata delle fasi del clock (salita, discesa, fronti) è nota ad entrambi i partecipanti e l'unica incognita è l'inizio della comunicazione. L'inizio della comunicazione è dato dalla linea MREQ.
Vediamo un ciclo di lettura con questo tipo di bus.
In questo caso avviene un trasferimento di dati tra CPU e memoria, la CPU è il dispositivo attivo, mentre la memoria è quello passivo.
Come si vede dall'immagine la durata di una operazione può essere più lunga di un singolo ciclo di clock (nell'immagine sono tre).
La CPU mette l'indirizzo sul bus, dopo un certo tempo esso si stabilizza (in tempo
A linee di controllo stabili la CPU abilita i segnali di richiesta di inizio comunicazione (MREQ) e il segnale di lettura (RD). Questo avviene nel ciclo di clock
Per avvertire la CPU di non aspettare i dati, all'inizio del ciclo
La memoria mette i dati sulla linea dati
La CPU legge i dati e disattiva i segnali di richiesta e di lettura.
Il bus sincrono deve adattarsi al dispositivo più lento.
All'inizio funziona come prima:
Si noti che in questo caso non è necessario un clock globale noto a tutti i dispositivi che condividono il bus.
Questo appena descritto è un protocollo di handshake.
In caso di bus asincroni è necessario che i device conoscano il protocollo con cui devono comunicare il loro stato sul bus. Questo non è necessario nei bus sincroni (più semplice) da implementare, in cui la "prontezza" dei device nel bus avviene in base al clock. I bus sincroni impiegano il tempo necessario al dispositivo più lento per portare una certa informazione sul bus. I bus asincroni fanno risparmiare più tempo in questo contesto.
Inoltre, come abbiamo detto all'inizio, le linee di bus possono essere condivise tra più dispositivi il che ci porta ad aver bisogno un arbitro del bus.
Ci sono bus paralleli e seriali.
I bus paralleli inviano bit in modo parallelo (quindi inviano più bit alla volta).
I bus seriali inviano un bit alla volta (USB, USB 2.0, PCI EXPRESS).