Esistono implementazioni di blocco hardware senza test-and-set o swap?


19

I blocchi sono generalmente implementati attraverso le istruzioni test-and-set e swap a livello di macchina. Ci sono altre implementazioni che non le usano?

Inoltre, possiamo dire che tutte le soluzioni a livello di hardware al problema della sezione critica possono essere classificate in sole tre, vale a dire, disabilitare l'interruzione, test-and-set e swap?

Risposte:


13

Sì, è possibile implementare l'esclusione reciproca solo con il caricamento della memoria e le istruzioni di archiviazione. Esiste una lunga tradizione nell'elaborare soluzioni successivamente più semplici a questo problema.

La prima versione che conosco, chiamata "soluzione di Dekker", fu introdotta in Dijkstra, Edsger W .; "Cooperare processi sequenziali", in F. Genuys, ed., Linguaggi di programmazione: NATO Advanced Study Institute , pp. 43-112, Academic Press, 1968 . Da allora ci sono state decine di soluzioni. Discuterò solo alcuni dei più importanti.

Lamport, Leslie; "Una nuova soluzione del problema di programmazione concorrente di Dijkstra", Comm ACM 17 (8): 453-455, 1974 introduce l'algoritmo "Bakery" (perché si basa sull'analogia delle persone che prendono i numeri per determinare l'ordine in cui saranno servito nel negozio di panetteria). Una delle caratteristiche particolarmente notevoli di questo algoritmo è che dimostra che per risolvere il problema dell'esclusione reciproca non è richiesta alcuna atomicità hardware. Le letture che si sovrappongono alle scritture nella stessa posizione possono restituire qualsiasi valore e l'algoritmo funziona ancora. Lamport ne discute un po 'nella descrizione dell'articolo sulla sua home page .

La soluzione di Peterson, Peterson, GL; "Miti sul problema dell'esclusione reciproca", Inf. Proc. Lett. , 12 (3): 115-116, 1981 , è uno che è specificamente progettato per essere facile da capire e ragionare. Infine, uno dei miei preferiti in particolare è Lamport, Leslie; "Un rapido algoritmo di esclusione reciproca", ACM Trans. Comp. Sys. , 5 (1): 1-11, 1987. In questo articolo Lamport stava cercando di ottimizzare una soluzione al problema dell'esclusione reciproca nel caso (comune) che vi fosse poca contesa per la sezione critica. Garantisce l'esclusione reciproca e la libertà di deadlock, ma non l'equità. È (credo) il primo algoritmo di esclusione reciproca che utilizza solo letture e scritture normali in grado di sincronizzare N processori in O (1) in assenza di contese. (Quando c'è contesa, ricade su un test O (N).) Dà una dimostrazione informale che il meglio che puoi fare nel caso senza contesa sono sette accessi alla memoria. (Dekker e Peterson lo fanno entrambi con 4, ma possono gestire solo 2 processori, quando estendi i loro algoritmi a N devono aggiungere un ulteriore accesso O (N).)

Apparentemente le persone che lavorano sul problema di risolvere l'esclusione reciproca usando solo letture e scritture di memoria sono frustrate dalla (mancanza di) comprensione delle altre persone del problema e delle sue soluzioni. Ciò è dimostrato in parte dal titolo dell'articolo di Peterson ("Miti sul problema dell'esclusione reciproca") e in parte da una breve nota che Lamport ha pubblicato nel 1991: Lamport, Leslie; "Il problema dell'esclusione reciproca è stato risolto", Comm ACM 34 (1): 110, 1991 , che Lamport descrive in qualche modo amaramente sulla sua homepage .

Quindi, per rispondere alla tua seconda domanda: No. Esistono molte più di tre categorie di soluzioni a livello di hardware per il problema della sezione critica (usare solo carichi e negozi è uno, altri comportano istruzioni di confronto e scambio, carico-collegato / negozio-condizionale istruzioni (utilizzando il protocollo di coerenza della cache per verificare l'atomicità) e istruzioni di recupero e aggiunta. In un altro senso, esiste davvero solo una categoria di soluzioni: quelle che comportano l'acquisizione di un insieme di processi asincroni per concordare un ordine globale di eventi .

(Nota che questa risposta è una modifica (estesa) di una risposta precedente che ho dato per una domanda molto diversa .)


ll / sc può, ovviamente, essere esteso a una memoria transazionale più generale che copre l'intera sezione critica piuttosto che solo l'acquisizione del blocco. Anche la distinzione tra ciò che garantisce l'hardware sembra significativa; i progressi in avanti sono talvolta garantiti (ad esempio, un agente vincerà la gara per ottenere un blocco in un determinato momento), ma anche i concetti deboli relativi all'equità sembrano di solito puntati sul software (in qualche modo comprensibilmente).
Paul A. Clayton,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.