title: Bus sniffing
text: # Bus sniffing
  
  In informatica, il Bus sniffing o Bus snooping è una tecnica usata nei sistemi Distributed Shared Memory e multiprocessore per avere coerenza della cache. Sebbene ci sia una memoria principale, ci sono diverse cache (una per processore) e, a meno di un'azione preventiva, la stessa locazione di memoria potrebbe essere caricata all'interno di due cache diverse, con due valori diversi. Per prevenire ciò, ogni controller della cache monitora il bus per leggere le trasmissioni che potrebbero causare il fenomeno, così da interdire la linea di cache relativa.
  
  Ogni linea di cache può assumere questi stati: "dirty" (è stata aggiornata dal processore), "valid", "invalid" o "shared" i quali vengono asseriti quando un blocco è caricato nella cache. Il primo blocco caricato viene marcato come valid.
  
  In una lettura mancata alla cache, la richiesta di lettura è trasmessa sul bus. Tutti i controller della cache monitorano il bus. Se uno di essi controlla l'indirizzo ed è in "dirty", lo cambia in "valid" e invia la copia al richiedente. Lo stato "valid" significa che la linea cache è in corso.
  
  In una scrittura mancata (un tentativo di scrivere il valore, ma non è in cache), il bus snooping assicura che ogni copia in ogni altra cache sia settata a "invalid". "Invalid" significa che una copia esisteva in cache, ma non è più disponibile.
  
  Nel momento in cui si scrive un blocco settato a "valid" il suo stato si cambia in "dirty" e una trasmissione è inviata a tutti i controller delle cache per invalidare le sue copie.
  
  