Memorie Condivise Distribuite

Slides:



Advertisements
Presentazioni simili
Training On Line - CONP. 2 Richiesta Da Menu: Conferimenti ad inizio anno termico > Agosto > Pluriennali > Nuova Richiesta Si accede alla pagina di Richiesta.
Advertisements

Dipartimento di Ingegneria Idraulica e Ambientale - Universita di Pavia 1 Caduta non guidata di un corpo rettangolare in un serbatoio Velocità e rotazione.
1 Tutto su liceoclassicojesi.it 1° Incontro sulla gestione di liceoclassicojesi.it.
Meccanismi di IPC Problemi classici di IPC
1 MeDeC - Centro Demoscopico Metropolitano Provincia di Bologna - per Valutazione su alcuni servizi erogati nel.
Mat_Insieme Lavoro di Gruppo Prodotti Notevoli
TAV.1 Foto n.1 Foto n.2 SCALINATA DI ACCESSO ALL’EREMO DI SANTA CATERINA DEL SASSO DALLA CORTE DELLE CASCINE DEL QUIQUIO Foto n.3 Foto n.4.
1 Pregnana Milanese Assessorato alle Risorse Economiche Bilancio Preventivo P R O P O S T A.
Gestione del processore
Frontespizio Economia Monetaria Anno Accademico
1 la competenza alfabetica della popolazione italiana CEDE distribuzione percentuale per livelli.
1 Tavolo del Patto per la crescita intelligente, sostenibile e inclusiva Il ricorso agli ammortizzatori sociali nei territori colpiti dagli eventi sismici.
Ud'A - CdL in Scienze Motorie - AA [La chimica del carbonio] dia n. 1 La chimica del Carbonio.
1 Istruzioni, algoritmi, linguaggi. 2 Algoritmo per il calcolo delle radici reali di unequazione di 2 o grado Data lequazione ax 2 +bx+c=0, quali sono.
Cammini minimi con sorgente singola
Implementazione dell algortimo di Viterbi attraverso la soluzione del problema di cammino mi- nimo tramite software specifico. Università degli studi di.
Ordini Parziali - Reticoli
I MATEMATICI E IL MONDO DEL LAVORO
EIE 06/07 II / 1 Strumenti delle politiche agricole in economia aperta equilibrio di mercato in economia aperta politiche di un paese importatore politiche.
EIE 0607 III / 1 A B P a = 30 P b = 35 t = 2, tc = 1 Questo può essere un equilibrio? No! Politiche di un paese importatore: una tariffa allimportazione.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Puntatori Marco D. Santambrogio – Ver. aggiornata al 21 Marzo 2013.
Algoritmo di Ford-Fulkerson
A.S.E.13.1 ARCHITETTURA DEI SISTEMI ELETTRONICI LEZIONE N° 13 Alcune definizioniAlcune definizioni Algoritmo di sintesi ottima di Quine-McCluskeyAlgoritmo.
Programmazione 1 9CFU – TANTE ore
Canale A. Prof.Ciapetti AA2003/04
1 Corso di Informatica (Programmazione) Lezione 4 (24 ottobre 2008) Architettura del calcolatore: la macchina di Von Neumann.
Ufficio Studi UNIONCAMERE TOSCANA 1 Presentazione di Riccardo Perugi Ufficio Studi UNIONCAMERE TOSCANA Firenze, 19 dicembre 2000.
Realizzazione e caratterizzazione di una semplice rete neurale per la separazione di due campioni di eventi Vincenzo Izzo.
eliana minicozzi linguaggi1a.a lezione2
Il linguaggio Fortran 90: 4. Array: Vettori e Matrici
Master universitario di II livello in Ingegneria delle Infrastrutture e dei Sistemi Ferroviari Anno Accademico 2012/2013 Cultura dimpresa, valutazione.
La partita è molto combattuta perché le due squadre tentano di vincere fino all'ultimo minuto. Era l'ultima giornata del campionato e il risultato era.
Dipartimento di Ingegneria Idraulica e Ambientale - Universita di Pavia 1 Scritte scritte scritte scritte scritte scritte scritte Scritte scritte Titolo.
Cos’è un problema?.
CALCIO SKY 2007 – 2008 PROFILO DI ASCOLTO. 2 INDICE DEGLI ARGOMENTI Profilo di ascolto CALCIO SERIE A 2007 – 2008 Totale campionato (tutte le partite)……………………………………………….
Lezione 6 Encoder ottici
Analisi di Immagini e Dati Biologici
19 Lezione 21/5/04 Composizione dell'immagine 1 COMPOSIZIONE DELLIMMAGINE.
Contatore: esempio di circuito sequenziale
Settimana: 3-7 marzo Orariolunedimartedi Mercoledi 5 Giovedi 6 Venerdi lezione intro alla fis mod DR lezione intro alla fis mod DR.
2 3 4 RISERVATEZZA INTEGRITA DISPONIBILITA 5 6.
Melfi, 1 aprile 2011 – MediaShow 1 Social Network: possibilità di uso consapevole nella didattica Uso, consapevolezza, opportunità, proposte Caterina Policaro.
Nuove frontiere della medicina trasfusionale: il contributo Avis
1ROL - Richieste On Line Ente pubblico 5ROL - Richieste On Line.
Esercitazione 1: Rispetto al test di ansia (Media=25; σ=5), calcolare:
1 Negozi Nuove idee realizzate per. 2 Negozi 3 4.
ISOIVA (LOCALE) TO ISOIVA (WEB) RIPARTIZIONE INFORMATICA UFFICIO APPLICATIVI AMMINISTRATIVI 13/04/2011 UNIVERSITÀ DEGLI STUDI DI FERRARA 1.
ORDINE DI CHIAMATA a 1minuto e 2 minuti PRINCIPALI TEMPI DELLA COMPETIZIONE ORDINE DI CHIAMATA a 1minuto e 2 minuti PRINCIPALI TEMPI DELLA COMPETIZIONE.
Scheda Ente Ente Privato Ente Pubblico. 2ROL - Richieste On Line.
TECNOLOGIE DELLINFORMAZIONE E DELLA COMUNICAZIONE PER LE AZIENDE Materiale di supporto alla didattica.
1 Guida per linsegnamento nei corsi per il conseguimento del CERTIFICATO DI IDONEITÀ ALLA GUIDA DEL CICLOMOTORE.
Protocollo informatico: interoperabilità e PEC
1)Completa la seguente successione: C4, B7, E10, D13, G16,. A. G19 B
Bando Arti Sceniche. Per poter procedere è indispensabile aprire il testo del Bando 2ROL - Richieste On Line.
LE SAI LE TABELLINE? Mettiti alla prova!.
1 Questionario di soddisfazione del servizio scolastico Anno scolastico 2011/2012 Istogramma- risposte famiglie.
21 marzo 2002 (ri-)Avvisi: Giovedi 28 marzo la lezione e sospesa. Nuovo indirizzo di Spedire messaggi e esercizi solo.
Calendario lezioni ed esercitazioni impartite nell anno accademico 2001/2002 II Semestre Corso di Fisica Sperimentale con Laboratorio Classe di Tecnologie.
File system distribuito transazionale con replicazione
Bando di Residenza Cap Scheda ENTE 3ROL - Richieste On Line.
1Piero Scotto - C14. Finalità del corso Programma Materiale Requisiti Spendibilità 2Piero Scotto - C14.
Sviluppare un programma in C che, dato un array da 100 elementi interi caricato con numeri casuali compresi tra [10,100], sia in grado di cercare il valore.
Atzeni, Ceri, Paraboschi, Torlone Basi di dati McGraw-Hill,
-17 Aspettative economiche – Europa Settembre 2013 Indicatore > +20 Indicatore 0 a +20 Indicatore 0 a -20 Indicatore < -20 Unione Europea Totale: +6 Indicatore.
NO WASTE Progetto continuità scuola primaria scuola secondaria Salorno a.s. 2013_
Numeri Interi senza segno
TRASFORMATA DI FOURIER
A.P. cat. B - 1 Per chi vuole: Libro di testo D.P. Curtis, K. Foley, K. Sen, C. Morin Informatica di base 2° edizione Mc Graw-Hill Companies.
USR-INRiM-GMEE-CE.SE.DI Formazione&Metrologia Modulo 1 1 Modulo 1 Costruzione di un linguaggio comune Preparazione liste dei termini. Condivisione.
IL GIOCO DEL PORTIERE CASISTICA. Caso n. 1 Il portiere nella seguente azione NON commette infrazioni.
Transcript della presentazione:

