Mutua esclusione e Coordinazione - the

Transcript

Mutua esclusione e Coordinazione - the
COORDINAZIONE in ambito distribuito
MUTUA ESCLUSIONE & ALGORITMI
Discutere il problema della mutua esclusione in ambito distribuito ed in particolare:
• Elencare le proprietà richieste
• Indicare quali sono gli algoritmi adottati e le loro caratteristiche
• Discutere il confronto dei diversi algoritmi considerando fattori quali complessità, tolleranza
ai guasti, ritardo.
Introduzione alla mutua esclusione
Una premessa essenziale da fare è: in un sistema distribuito non esiste il concetto di tempo globale
ma bisogna stabile delle relazioni di ordinamento temporale fra eventi (scambio di messaggi).
I processi distribuiti devono spesso coordinare le loro attività. Se una collezione di processi
condivide una risorsa o un insieme di risorse è necessaria la mutua esclusione per prevenire
“interferenze” e assicurare la consistenza delle stesse.
Al fine di garantire la mutua esclusione devono essere affrontate 3 particolari condizioni. La prima
definita SAFETY determina il fatto che al più un processo per volta esegua la sezione critica
(condizione primaria, senza la quale non ci sarebbe mutua esclusione).Questo garantisce che non ci
possa essere stallo (no starvation). La seconda condizione è detta LIVENESS e determina il fatto
che chi (processo) chieda di entrare nella sezione critica alla fine ottiene il permesso e al termine la
rilascia. Terza ed ultima condizione è l’ORDERING cioè l’ingresso nella sezione critica deve
rispettare la relazione d’ordine causale (se A chiede una risorsa e B chiede la stessa risorsa ci si
aspetta che A entri prima nella sezione critica, tenendo presente che il tempo di richiesta può subire
un ritardo ad esempio perché un processo è più distante).
Da tener presente che non sempre gli algoritmi utilizzati per la sincronizzazione rispettano tutte e 3
le condizioni.
Algoritmi per ottenere mutua esclusione - confronti
1. Algoritmo centrale (centralizzato) Æ il più semplice
Il più semplice modo per ottenere la mutua esclusione è quello di utilizzare un processo
coordinatore che garantisca i permessi per entrare nella sezione critica (algoritmo centrale). Quindi
un processo che vuole entrare nella sezione critica invia un messaggio al processo server e aspetta la
risposta. La risposta è un “token” che garantisce il permesso ad entrare nella s.c. Quando esce
restituisce il token al processo server. Qualora al momento della richiesta il token sia in possesso di
un altro processo il server accoda la richiesta. Quando la coda non è vuota viene recuperata la
richiesta più vecchia. Vengono rispettate le prime 2 condizioni (non stallo in quanto il server
assegna n modo univoco il token – tutto dipende dal processo coordinatore) mentre non rispetta la
terza condizione. Un algoritmo piuttosto semplice ma rende il processo server un collo di bottiglia
(cosa succede se si guasta?). Per quanto riguarda le performances sono necessari 2 msg per entrare
nella s.c. (2 di ritardo) ed 1 solo msg per uscirne.
Da notare che il coordinatore dovrebbe essere in grado di capire se un processo è “caduto” oppure si
tratta di un’elaborazione più lunga.
Vantaggi: semplicità
Svantaggio: coordinatore collo di bottiglia
2. Algoritmo distribuito Ricart e Agrawala (basato sul multicast con timestamp)
Assunzioni: ord.globale eventi – trasm.affidabile)
Un secondo algoritmo per ottenere la mutua esclusione si basa sul multicast. Questo vuol dire che
un processo che voglia entrare nella sezione critica manda un messaggio a tutti in multicast con il
nome della s.c., proprio id e timestamp locale (per decidere chi entrerà per primo). Si pone quindi in
attesa di tutte le conferme da parte degli altri processi. Una volta ottenuti entra nella sezione critica,
una volta uscito invia un messaggio a tutti gli altri processi. Questo algoritmo può esser visto come
la condivisione di un token logico ed un processo può trovardi in uno dei 3 seguenti stati:
RELEASED (non ha il token)-WANTED (vuole entrare)-HELD(possiede il token).
Quando un processo riceve un messaggio di richiesta può non essere nella sezione critica (released)
e non volerci entrare quindi risponde immediatamente, essere nella sezione critica (held) quindi
accoda la richiesta oppure voler entrare nella sezione critica (wanted) quindi confronta il timestamp
(il più anziano ha la maggiore priorità …cioè un processo non risponde in questo caso se la richiesta
ha un valore di timestamp più alto).
Solo un processo per volta entra nella sezione critica (HELD status), se non ci sono guasti non si
verifica nemmeno stallo. In caso contrario nessun processo può più entrare nella s.c. in quanto
quello che fa la richiesta di entrare non riceverà tutte le risposte (soluzione parziale: richieste non
bloccanti che permettano ai processi di eseguire controlli e tollerare guasti comunque). La
condizione 3 viene garantita poiché si utilizza un timestamp.
Performances: N-1 messaggi per il multicast, N-1 messaggi per le risposte quindi 2(N-1) messaggi e
il ritardo è dato dal tempo di trasmissione come nell’algoritmo precedente.
3. Algoritmo ad anello
Questo algoritmo richiede solo che ogni processo abbia un canale di comunicazione diretto con il
processo successivo nell’anello.L’algoritmo si basa sul possesso di un token. Il processo che
possiede il token è abilitato ad entrare nella sezione critica. Se un processo non richiede di entrare
nella sezione critica immediatamente lo passa al successivo. Un processo che richiede di entrarvi lo
aspetta, mentre una volta lo passa al successivo processo nell’anello.
Le prime due condizioni sono rispettate (token), mentre la terza condizione non necessariamente è
garantita (ci sono processi prima nella catena).
Performances: il token gira sempre nell’anello anche se nessun processo richiede di entrare nella
sezione critica. Necessari [1,N-1] messaggi per entrare nella sezione critica e per sincronizzazione:
1 nel caso il token sia al processo precedente, N-1 sia successivo.
1 messaggio per uscire.
Svantaggi: consumo della banda continuo a meno che uno non abbia il token. In caso di guasti
(esempio il processo in possesso del token, è necessario sincronizzare l’anello logico).
Ritardo: [0,N-1]
4. Algoritmo di votazione – Maekawa
Per entrare in una sezione critica occorre sincronizzarsi solo con il sottoinsieme (subset) dei
processi interessati. I processi votano per stabilire chi è autorizzato ad entrare nella s.c. (algoritmi di
elezione all’interno del sottoinsieme).
Per entrare nella sezione critica un processo invia una richiesta a tutti gli altri membri di Vi (insieme
di votazione). Attende le risposte reply, ricevute tutte le risposte entra nella s.c., al rilascio invia un
release a tutti gli altri membri di Vi.
Un processo pj che riceve la richiesta se è nello stato HELD oppure ha già risposto (VOTED)
all’ultimo messaggio release ricevuto accoda la richiesta, altrimenti risponde subito con un reply.
Un processo che riceve un release estrae una richiesta dalla coda e invia un reply (un voto).
Se K è la cardinalità costante di Vi per equità le assunzioni sono che K è uguale alla radice quadrata
di N e M=K.
L’algoritmo è soggetto a stallo (ad esempio insiemi di processi sistemati secondo la proprietà
transitiva).
Performances: 2 per la radice di N per entrare nella sezione critica, radice di N per uscire.
Da notare che il guasto di un processo non partecipante non influenza l’algoritmo.
ALGORITMI di ELEZIONE
Descrivere gli algoritmi di elezione in un sistema distribuito
• Introduzione all’argomento
• Vantaggi, svantaggi, complessità
• Esempio di applicazione
Scopo di algoritmo di elezione è scegliere un processo che agisca come coordinatore (varaiante
dell’algoritmo del servente centrale). Un processo non può chiamare più di un’elezione per volta,
ma complessivamente N processi possono chiamare N concorrenti elezioni. Il più importatane
requisito è quello che il processo scelto sia unico. Il processo scelto sarà il processo con
l’identificatore più alto. Ogni procello ha una variabile electedi che conterrà l’identificatore del
processo eletto.
Condizioni :
SAFETY: un processo partecipante ha electedi = indefinito oppure electedi = P .
LIVENESS: tutti i processi pi partecipano ed eventualmente settano electedi diverso da indefinito oppure
crashano.
1. Algoritmo di elezione ad anello (Chang e Roberts)
Assunzione: comunicazione affidabile e processi soggetti a guasti
I processi non conoscono a priori gli id degli altri processi ma ciascun processo conosce solo come
comunicare con il suo vicino in senso orario.
Inizialmente ogni processo è marcato come non partecipante in un’elezione. Quando un processo
riceve un messaggio election confronta l’id nel messaggio con il proprio. Se l’id è il più grande,
allora fa il forward del messaggio al suo vicino. Altrimenti se l’id è più piccolo e il ricevente non è
un partecipante sostituisce il proprio id nel messaggio e fa il forward del messaggio e si marca come
partecipante. Mentre non fa il forward del messaggio se già partecipante. Tuttavia se l’id ricevuto è
quello del ricevente allora deve essere l’id più grande e diventa coordinatore.
Il coordinatore marca se stesso come non-partecipante e invia un msg elected al suo vicino.
Le condizioni SAFETY e LIVENESS sono rispettate. La prima in quanto un processo deve ricevere
il suo stesso id prima di inviare un messaggio elected, la seconda deriva dalla struttura intrinseca
dell’anello logico qualora non ci siano guasti.
Performances: N-1 messaggi nel caso peggiore (vicino in senso antiorario). Vicino che annuncerà
la sua elezione dopo un altro giro dell’anello (altri N messaggi). Il messaggio è spedito allora N
volte, quindi 3N-1 messaggi in tutto.
Svantaggio: non tollera guasti
2. Algoritmo Bully
Può essere usato quando i membri del gruppo conoscono le identità e gli indirizzi degli altri membri
(n2 messaggi). Si distinguono 3 tipi di messaggi:
a. Election: per annunciare un’elezione
b. Answer: in risposta ad un election
c. Coordinator: per annunciare l’identità del nuovo coordinatore
SISTEMA sincrono: usa i timeout per rilevare il guasto di un processo.
T= 2Ttransf + Tprocess
Ogni processo conosce i processi con gli id maggiori e può comunicare con questi.
Un processo indice l’elezione inviando il messaggio di elezione ai processi con id più alto e aspetta
le risposte. Se non arriva entro un timeout si nomina coordinatore (AUTOELEGGE) e lo comunica
agli altri inviando un messaggio coordinator a tutti i processi con id più basso. Altrimenti aspetta un
altro tempo per l’arrivo di un messaggio coordiantore e se non arriva indice un’altra elezione.
Riassumendo: elezione in quali casi?
• Processo riattivato con id più alto
• Quando un processo nota che un coordinatore non risponde
• Quando riceve un messaggio di elezione da un processo con id inferiore
SAFETY non garantita se i processi rimpiazzati da processi con id identici.
Difetto: problemi nell’accuratezza dei timeout
Performances: Se il secondo processo con id + alto notifica il guasto del coordiantore N-2
messaggi. Caso peggiore n2
Nota: Risultato: più di un processo può avviare l'algoritmo, ma un solo processo completa il
suo algoritmo di elezione: quello che ha il più alto numero di priorità fra quelli funzionanti.