Introduzione
In un calcolatore la comunicazione tra
i vari dispositivi avviene attraverso il bus di sistema1.
Dato che tutti i dispositivi sono collegati al bus2
è necessario
un meccanismo in grado di controllarne l'accesso. Il motivo
è facilmente intuibile: se non vi fosse alcun controllo ogni
periferica che volesse comunicare potrebbe cercare di forzare sulle
linee del bus un proprio indirizzo, e se questo fosse compiuto
contemporaneamente da tutti, si otterrebbe un sistema totalmente
instabile. Così come quando più persone cercano
di parlare tutte nello stesso istante e ciò che dicono
diventa incomprensibile. È quindi necessario qualcuno in
grado di coordinare e dare l'autorizzazione a parlare, o
devono essere loro stessi ad autodisciplinarsi seguendo delle regole
che devono essere rispettate da tutti.
Quando la cpu o una periferica ottiene l'accesso al bus,
questa assumerà il ruolo di master. Un master
può
aver bisogno ad esempio di leggere dei dati in memoria, la quale, in
queste condizioni, svolgerà il ruolo di slave. Questi stati
possono essere assunti dalla maggior parte dei dispositivi che
opportunamente si comporteranno da master o da slave. Una eccezione
è fatta dalla memoria che può avere solo il ruolo
di slave.
La presenza su un bus di più dispositivi master richiede
quindi l'intervento di un meccanismo in grado di regolare
l'accesso al bus stesso, nonché di evitare
situazioni indesiderate quali: attese indefinite (starvation) o
paralisi del sistema (dead-lock).
Tale meccanismo può essere centralizzato o decentralizzato.
In un sistema centralizzato un circuito detto arbitro, accetta su linee
dedicate le richieste da parte dei master stabilendo a quale concedere
l'autorizzazione (grant)
all'utilizzo del bus.
Una struttura decentralizzata non richiede la presenza di un arbitro.
L'assegnazione del master avviene mediante un protocollo
distribuito, cioè
per mezzo di una logica posseduta da tutti i dispositivi e attraverso
la quale concorrono al bus stabilendo l'ordine di accesso in base al
proprio livello priorità.
La scelta avviene quindi sulla base di un livello di priorità
pre-assegnato ma deve anche soddisfare un’importante proprietà di
equità (fairness): ogni dispositivo deve poter accedere al bus.
Sono anche possibili arbitraggi misti, in cui i master si accordano tra
loro con una tecnica autoselettiva, ma la gestione del bus viene
comunque demandata a un controllo centralizzato3
.
Un'ulteriore classificazione dipende dal modo in cui i
dispositivi sono connessi rispetto al bus. Gli schemi possibili sono
due: un collegamento a festone (daisy
chaining) in cui i dispositivi
sono collegati in serie, oppure un collegamento in parallelo.
In fase di progettazione la scelta dello schema di arbitraggio
più idoneo dipende da diversi fattori, tra cui il livello di
espandibilità che deve essere garantito dal bus in termini
di numero di dispositivi e di lunghezza del bus, la velocità
richiesta per l'arbitraggio, ed il grado di fairness voluto.
Quello di fairness è un concetto fondamentale nella teoria
dell'arbitraggio del bus.
Lo scopo principale dell'implementazione di un buon algoritmo
di arbitraggio è
quello di evitare situazione di deadlock dovute alle lunghe attese dei
dispositivi per accedere al bus. Soddisfare la proprietà di
fairness significa
quindi garantire l'accesso al bus ad ogni potenziale master
che ne fa richiesta
indipendentemente dalle altre richieste. È una politica che
assicura che i master ad alta priorità non abbiano il
controllo totale del
bus a discapito di quelli a priorità minore anche nel caso
in cui i primi
facciano continue richieste. Questo però, non significa che
a tutti i
dispositivi deve essere garantito un uguale numero di accessi al bus.
L'acquisizione
del bus da parte di un dispositivo e quindi il suo grado di
priorità
dipenderà dalle sue caratteristiche e dal suo bisogno di
accedere al bus per poter operare in modo
ottimale.
Quando parleremo del bus PCI sarà presentato un esempio in
grado di far comprendere meglio questo concetto.
Faremo una panoramica dei diversi sistemi di arbitraggio del bus
analizzandone, per ogni tipologia, uno realmente implementato, cercando
di mettere in evidenza quali sono i pro e i contro di ciascuno tipo di
schema.
Infine proveremo a capire quale sarà il destino del bus e
delle tecniche di arbitraggio dal momento che l'attuale
architettura dei calcolatori sta per essere profondamente modificata.