Memorie Condivise Distribuite Prof.Roberto Baldoni, Ing. Alessia Milani

Modello di comunicazione tra processi: Memoria Condivisa N processi sequenziali P={p1,p2…pn} interagiscono attraverso una memoria condivisa M. M è composta da m locazioni (variabili) x1, x2,…xm Ogni locazione è inizializzata a  Ogni processo pi può eseguire le seguenti operazioni su M : Lettura, ri(xh)v. pi legge il valore v registrato nella locazione xh. Scrittura, wi(xh)v. pi scrive un nuovo valore v nella locazione xh. p1 p2 pi wi(xh)v x1 x2 xh … xm   v   v Si assume che non possano esistere due scritture che scrivono uno stesso valore. (SEMPLIFICAZIONE DEL MODELLO) rj(xh)v pj pn

Consistenza in un Sistema Concorrente In un sistema concorrente piu’ processi possono invocare concorrentemente operazioni su una stessa variabile. Si devono definire delle regole di accesso alla memoria.

Criteri Di Consistenza: Specifica

Memoria Condivisa: Linearizability Ogni variabile x è un oggetto con semantica read/write: “ogni lettura deve restituire l’ultimo valore scritto oppure il valore iniziale”. ri(x)v: x read() pi / ok(v) pi wi(x)v: x write (v) pi /ok() pi Esempio pi ok() pi x write(v) pi INCONSISTENTE  v ok(v) pj ok() pk x read() pj x read() pk pj pk

