# Arbitraggio del bus

L'arbitraggio del bus, in informatica, è la funzione che gestisce il possesso del bus per evitare ambiguità quando più master richiedono contemporaneamente il suo utilizzo; l'arbitro decide a quale dispositivo concederlo per prima.

## Tipologie

Esistono due tipi di meccanismi di arbitraggio: centralizzato o decentralizzato.
Nell'arbitraggio centralizzato il bus viene concesso da un circuito integrato nella CPU chiamato appunto arbitro, invece nell'arbitraggio decentralizzato non esiste questo chip, la concessione del bus viene gestita dagli stessi dispositivi.

### Arbitraggio centralizzato

Il meccanismo di arbitraggio centralizzato include un'unità funzionale opportuna, che svolge la funzione di arbitro del bus, e alcune linee (appartenenti al bus di controllo) che collegano l'arbitro ai potenziali master che potrebbero richiedere il controllo del bus.
Esistono due tipi di arbitraggi centralizzati:
* Daisy Chaining (connessione multipla)
* Independent requesting (richiesta indipendente)

### Daisy Chaining

In questo tipo di arbitraggio ogni dispositivo, quando riceve il segnale di Grant (segnale di concessione del bus), controlla se ha fatto una richiesta del bus:
* se ha fatto la richiesta, utilizza il bus, e non propaga il segnale di Grant ai dispositivi successivi.
* se non ha fatto la richiesta, propaga il segnale di Grant.
Quindi in un meccanismo Daisy Chaining il dispositivo fisicamente più vicino all'arbitro ha più priorità rispetto ai dispositivi più lontani.
È possibile anche avere più livelli di priorità, caratterizzati ognuno da una propria linea di Richiesta del bus e una linea di Grant.

### Independent requesting

Questo tipo di arbitraggio è usato dai bus PCI. Ogni dispositivo ha una linea di Richiesta del bus e una linea di Grant che lo connettono con l'arbitro.
Il bus viene concesso per effettuare un trasferimento alla volta, se il dispositivo ha ancora bisogno di trasferire dati e nessun altro lo richiede, allora può continuare ad utilizzarlo. Questo tipo di arbitraggio permette di effettuare lunghi trasferimenti quando c'è un solo master, e garantisce una risposta veloce quando più dispositivi necessitano del bus.

### Arbitraggio distribuito

Nel meccanismo di arbitraggio decentralizzato:
* Non esiste l'arbitro.
* Ogni unità funzionale ha priorità fissata e diversa, espressa da un codice univoco associato all'unità stessa.
* Se più dispositivi hanno bisogno del bus, questo viene preso da chi ha priorità maggiore.
Questo tipo di arbitraggio utilizza solo 3 linee:
* Linea di Richiesta, che effettua la richiesta del bus.
* Busy, è attivata dal master che ne fa richiesta.
* Linea di arbitraggio, che collega tutti i dispositivi, è usata per arbitrare il bus ed è alimentata a 5 volt.
Quando nessuno richiede il bus, la linea di arbitraggio si propaga per tutti i dispositivi, mentre se un dispositivo lo richiede, dovrà controllare se il bus è libero e se il segnale della linea di arbitraggio (IN) è attivato; in questo caso nega OUT in modo che tutti i dispositivi successivi vedranno IN negato e a loro volta negheranno OUT. In questo modo il dispositivo con priorità maggiore che ha fatto richiesta, avrà il possesso del bus, attiverà la linea di Busy e OUT, e inizierà il proprio trasferimento. Questo schema è simile a quello Daisy Chaining a differenza che è privo di arbitro, questa differenza lo rende più economico, veloce e non soggetto a eventuali guasti da parte dell'arbitro.