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. E’ 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.