Memoria Condivisa Linearizability: Scenari x write(a) p1 ok() x write(b) p2 ok() x read() p1 ok(b) p1 p2 x read() p1 ok(a) LINEARIZZABILE NON LINEARIZZABILE

Process Order hi è l’insieme di operazioni eseguite dal processo pi Le operazioni vengono considerate istantanee (tinv tres). PROCESS ORDER: Date o1 e o2 eseguite dal processo pi , se pi esegue prima o1 e poi o2 si dice che o1 precede o2 nell’ordine del processo pi, o1 io2 . w1(x)a 1 w2(x)b w 1 (x)a (x)b p

Local history ĥ1= w1(x)a, w1(x)b Sia hi l’insieme di operazioni eseguite da pi DEF. Una local history ĥi di un processo pi è la sequenza di operazioni eseguite da pi ordinata secondo i. ĥ1= w1(x)a, w1(x)b w 1 (x)a (x)b p

History DEF. Una history H è l’unione di tutte le hi dei processi del sistema. w 1 (x)a (x)b 2 (x) c r p h1={ w1(x)a, w1(x)b} h2 = {r2(x)a, w2(x)c} H= h1  h2={w1(x)a, w1(x)b, r2(x)a, w2(x)c}

Read-from order La relazione di read-from order, ro lega due operazioni o1, o2 eseguite da processi distinti del sistema, pi e pj . o1 ro o2 se e solo se: o1= wi(x)v e o2= rj(x)v  o2 esiste al più una o1 t.c. o1 ro o2 se o2= rj(x)v e non esiste un o1 t.c. o1 ro o2 allora v=.

Read-from order scenario w (x)a p i i r (x)a p j j wi(x)arorj(x)a

Execution History DEF. Un’ Execution History è un ordinamento parziale Ĥ=(H, H) tale che: H = i hi o1 H o2 se una delle tre condizioni è soddisfatta:  pi : o1 i o2 o1 ro o2  o3 : o1 H o3 e o3 H o2

