Arbitraggio
distribuito parallelo.
Un’ultima
modalità di arbitraggio del bus che sarà
analizzata è quella decentralizzata in cui i dispositivi
sono disposti in uno schema parallelo.
Questa tecnica
è usata da molti bus di uso industriale come il Multibus II
o il Futurebus ma è stata utilizzata anche su PC che
utilizzano il NuBus di Apple o il Microchannel di IBM, ed è
anche utilizzata sul bus SCSI. Uno dei vantaggi è quello che
permette di usare un numero maggiore di master senza particolari
complicazioni e non ha i limiti di velocità presenti in una
struttura daisy chain.
L’assenza
dell’arbitro presuppone che i singoli master decidano
autonomamente, in base al grado di priorità loro assegnato,
chi ha il diritto di accedere al bus. Ciò ovviamente
comporta una maggiore complessità nella logica di controllo
presente su ogni periferica.
L’arbitraggio è basato su un meccanismo di
autoselezione codificata: ogni potenziale master immette il proprio
codice sul bus, il livello logico di ogni master candidato legge il
valore sul bus e modifica il valore che sta immettendo secondo un
protocollo distribuito. Alla fine il dispositivo a più alta
priorità trova che il suo codice è uguale alla
configurazione assunta dal bus, e quindi può iniziare a
pilotare il bus.
Per comprendere come
avviene la fase di arbitraggio ci riferiremo al bus Nubus10
, ma i
concetti esposti valgono anche per altri tipi di bus.
Nel Nubus ogni
master possiede un ID unico fissato, assegnato tramite un
indirizzamento geografico, cioè in base allo slot che la
periferiche occupa, che rappresenta anche un livello di
priorità fissato che però, può variare
a discrezione del sistemista. Il codice è a quattro bit:
0000 indica la priorità più alta, mentre 1111
quella più bassa.
La figura 9
rappresenta un esempio di logica di arbitraggio che possiede ogni
dispositivo. I segnali con il simbolo / indicano che sono asseriti
quando il loro valore è basso. Le linee ARBx/ sono linee del
bus comuni a tutti i master mentre su IDx/ è presente il
codice univoco binario di ogni scheda. Il segnale
“arb” indica se la periferica è in
competizione per il bus e il segnale “grant” indica
se il valore che si trova su ARBx/ coincide con quello presente sulle
linee IDx/ del dispositivo.
Figura
9 Esempio di logica di arbitraggio
distribuito del NuBus. Le linee IDx rappresentano la posizione dello
slot e quindi il livello di priorità. Le linee ARBx
rappresentano quattro linee di arbitraggio del bus comuni a tutti i
dispositivi. Il segnale arb/ è asserito se il dispositivo
sta concorrendo per il bus. Il segnale grant è asserito se
il master ha ottenuto il bus.
I valori
che la logica di arbitraggio andrà a scrivere sul bus
possono essere ottenuti dalle seguenti espressioni logiche:
ARB3 = ID3 * arb
ARB2 = ID2 * arb *
(ID3 + ARB3/)
ARB1 = ID1 * arb *
(ID3 + ARB3/) * (ID2 +ARB2/)
ARB0 = ID0 * arb *
(ID3 + ARB3/) * (ID2 + ARB2/) * (ID1 + ARB1/)
dove il simbolo *
rappresenta AND e il simbolo + rappresenta OR.
Le quattro linee di
arbitraggio ARBx del bus sono pilotate da ogni dispositivo mediate un
uscita a collettore aperto. Possono essere, quindi, pilotate da
più dispositivi simultaneamente senza creare conflitti.
Poiché il nubus è a logica negativa, quando
più dispositivi andranno a scrivere il loro livello su una
delle linee di arbitraggio, il valore più basso
sarà quello vincente. D’altra parte questo era
già chiaro quando si è detto che il livello di
priorità 0000 è più alto di 1111.
Quindi tutti i master che competono per il controllo del bus
partecipano alla fase di arbitraggio e osservano i valori sul bus. Se
trovano valori a priorità più alta si mettono in
uno stato di off uscendo dalla competizione corrente.
Quando un
dispositivo richiede l’accesso al bus, asserisce la linea di
richiesta (RQST/) e la manterrà tale finché il
bus non sarà libero e finché non ne
avrà ottenuto il controllo. Tutti i potenziali master che
hanno asserito la linea di richiesta pongono il loro codice ID sul bus.
Dopodiché trascorso un periodo di arbitration daley di circa
due cicli di clock il valore sulle linee del bus ARBx/ sarà
il codice ID del dispositivo a più alta priorità.
Facciamo adesso un
esempio pratico in modo da chiarire questi concetti.
Supponiamo che tre
master concorrano per effettuare la propria transazione sul bus. I tre
master, identificati dal loro ID, sono 0010 (2), 0100 (4) e 0101 (5), i
quali mettono simultaneamente sul bus i loro codici,
rispettivamente 1101, 1011, 1010. Le linee di arbitraggio assumeranno i
valori wired-OR risultanti e pertanto la logica di ogni dispositivo
leggerà il valore 1000 sul bus. A questo punto il master (2)
che pone il valore 1101 vede che ARB2 sul bus è a
priorità più alta quindi esce dalla competizione.
L’uscita del dispositivo (2) fa sì che il bus
assuma il valore 1010 che è appunto l’OR dei due
soli concorrenti rimasti (4) e (5). Il dispositivo (4) leggendo il
valore di ARB0 si accorge che è a priorità
più alta del suo e di conseguenza rinuncia, lasciando sul
bus il valore 1010 che è proprio quello del master (5) che
otterrà il controllo del bus.
Alla fine della fase
di arbitraggio il dispositivo che ottiene il bus avrà il
segnale di grant asserito.
A questo punto resta
un solo punto da chiarire, ovvero come il Nubus garantisca il fairness.
Si è detto che quando un dispositivo vuole accedere al bus
asserisce la propria linea di richiesta e la mantiene tale
finché non lo ha ottenuto. Questo comporta che fino a quando
il dispositivo non ha accesso al bus nessun altro master può
farne richiesta. Torniamo all’esempio sopra dei tre master.
Una volta che il dispositivo (5) ha finito la sua transazione, i master
(2) e (4), che hanno mantenuto la loro richiesta, possono cominciare la
fase di arbitraggio per stabilire chi di loro sarà il
prossimo utilizzatore del bus. Durante questo ciclo nessun altro
può fare richieste e accedere alla competizione per il bus.
Quindi se, per esempio, il master (5) necessita ancora del bus
dovrà attendere che sia il dispositivo (4) che il (2)
abbiano effettuato le loro transazioni.
In alcuni casi
particolari quando un dispositivo ha necessità di eseguire
più transazioni, può servirsi del bus locking11
.
Quando un master vince il bus può continuare a farlo
semplicemente non disasserendo il segnale di richiesta e mantendo il
suo ID sulle linee ARBx. Un saggio uso di questo meccanismo rientra
nell’ampio concetto di fairness.
Un’ultima
caratteristica del NuBus, già incontrata per altri bus, e
quella del bus parking. Un bus master che ha disasserito la sua linea
di richiesta e che ha appena eseguito una transazione, si
“parcheggia” sul bus in modo da potersene servire
altre volte fino a quando un altro dispositivo richiede il bus.
L’implementazione di questa tecnica riduce il tempo medio di
acquisizione del bus in un sistema in cui i dispositivi sono pochi.