Calcolatori elettronici/I bus
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
[modifica | modifica sorgente]- 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
[modifica | modifica sorgente]Bus sincroni
[modifica | modifica sorgente]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
[modifica | modifica sorgente]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
[modifica | modifica sorgente]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
[modifica | modifica sorgente]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
[modifica | modifica sorgente]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
[modifica | modifica sorgente]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
[modifica | modifica sorgente]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
[modifica | modifica sorgente]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.