Lettura Legale DEF. Data una Ĥ=(H, H), una lettura r(x)vĤ è legale se :  w(x)v tale che w(x)v H r(x)v  w’(x)v : w(x)v  H w’(x)v  H r(x)v w 1 (x)a (x)b p 2 (x)c r OK

Lettura Non Legale r2(x)a NON è una lettura LEGALE w (x)a (x)b p (x)c 1 (x)a (x)b p 2 (x)c r r2(x)a NON è una lettura LEGALE

Execution History Legale DEF. Una Execution History Ĥ =(H, H) è legale se tutte le sue letture sono legali. In una Execution History legale nessuna operazione di lettura può restituire un valore sovrascritto.

Estensione Lineare DEF. Ŝ=(S,S) è un’estensione lineare di un ordinamento parziale Ĥ=(H,H) se: S=H o1 H o2  o1 S o2 (Ŝ mantiene l’ordinamento di ogni coppia di operazioni in Ĥ) S definisce un ordinamento totale

Estensione Lineare Esempio w 1 (x)a (x)b p 2 (x)c r Ŝ = w1(x)a, w1(x)b, r2(x)b, w2(x)c

Sequential Consistency Proposta da Lamport nel 1979 per definire un criterio di correttezza per sistemi di memorie condivise multiprocessore. “il risultato di un’esecuzione è lo stesso di quello che si otterrebbe se le operazioni di tutti i processi fossero eseguite in un qualche ordine sequenziale, mantenendo per ogni processo l’ordinamento specificato dal suo programma.”

History Sequential Consistent DEF. Un’execution History Ĥ=(H,H) è Sequential Consistent se esiste un’estensione lineare Ŝ in cui tutte le letture sono legali.

Sequential Consistency: Esempio Process 1 Time Process 2 read br := b; a := a + 1; ar := a; b := b + 1; if(ar ≥ br) then print ("OK"); write a e b inizializzati a 0. La combinazione ar=0 e br=1 non può verificarsi se il sistema impone la Sequential Consistency.

Esempio 1 w 1 (x)a 2 (x)b p 3 r Ŝ : w1(x)a, r3(x)a, w2(x)b, r3(x)b.

Esempio 2 w 1 (x)a 2 (x)b p 3 r Ŝ : w2(x)b, r3(x)b, w1(x)a, r3(x)a .

Esempio 3 w 1 (x)a 2 (x)b p 3 4 r ERRORE

Esempio 4 (due variabili) w 1 (x )a 2 ( x )b p 3 r Ŝ= w1(x1)a, r2(x1)a, w2(x2)b, r3(x2)b, r3(x1)a

Causal Consistency (Ahamad 1991) DEF. Ĥi è il sottoinsieme di Ĥ costituito da tutte le scritture di Ĥ e da tutte le letture invocate dal processo pi. DEF. Data una Ĥ=(H,H), Ĥ è causalmente consistente se, per ogni processo pi, tutte le operazioni di lettura di Ĥi sono legali. Ogni processo può vedere una differente estensione lineare Ŝi dell’ordinamento parziale indotto da H.

Causal Consistency: Causality Order Relation o1co o2 se una delle seguenti condizioni è verificata: o1i o2 per qualche pi o1ro o2 (o1 legge il valore scritto da o2 )  o3 : o1co o3 e o3co o2 Se (o1co o2) e (o2co o1) , le due operazioni sono causalmente concorrenti, o1||co o2 .

Esempio 1 Ŝ1=w1(x)a, w2(x)b Ŝ2=w1(x)a, r2(x)a, w2(x)b 3 r Ŝ1=w1(x)a, w2(x)b Ŝ2=w1(x)a, r2(x)a, w2(x)b Ŝ3=w1(x)a, r3(x)a, w2(x)b, r3(x)b

