Architettura master-slave
# Architettura master-slave

Con architettura di tipo master-slave, in informatica, si indica un tipo di architettura per computer che permette di creare un rapporto tra hardware, in cui uno ha il pieno controllo dell'altro.

In particolare, si definisce master il dispositivo informatico che prende il controllo del bus, incomincia l'interazione, mentre con slave ci si riferisca a quello che risponde al primo.

## Descrizione

Nei calcolatori tale architettura è generalmente riservata alla CPU e alle periferiche. Questi componenti sono connessi tramite bus. In prima istanza il collegamento contemporaneo di tutti i dispositivi può risultare poco gestibile, si pensi ad una CPU che sta accedendo alla memoria centrale per leggere un dato utilizzando uno specifico bus e contemporaneamente siano in arrivo altri dati da una interfaccia ingresso/uscita che transitano sullo stesso bus.

La contesa del bus viene risolta affidando alla CPU il ruolo di master e dunque la gestione dell'intero sistema, quindi delle periferiche, negando a quest'ultime (slave) di accedere autonomamente al bus. Tramite tale architettura il trasferimento dei dati avviene sotto la supervisione della CPU, che identifica, mediante il loro indirizzo, la sorgente e la destinazione dei dati, e sincronizza i dispositivi che devono colloquiare. Nel bus si evita qualsiasi collisione tra dati di competenza delle diverse periferiche.

## Proposta di cambio di terminologia

Alcuni sviluppatori hanno proposto di sostituire questa terminologia, poiché ritenuta poco inclusiva, con riferimenti culturali al razzismo e alla schiavitù.

In seguito a questo dibattito la terminologia master/slave è stata sostituita da Django e da Drupal (nel 2014), da Redis (nel 2017), da Python (nel 2018).

Nel 2020, in seguito all'ondata internazionale di proteste per la morte di George Floyd, realtà importanti della tecnologia IT hanno dichiarato di voler sostituire questa terminologia. Fra queste Android, Google Chrome, Curl, GitHub, Microsoft e Twitter. Linus Torvalds ha indicato delle linee guida per sostituire (ove possibile), dalla release 5.8-rc5 del kernel Linux, i termini master/slave con:

* {primary, main} / {secondary, replica, subordinate}
* {initiator, requester} / {target, responder}
* {controller, host} / {device, worker, proxy}
* leader / follower
* director / performer

Contestualmente è stato consigliato di sostituire i termini blacklist/whitelist con allowlist/passlist oppure denylist/blocklist.

