Arbitraggio
decentralizzato daisy chaining.
Un secondo possibile arbitraggio del bus è quello
decentralizzato, in cui i compiti dell’arbitro vengono
distribuiti ai singoli master che comunicando tra di loro decidono chi
deve usare il bus.
La scelta di un tale sistema se da un lato riduce i costi di un
circuito dedicato, dall’altro obbliga le periferiche
collegate al bus ad avere una logica di controllo più
complessa.
Un tipico schema di arbitraggio decentralizzato è riportato
in figura 5 in cui si osserva che vengono utilizzate principalmente tre
linee. La bus request è una tipica wired-OR che è
asserita dal dispositivo al momento della richiesta. La linea busy,
già vista per il VMEbus, è attivata dal master
che ha ottenuto il bus. La terza linea, che attraversa uno dopo
l’altro tutti i dispositivi collocati in daisy
chaining, è quella di arbitraggio che è mantenuta
sempre asserita.
Figura
5
Arbitraggio decentralizzato di tipo daisy chaining.
Affinché un dispositivo possa acquisire il controllo del bus
è necessario che la linea busy non sia attiva e il segnale
che sta ricevendo all’ingresso IN sia asserito. Se IN non
è asserito il dispositivo che vuole ottenere il bus, nega
OUT in modo che i dispositivi successivi vedano il loro segnale IN
negato. Se il bus è libero e IN è asserito il
dispositivo potrà diventare master, quindi nega OUT e
asserisce busy iniziando la propria transizione sul bus.
Un simile schema di arbitraggio fu implementato per il Multibus I5
.
Supponiamo che il master 4 stia pilotando il bus, quindi busy
è asserita e IN4 è asserita. Se il dispositivo 2,
a priorità più alta, ha necessità di
accedere al bus e vede il bus occupato, nega OUT2. Il
dispositivo 4 campiona la propria linea di arbitraggio e si accorge che
è stata negata, ma il rilascio del bus non avviene
istantaneamente. E’ necessario un certo intervallo di ritardo
che consente al dispositivo 4 di interrompere la transazione corrente.
Successivamente il dispositivo 4 disasserisce la linea busy e nel caso
non abbia concluso le proprie operazioni mantiene alta la richiesta
cercando di riguadagnare il bus non appena il master a
priorità maggiore lo avrà rilasciato. Adesso il
dispositivo 2 potrà pilotare il bus asserendo la linea busy
e iniziando la transazione. Si noti che il ruolo della linea busy
è quello di garantire la sincronizzazione tra i dispositivi.
Questa fase di scambio del controllo del bus tra i dispositivi, detta
appunto bus exchange, è molto importante per questo tipo di
arbitraggio. Al fine di evitare che i dispositivi a bassa
priorità attendano a lungo, è obbligatorio, da
parte dei master, sottoporsi ad un ciclo di bus exchange
rilasciando il bus dopo ogni transazione anche in assenza di altre
richieste. A garantire ancor meglio il fairness nel Multibus I
è presente una quarta linea chiamata Common Bus Request con
la quale si informa il master corrente che il bus deve essere
rilasciato perché vi sono richieste pendenti.
Per evitare che il master corrente si sottoponga al bus exchange si
può utilizzare un’altra possibile tecnica detta
del bus parking, che consiste nel lasciare il controllo del bus
all’ultimo master. Di questa tecnica ne discuteremo
più avanti.
Le strutture di tipo daisy chaining hanno il vantaggio di essere
semplici da realizzare, ma occorre utilizzare una politica di
arbitraggio adeguata per evitare lunghe attese ai master a bassa
priorità, e inoltre il segnale di grant in cascata
può limitare la velocità del bus.