CAUSALMENTE CONCORRENTI Esempio 2 CAUSALMENTE CONCORRENTI w 1 (x)a 2 (x)b p 3 4 r Scritture causalmente concorrenti possono essere viste da processi diversi in un qualsiasi ordine.

Esempio 3 ERRORE w1(x)acow2(x)b  ogni processo dovrà leggere prima a e poi b (NO il contrario)

Esempio 4 Ŝ1=w1(x)a, w1(x)c, w2(x)b Ŝ2=w1(x)a, r2(x)a, w1(x)c, w2(x)b Ŝ3=w1(x)a, r3(x)a, w1(x)c, r3(x)c, w2(x)b Ŝ4=w1(x)a, w1(x)c , r4(x)c, w2(x)b, r4(x)b

Esempio 5 ERRORE w1(x)aco w2(x)b

Esempio 6 (2 variabili) w1(x2)acow2(x2)b cow2(x1)c ERRORE w1(x2)acow2(x2)b cow2(x1)c Quando leggo x1=c, x2=a è già stato sovrascritto da x2=b.

PRAM (Pipelined RAM) DEF. Data Ĥ=(H,H) definiamo Ĥ’=(H’,H’) nel seguente modo: H’=H o1H’o2 se una delle seguenti condizioni è verificata:  pi : o1i o2 (process order) o1=wi(x)v e o2 =rj(x)v (read-from order)  o3 : o1i o3 e o3i o2 (DIFFERENTE da H)

PRAM (2) Sia Ĥ’i la sotto-history ottenuta da Ĥ’ eliminando tutte le operazioni di lettura non invocate da pi. DEF. Ĥ è PRAM consistente se, per ogni processo pi, tutte le letture di Ĥ’i sono legali.

Esempio 1 Ŝ1=w1(x)a, w2(x)b Ŝ2=w1(x)a, r2(x)a, w2(x)b Ŝ3=w2(x)b, r3(x)b, w1(x)a, r3(x)a

Esempio 2 NO PRAM CONSISTENT

Esempio 3 (2 variabili) PRAM CONSISTENT Ŝ1=w1(x1)a, w1(x2)c, w2(x2)b Ŝ2= w1(x1)a, w1 (x2)c, r2(x2)c, w2(x2)b Ŝ3=w2(x2)b,r3(x2)b, w1(x1)a, r3(x1)a, w1(x2)c, r3(x2)c

Confronto Tra i Criteri PRAM CAUSAL SEQUENTIAL LINEARIZABILITY

Confronto tra i criteri: Esempio 1 Ŝ1=w1(x)0, w1(x)1, w2(y)0, r1(y)0, w2(y)2, r1(y)2 Ŝ2= w1(x)0, w2(y)0, w2(y)2, r2(x)0, w1(x)1, r2(x)1 NO SEQUENTIAL, SI CAUSAL E PRAM

Confronto tra i criteri: Esempio 2 Ŝ1=w1(x)1, w1(y)2, w2(x)2, w2(z)3 Ŝ2= w1(x)1, w1(y)2, w2(x)2, r2(y)2, w2(z)3 Ŝ2= w2(x)2, w2(z)3, r3(z)3, r3(x)2, w1(x)1, r3(x)1, w1(y)2 NO SEQUENTIAL E CAUSAL, SI PRAM

Criteri Di Consistenza Protocolli

Memoria Distribuita Condivisa (DSM) Modello di comunicazione tra processi che fornisce l’illusione di un’unica memoria fisica basandosi su un sistema a scambio di messaggi. Physical memory Distributed shared memory

Memory Consistency System Application Process p1 Application Process p2 Application Process p2 response response response invocation invocation invocation DSM MCS at p1 MCS at p2 MCS at pn receive receive receive send send send NETWORK

