# Calcolatori elettronici/I bus

Calcolatori elettronici
Copertina Tutti i moduli · Sviluppo
    CopertinaCalcolatori elettronici/Copertina
* L'evoluzione dei sistemi di elaborazioneCalcolatori elettronici/L'evoluzione dei sistemi di elaborazione
* Il progetto di circuiti logiciCalcolatori elettronici/Il progetto di circuiti logici
* I processoriCalcolatori elettronici/I processori
* Architettura 8086Calcolatori elettronici/Architettura 8086
* Unità di controlloCalcolatori elettronici/Unità di controllo
* Introduzione alle memorieCalcolatori elettronici/Introduzione alle memorie
* Le memorie ad accesso casualeCalcolatori elettronici/Le memorie ad accesso casuale
* Le memorie cacheCalcolatori elettronici/Le memorie cache
* Le memorie ad accesso serialeCalcolatori elettronici/Le memorie ad accesso seriale
* La memoria virtualeCalcolatori elettronici/La memoria virtuale
* La gestione dei dispositivi input/outputCalcolatori elettronici/La gestione dei dispositivi input/output
* Intel 8255Calcolatori elettronici/Intel 8255
* Intel 8259Calcolatori elettronici/Intel 8259
* I busCalcolatori elettronici/I bus
* Le architetture a pipelineCalcolatori elettronici/Le architetture a pipeline
* Assembler 8086
          IntroduzioneCalcolatori elettronici/Introduzione
   * Informazioni generaliCalcolatori elettronici/Informazioni generali
   * Istruzioni di trasferimento datiCalcolatori elettronici/Istruzioni di trasferimento dati
   * Istruzioni aritmeticheCalcolatori elettronici/Istruzioni aritmetiche
   * Istruzioni per il controllo del flussoCalcolatori elettronici/Istruzioni per il controllo del flusso
   * Istruzioni per la manipolazione dei bitCalcolatori elettronici/Istruzioni per la manipolazione dei bit
   * Le procedureCalcolatori elettronici/Le procedure
   * Istruzioni per il controllo del processoreCalcolatori elettronici/Istruzioni per il controllo del processore
   * Formato delle istruzioni macchina, tempi di esecuzioneCalcolatori elettronici/Formato delle istruzioni macchina, tempi di esecuzione
Modifica il sommario
Il bus è la struttura di interconnessione condivisa tra la CPU e il resto del sistema (memoria, periferiche). È composto da:
* bus di indirizzi: segnali di indirizzo
* bus dati: segnali di dato
* bus controllo: segnali di controllo
Solo un dispositivo per volta può scrivere sul bus; possono essere più di uno i dispositivi che leggono dal bus. Quando un dispositivo diventa il bus master (o master del bus), prende il controllo del bus e decide a ogni ciclo il tipo di operazione da effettuare (ad es. ciclo di lettura dalla memoria, ciclo di scrittura su un periferico, ciclo di Interrupt Acknowledge).

## Implementazione

* bus interno a un circuito integrato (ad es. il processore);
* pista a bordo di una scheda su cui sono montati più circuiti integrati;
* bus di backplane: può collegare più schede.
In un bus multiplexato le stesse linee portano a seconda dei momenti segnali di dato o di indirizzo → si risparmiano linee di bus, ma è necessaria una circuiteria per la connessione alla memoria e la velocità è minore rispetto ai bus non multiplexati.
Nelle architetture a bus multiplo, più bus sono organizzati gerarchicamente in base alla velocità e sono connessi tra loro attraverso dei processori di IO oppure dei bridge, che si occupano al momento opportuno di leggere il segnale dal bus di livello superiore e di restituirlo al bus di livello inferiore.
Da/su un bus condiviso possono leggere/scrivere più moduli. I bus dedicati sono impropriamente strutture di comunicazione tra due moduli. Il bus condiviso è più economico, ma ha prestazioni meno elevate rispetto al bus dedicato, perché non può supportare più di una comunicazione in contemporanea.

## Sincronizzazione
### Bus sincroni

