Si consideri un programma distribuito che simuli il comportamento di un sistema bancario in cui:
Il sistema è caratterizzato da un system value dato da somma di denaro dei vari conti e di quello in transito tra i conti.
Il programma deve essere in grado di determinare il system value in ogni processo del sistema senza interrompere la normale esecuzione del programma.
Il programma termina quando il system value è noto a tutti i processi del sistema.
Il deposito di ciascun processo è scelto in maniera casuale.
Allo stato iniziale tutti i processi sono nello stato RUNNING.
Le somme di denaro scambiate tra i processi sono scelte in maniera casuale.
Ad un certo istante (random) occorre determinare il system value.
Ciò può essere fatto utilizzando l’algoritmo di Chandy-Lamport.
Il processo 0 avvia l’algoritmo
Lo stato del processo 0 passa da RUNNING a SNAPPING
Gli altri processi cambiano stato da RUNNING a SNAPPING quando ricevono un messaggio snap
Quando un processo cambia il suo stato in SNAPPING:
Il programma continua finché ciascun processo non abbia determinato il valore finale di totalValue.
Ciascun processo controlla il numero di messaggi snap che deve ancora ricevere (missingSnaps) dai processi vicini (cioè su tutti i canali di ingresso).
Quando un processo ha determinato il proprio valore finale di snapValue si porta nello stato BROADCASTING ed invia tale valore (ed il suo id) in broadcast e continua le operazioni.
Alla ricezione dello snapValue di un altro processo, se questo non è già stato ricevuto, il valore contenuto viene sommato al totalValue e inoltrato ai vicini.
Ciascun processo attende di ricevere gli snapValue da tutti gli altri processi del sistema (missingValues), determina il valore definitivo di totalValue (che rappresenta il system value) e si porta nello stato TERMINATED.
Tutti i processi devono avere lo stesso totalValue:
Si consideri una implementazione dell’algoritmo Snaphot di Chandy-Lamport in Java.
Si utilizzano più thread per
L’accesso ai canali ed alle variabili rappresentanti lo stato locale di ciascun processo avviene in maniera concorrente:
Ciascun processo può sia inviare che ricevere messaggi, funge quindi sia da client che da server:
1. Caratterizzazione dei sistemi distribuiti
2. Modelli di sistemi distribuiti
3. Tempo e sincronizzazione nei Sistemi Distribuiti
4. Stato globale nei Sistemi Distribuiti
5. Problemi di consenso nei sistemi distribuiti
7. Algoritmi di mutua esclusione nei sistemi distribuiti
8. Algoritmi di elezione nei sistemi distribuiti
10. Il Network File System di SUN Microsystems
11. AFS (Andrew File System) e GFS (Google File System)
12. Transazioni e controllo di concorrenza
13. Transazioni
15. Affidabilità (dependability) dei sistemi software distribuiti
16. Affidabilità dei sistemi software distribuiti
17. Software Faults
18. Classificazione e analisi dei difetti software