Modello di sistema N computer su ognuno dei quali è in esecuzione un singolo processo (N processi sequenziali) Ogni processo ha una copia locale dello spazio di indirizzi condivisi (replicazione totale) I processi comunicano attraverso una rete di connessione Modello a scambio di messaggi Canali affidabili e asincroni (perfect link) No guasti Il modello di memoria condivisa viene implementato attraverso un insieme finito di processi sequenziali ={p1, p2,… pn}. Ogni processo è in esecuzione su un computer distinto. I processi comunicano scambiando messaggi attraverso una rete di connessione. I canali di comunicazione sono: affidabili: un qualsiasi messaggio spedito verrà ricevuto esattamente una volta e non sarà corrotto; asincroni: il ritardo subito da un messaggio non è noto a priori.

Memoria Condivisa Distribuita a Consistenza Sequenziale Protocollo local read: il risultato di una lettura viene restituito al processo applicativo dopo una computazione locale La copia locale delle variabili condivise è denotata copy dove copy[x] è la copia locale del var x. Quando pi riceve una richiesta di lettura dal corrispondente processo applicativo api, invia ad api il valore registrato nella sua copia locale della variabile che api vuole leggere. Quando pi riceve una richiesta di scrittura dal corrispondente processo applicativo api, invia attraverso una primitiva di total order brodcast un messaggio di update a tutti i processi nel sistema (anche a se stesso) Il messaggio di update contiene l’identificativo della variabile da modificare e il valore che deve essere scritto. Quando pi riceve un update, lo applica alla sua copia locale della variabile e se la richiesta di scrittura era stata generata dal suo processo applicativo, gli invia l’ack.

Procedure Il processo pi vuole leggere 1. when readi(x) occurs: 2. enable returni(copy[x]) Il processo pi vuole scrivere 1. when (x write (v)) occurs: 2. tbc-sendi(x,v) Il processo pi riceve un aggiornamento 1. when tbc-recvi(x,v) from pj 2. copy[x]:=v 3. If i=j then ok()

Memoria Condivisa Distribuita a Consistenza Causale (Ahamad) Strutture Dati Locali al processo pi: Una copia privata della memoria condivisa (astrazione) M Un vector clock Writeco[1..n]: array di interi di dimensione n, inizializzato a tutti 0. Ogni scrittura è associata ad un Writeco (wi(x)a.Writeco ). Usato come timestamp per i messaggi di aggiornamento. Dati due vector clock W1 e W2 , W1 W2   i W1 [i]  W2[i] Dati due vector clock W1 e W2 , W1< W2   i W1 [i]  W2[i] ed  j tale che W1 [i] < W2[i]. Per tener traccia delle dipendenze di happened-before tra gli eventi della computazione distribuita viene usato un sistema di vector clock adattati. Ogni processo pi gestisce localmente un proprio vector clock Writeco[1..n] inizializzato a tutti zeri. Tale vector clock viene usato come timestamp nei messaggi di aggiornamento associati alle scritture. Il Writeco inserito nei messaggi di aggiornamento è denotato Wco Il processo pi aggiorna il suo Writeco nel seguente modo: Quando pi scrive, incrementa di uno la locazione i-esima del vector clock, Writeco[i]:=Writeco[i]+1. Quando pi applica la scrittura wj(x)v ,aggiorna la j-esima locazione del suo vector clock ponendola uguale al valore della j-esima locazione del vector clock contenuto nel corrispondente messaggio di aggiornamento , Writeco[j]:= Wco[j].

Procedure Eseguite da pi Scrittura Lettura SCRITTURA Quando un processo pi invoca un’operazione di scrittura wi(x)v esegue atomicamente i passi 1,2,3 della procedura di scrittura. Nel dettaglio: incrementa la i-esima locazione del suo vector clock per tener traccia del process order invia il messaggio di aggiornamento a tutti gli altri processi nel sistema. Il messaggio di aggiornamento contiene le seguenti informazioni: la variabile che deve essere aggiornata,xh, il valore con il quale aggiornarla,v, e il valore corrente del vector clock locale a pi, Writeco (denotato Wco) applica l’aggiornamento alla copia locale della memoria. LETTURA Quando un processo pi invoca un’operazione di lettura ri(x)v, gli viene restituito il valore registrato nella locazione x della copia locale della memoria.