Tutti i dispositivi collegati a un bus sincrono condividono un unico segnale di clock, e la frequenza di clock è imposta dal dispositivo più lento. È preferibile che non ci siano dei dispositivi troppo lenti o troppo lontani tra di loro o dalla sorgente di clock a causa dei ritardi fisici del segnale.
Ogni volta che un dispositivo slave non riesce a completare un'operazione sul bus entro il tempo prestabilito, il bus master deve aggiungere dei colpi di clock, chiamati cicli di wait, fino a quando il dispositivo non completa l'operazione e non attiva il segnale di ready. I cicli di wait devono essere però richiesti il meno possibile, ad esempio da dispositivi acceduti raramente o da memorie impegnate nel refreshing.

### Bus asincroni

La soluzione a bus asincrono non prevede un segnale di clock comune, ma ogni ciclo di bus è delimitato dai segnali di controllo strobe e acknowledge:
* strobe: il dispositivo sorgente comunica che il segnale è stato scritto sul bus;
* acknowledge: il dispositivo di destinazione comunica che ha terminato la lettura del segnale dal bus.
La durata del trasferimento dipende solo dalle velocità dei due dispositivi coinvolti. La soluzione sincrona è più complessa e costosa rispetto a quella asincrona perché sono necessari dei segnali di controllo e una logica che li piloti.

## Arbitraggio

Quando una risorsa è condivisa, serve un meccanismo di arbitraggio per gestire le situazioni di contesa:
* arbitraggio del bus: la CPU e il DMA Controller vogliono diventare bus master nello stesso momento, ma ad ogni istante un solo dispositivo può funzionare da master del bus;
* più processori voglio fare accesso in contemporanea a un disco fisso;
* più dispositivi vogliono effettuare una richiesta di interruzione al processore: Interrupt

### Arbitraggio distribuito

L'arbitraggio distribuito non prevede alcun arbitro. Nel caso del bus SCSI, ad esempio, ogni dispositivo che vuole essere promosso a bus master deve prima accertarsi che non esista un altro dispositivo a priorità più alta (cioè su una linea DB(i) con numero i maggiore) che a sua volta intende diventare il bus master.

### Arbitraggio centralizzato

L'arbitraggio centralizzato prevede un arbitro che decide chi promuovere a bus master per il prossimo ciclo di bus. Tutti i dispositivi sono collegati al segnale Bus Busy che indica se il bus è attualmente libero o occupato da un bus master.

#### Richieste indipendenti

Con il meccanismo delle richieste indipendenti ogni dispositivo è collegato all'arbitro tramite una coppia di segnali di controllo:
* Bus Request: il dispositivo richiede di essere promosso a bus master;
* Bus Grant (o Acknowledge): l'arbitro concede al dispositivo la promozione a bus master.
È una soluzione costosa perché servono molti segnali di controllo e un arbitro che implementi una strategia intelligente.

#### Daisy Chaining

Nel Daisy Chaining i vari segnali Bus Request delle unità sono collegati in wired-or. Quando arriva una richiesta il Bus Grant, segnale unico, inizia a scorrere nella catena delle unità alla ricerca di quella che ha fatto la richiesta:
* se l'unità corrente è quella che ha fatto la richiesta, essa attiva il Bus Busy e prende il controllo del bus;
* se l'unità corrente invece non ha fatto richiesta, passa il Bus Grant all'unità successiva.
È una soluzione semplice ed economica perché il numero dei segnali è indipendente dal numero di unità, ma presenta delle caratteristiche svantaggiose:
* poco flessibile: le priorità sono fisse, e l'ultimo dispositivo nella catena ha la priorità minima;
* lenta: il Bus Grant impiega un certo tempo a scorrere la catena;
* poco affidabile: se un'unità precedente nella catena smette di funzionare, la catena si interrompe.

#### Polling

La soluzione con polling differisce dal Daisy Chaining per il meccanismo del Bus Grant. Quando il bus si libera e almeno un'unità ha fatto la richiesta (tramite connessione wired-or), l'arbitro scandisce la catena interrogando i dispositivi uno alla volta, e si ferma al primo che risponde e attiva il Bus Busy. A ogni unità è associato un codice identificativo binario, che durante la scansione della catena viene fornito dall'arbitro su un'altra linea a cui sono collegate tutte le unità.

##### Vantaggi

* maggiore flessibilità all'interno dell'arbitro: cambiando l'ordine con cui l'arbitro scandisce i dispositivi è possibile implementare qualsiasi meccanismo di gestione delle priorità;
* maggiore tolleranza ai guasti: se un'unità si guasta le altre continuano a funzionare.