Thread di Sincronizzazione Ogni volta che un messaggio di aggiornamento m(xh,v,Wco) associato a wu(xh)v e inviato dal processo pu arriva al destinatario pi, viene attivato un nuovo thread di sincronizzazione. Il codice di tale thread è quello mostrato nella slide. Nel dettaglio: il thread attende fino a quando la condizione alla linea 2 non è verificata, in modo tale da garantire il rispetto della relazione di causalità tra le operazioni. In particolare, si verifica che ogni componente del vector clock locale a pi, fatta eccezione per la u-esima, sia maggiore o uguale alla corrispondente locazione del vector clock contenuto nel messaggio di aggiornamento: Wco[t] Writeco[t] tu. In questo modo, si verifica che il processo pi prima di applicare wu(xh)v abbia applicato tutte le scritture applicate dal processo pu prima di invocare wu(xh)v. Analogamente il controllo della condizione Writeco[u]= Wco[u]+1 serve a garantire il process order. In pratica il processo pi può applicare la k-esima scrittura di pu solo se ha già applicato la (k-1)-esima scrittura di pu e per induzione tutte quelle che la precedono causalmente. Una volta verificata la condizione, viene aggiornata la u-esima locazione del vector clock per tener traccia della nuova scrittura applicata e viene infine aggiornata la copia della locazione xh locale a pi.

Scenario Di Funzionamento (1) Dato lo scenario in figura abbiamo: ĥ1=w1(x)a; ĥ2= r2(x)a, w2(x)b; ĥ3= r3(x)a,r3(x)b; Poiché w1(x)aror2(x)a e r2(x)a 2 w2(x)b si ha w1(x)acow2(x)b. Nessun processo deve poter leggere prima x=b e poi x=a. Quando il processo p1 scrive w1(x)a incrementa la prima locazione del suo vector clock locale che diventa [1,0,0] e lo inserisce nel messaggio di aggiornamento che spedisce agli altri processi. I processi p2 e p3 possono applicare l’aggiornamento contenuto nel messaggio in quanto il corrispondente vector clock soddisfa la condizione di wait del thread di sincronizzazione (pag 45 linea 2). Aggiornano la copia locale della memoria e i loro vector clock , ponendoli uguali a [1,0,0] (per tener traccia della scritture applicate alle proprie copie locali della memoria). Analogamente quando il processo p2 scrive, incrementa di uno la locazione 2 del suo vector clock locale (per tener traccia del process order),che diventa [1,1,0]. Successivamente spedisce il messaggio di aggiornamento a tutti gli altri processi. Quando p1 e p3 ricevono il messaggio di p2, prima di poter applicare il corrispondente update, devono assicurarsi di aver effettuato tutti gli aggiornamenti applicati da p2 alla sua copia locale della memoria fino all’istante in cui ha invocato w2(x)b. In pratica, p1 e p3 devono aver applicato almeno le stesse scritture applicate da p2 fino all’invocazione di w2(x)b, quindi anche w1(x)a. In questo modo, quando un qualsiasi processo applicherà il valore b alla sua copia locale della memoria, il valore a sarà stato sovrascritto e quindi nessuno potrà leggere prima a e poi b. Si noti che in questo scenario i messaggi di aggiornamento arrivano ordinati.

Scenario Di Funzionamento (2) La computazione mostrata in figura genera la stessa Execution Hystory di quella generata nella computazione di pag 46. Questa volta però i messaggi di aggiornamento non arrivano in maniera ordinata. In particolare, quando il processo p3 riceve il messaggio di aggiornamento relativo a w2(x)b non può applicarlo in quanto dall’analisi del vector clock si rende conto di aver perso una scrittura del processo p1, w1(x)a, quindi bufferizza il messaggio e attende fino a quando non avrà applicato w1(x)a. Una volta applicato l’aggiornamento corrispondente a w1(x)a, p3 potrà applicare anche w2(x)b. Questa sincronizzazione assicura che la computazione genererà soltanto Execution Hystory causalmente consistenti.