Κατανεµηµένα Συστήµατα Ι Μάθηµα Βασικής Επιλογής, Χειµερινού Εξαµήνου Τοµέας Εφαρµογών και Θεµελιώσεων Ιωάννης Χατζηγιαννάκης ευτέρα, 12 Ιανουαρίου, 2009 Αίθουσα Β3 Κατανεµηµένα Συστήµατα Ι ΤΜΗΥΠ/ΠΠ, Τρίτη 12 Ιανουαρίου 2009 1 / 51
1ο Εργαστήριο: Υλοποίηση Αλγόριθµων Εκλογής Αρχηγού Πρόβληµα Εκλογής Αρχηγού Η εκλογή αρχηγού σε ένα δίκτυο απαιτεί την επιλογή µιας µοναδικής διεργασίας που ϑα ϐρεθεί στην κατάσταση αρχηγός (ή εκλεγµένη ) ενώ όλες οι άλλες διεργασίες ϐρίσκονται στην κατάσταση µη-αρχηγός (ή µη εκλεγµένη ). ύο τύποι δικτύων: ίκτυα ακτυλίου, Γενικά ίκτυα Τρείς αλγόριθµοι: LCR, FloodMax, OptFloodMax Κατανεµηµένα Συστήµατα Ι ΤΜΗΥΠ/ΠΠ, Τρίτη 12 Ιανουαρίου 2009 2 / 51
1ο Εργαστήριο: Συµπεράσµατα Ποιά ήταν τα πειραµατικά αποτελέσµατα ; Σε τι διαφέρουν απο τα ϑεωρητικά αποτελέσµατα ; Κατανεµηµένα Συστήµατα Ι ΤΜΗΥΠ/ΠΠ, Τρίτη 12 Ιανουαρίου 2009 3 / 51
1ο Εργαστήριο: Συµπεράσµατα Ταυτόχρονη εκκίνηση διεργασιών. Συγχρονισµένη εκτέλεση ϐηµάτων. εν είναι σαφές τι είναι ενα ϐήµα. Τα ϱολόγια των διεργασιών δεν ειναι συγχρονισµένα. ιαχείρηση συµβάντων λειτουργικού συστήµατος. Χρήση timer. Υλοποίηση OptFloodMax. Εκτέλεση γενικού αλγόριθµου σε ειδική τοπολογία. Κατανεµηµένα Συστήµατα Ι ΤΜΗΥΠ/ΠΠ, Τρίτη 12 Ιανουαρίου 2009 4 / 51
2ο Εργαστήριο: Υλοποίηση Αλγόριθµων Κατασκευής Επικαλυπτικών έντρων Πρόβληµα Κατασκευής Επικαλυπτικού ένδρου Ενα επικαλυπτικό δέντρο T(G) ενός δικτύου G περιέχει όλες τις διεργασίες του δικτύου (κορυφές) και ορισµένα (ίσως όλα) κανάλια επικοινωνίας (ακµές). Η κατασκευή ενός επικαλυπτικού δέντρου προυποθέτει την επιλογή µιας διεργασίας u 0 που ϑα είναι η ϱίζα του δέντρου T(G). Γενικά ίκτυα Τρείς αλγόριθµοι: SpanningTree, SpanningTreeHeight, BFS Κατανεµηµένα Συστήµατα Ι ΤΜΗΥΠ/ΠΠ, Τρίτη 12 Ιανουαρίου 2009 5 / 51
2ο Εργαστήριο: Συµπεράσµατα Ποιά ήταν τα πειραµατικά αποτελέσµατα ; Σε τι διαφέρουν απο τα ϑεωρητικά αποτελέσµατα ; Κατανεµηµένα Συστήµατα Ι ΤΜΗΥΠ/ΠΠ, Τρίτη 12 Ιανουαρίου 2009 6 / 51
2ο Εργαστήριο: Συµπεράσµατα Απώλεια µηνυµάτων. Απόκληση από τις ϑεωρητικές πολυπλοκότητες. Σεβασµός στα Interface. Κατανεµηµένα Συστήµατα Ι ΤΜΗΥΠ/ΠΠ, Τρίτη 12 Ιανουαρίου 2009 7 / 51
Αλγόριθµοι Συναίνεσης Πρόβληµα Συναίνεσης Σε ένα σύγχρονο δίκτυο G, η συναίνεση απαιτεί την κοινή επιλογής µιας µοναδικής τιµής απο όλες τις διεργασίες του συστήµατος. Οταν οι διεργασίες καταλήξουν σε µια κοινά αποδεκτή απόφαση, όλες οι διεργασίες τερµατίζουν. Οι διεργασίες ξεκινούν µε µία αρχική τιµή, την επεξεργάζονται και εξάγουν µια τελική τιµή εκτελούν έναν κατανεµηµένο αλγόριθµο συναίνεσης αποφασίζουν απο κοινού µια µοναδική τιµή Η απόφαση είναι κοινή π.χ. µια διεργασία µε τιµή ναι, πως µπορεί να δεχτεί µια κοινή απόφαση όχι ; Κατανεµηµένα Συστήµατα Ι ΤΜΗΥΠ/ΠΠ, Τρίτη 12 Ιανουαρίου 2009 8 / 51
Παράδειγµα Αυτόµατου Αλγόριθµου Συναίνεσης Παράδειγµα διεργασίας που συµµετέχει στην εκτέλεση ενός κατανεµηµένου αλγόριθµου συναίνεσης Η κατάσταση της P u καθορίζεται από Η διεργασία P u init(v) u decide(v) u τις τιµές των άλλων διεργασιών αν έχει ανακοινώσει την απόφαση της Οι ενέργειες εισόδου είναι της µορφής init(v) u και receive(m) v,u Οι ενέργειες εξόδου είναι της µορφής decide(v) u και send(m) u,v send(m) u,v P u receive(m) v,u Κατανεµηµένα Συστήµατα Ι ΤΜΗΥΠ/ΠΠ, Τρίτη 12 Ιανουαρίου 2009 9 / 51
Είσοδος/ Εξοδος στα ανώτερα επίπεδα (1) Ορίζουµε το interface ConsensusControl ως εξής: command result_t init(uint16_t deviceid, uint8_t value) αρχικοποιεί τις εσωτερικές µεταβλητές του αλγόριθµου. Η παράµετρος deviceid υποδηλώνει την ταυτότητα που ϑα χρησιµοποιήσει η διεργασία. Η παράµετρος value υποδηλώνει την τιµή εισόδου που ϑα χρησιµοποιήσει η διεργασία ως είσοδο. Το command επιστρέφει πάντα SUCCESS. command result_t start() ξεκινά τη διαδικασία συναίνεσης. Επιστρέφει πάντα SUCCESS. Κατανεµηµένα Συστήµατα Ι ΤΜΗΥΠ/ΠΠ, Τρίτη 12 Ιανουαρίου 2009 10 / 51
Είσοδος/ Εξοδος στα ανώτερα επίπεδα (2) command uint8_t getvalue() επιστρέφει την τιµή που αποφασίσαν οι διεργασίες, αλλιώς UNKNOWN_VALUE αν η διαδικασία συναίνεσης δεν έχει ολοκληρωθεί. event result_t done(uint8_t value) όταν ο αλγόριθµος συναίνεσης ολοκληρωθεί, δηµιουργείται ένα event όπου η παράµετρος value δηλώνει την κοινή τιµή που αποφάσισαν οι διεργασίες. Το event επιστρέφει πάντα SUCCESS. Κατανεµηµένα Συστήµατα Ι ΤΜΗΥΠ/ΠΠ, Τρίτη 12 Ιανουαρίου 2009 11 / 51
ConsensusControl.nc i n t e r f a c e ConsensusControl { async command r e s u l t _ t i n i t ( u i n t 1 6 _ t deviceid, u i n t 8 _ t value ) ; async command u i n t 8 _ t getvalue ( ) ; async command r e s u l t _ t s t a r t ( ) ; event r e s u l t _ t done ( u i n t 8 _ t value ) ; Κατανεµηµένα Συστήµατα Ι ΤΜΗΥΠ/ΠΠ, Τρίτη 12 Ιανουαρίου 2009 12 / 51
Κατανεµηµένη Συναίνεση Αλγόριθµος Συναίνεσης SimpleConsensus Κάθε διεργασία u [1, n] διατηρεί µια λίστα l u µε Ϲεύγη από ταυτότητες και τιµές εισόδου, η οποία αρχικά περιέχει ένα µόνο Ϲεύγος, την ταυτότητα της u και την τιµή εισόδου i u S. Σε κάθε γύρο, οι διεργασίες εκπέµπουν την λίστα l σε όλους τους γείτονες. Μόλις λάβουν µία λίστα l v απο κάποιον γείτονα v, την ενοποιούν µε την δικιά τους. Μετά απο δ + 1 γύρους, όλες οι διεργασίες διατηρούν µια λίστα που περιέχει ένα Ϲεύγος (u, i u ) για κάθε διεργασία του συστήµατος. Εφαρµόζουν τους κανόνες συναίνεσης και τερµατίζουν επιστρέφοντας την κοινή τιµή εξόδου o S. Κάθε διεργασία γνωρίζει τη δοµή του γραφήµατος G Ο αλγόριθµος λύνει το πρόβληµα της συναίνεσης Κατανεµηµένα Συστήµατα Ι ΤΜΗΥΠ/ΠΠ, Τρίτη 12 Ιανουαρίου 2009 13 / 51
Παράδειγµα Εκτέλεσης Αλγόριθµου SimpleConsensus Εστω ένα σύγχρονο γενικό δίκτυο όπου n = 6 και δ = 2. Οι διεργασίες έχουν µια τιµή εισόδου (ϱοζ κουτί) Οι διεργασίες διατηρούν µια λίστα (µπλέ κουτί) Οι διεργασίες έχουν µια τιµή εξόδου (κίτρινο κουτί) Ο κανόνας συναίνεσης ϐασίζεται σε απλή πλειοψηφία Γενικό ίκτυο Κατανεµηµένα Συστήµατα Ι ΤΜΗΥΠ/ΠΠ, Τρίτη 12 Ιανουαρίου 2009 14 / 51
Παράδειγµα Εκτέλεσης Αλγόριθµου SimpleConsensus Εστω ένα σύγχρονο γενικό δίκτυο όπου n = 6 και δ = 2. Οι διεργασίες έχουν µια τιµή εισόδου (ϱοζ κουτί) Οι διεργασίες διατηρούν µια λίστα (µπλέ κουτί) Οι διεργασίες έχουν µια τιµή εξόδου (κίτρινο κουτί) Ο κανόνας συναίνεσης ϐασίζεται σε απλή πλειοψηφία 1ος Γύρος αποστολή µηνυµάτων Κατανεµηµένα Συστήµατα Ι ΤΜΗΥΠ/ΠΠ, Τρίτη 12 Ιανουαρίου 2009 14 / 51
Παράδειγµα Εκτέλεσης Αλγόριθµου SimpleConsensus Εστω ένα σύγχρονο γενικό δίκτυο όπου n = 6 και δ = 2. Οι διεργασίες έχουν µια τιµή εισόδου (ϱοζ κουτί) Οι διεργασίες διατηρούν µια λίστα (µπλέ κουτί) Οι διεργασίες έχουν µια τιµή εξόδου (κίτρινο κουτί) Ο κανόνας συναίνεσης ϐασίζεται σε απλή πλειοψηφία 1ος Γύρος επεξεργασία Κατανεµηµένα Συστήµατα Ι ΤΜΗΥΠ/ΠΠ, Τρίτη 12 Ιανουαρίου 2009 14 / 51
Παράδειγµα Εκτέλεσης Αλγόριθµου SimpleConsensus Εστω ένα σύγχρονο γενικό δίκτυο όπου n = 6 και δ = 2. Οι διεργασίες έχουν µια τιµή εισόδου (ϱοζ κουτί) Οι διεργασίες διατηρούν µια λίστα (µπλέ κουτί) Οι διεργασίες έχουν µια τιµή εξόδου (κίτρινο κουτί) Ο κανόνας συναίνεσης ϐασίζεται σε απλή πλειοψηφία 2ος Γύρος αποστολή µηνυµάτων Κατανεµηµένα Συστήµατα Ι ΤΜΗΥΠ/ΠΠ, Τρίτη 12 Ιανουαρίου 2009 14 / 51
Παράδειγµα Εκτέλεσης Αλγόριθµου SimpleConsensus Εστω ένα σύγχρονο γενικό δίκτυο όπου n = 6 και δ = 2. Οι διεργασίες έχουν µια τιµή εισόδου (ϱοζ κουτί) Οι διεργασίες διατηρούν µια λίστα (µπλέ κουτί) Οι διεργασίες έχουν µια τιµή εξόδου (κίτρινο κουτί) Ο κανόνας συναίνεσης ϐασίζεται σε απλή πλειοψηφία 2ος Γύρος επεξεργασία Κατανεµηµένα Συστήµατα Ι ΤΜΗΥΠ/ΠΠ, Τρίτη 12 Ιανουαρίου 2009 14 / 51
Παράδειγµα Εκτέλεσης Αλγόριθµου SimpleConsensus Εστω ένα σύγχρονο γενικό δίκτυο όπου n = 6 και δ = 2. Οι διεργασίες έχουν µια τιµή εισόδου (ϱοζ κουτί) Οι διεργασίες διατηρούν µια λίστα (µπλέ κουτί) Οι διεργασίες έχουν µια τιµή εξόδου (κίτρινο κουτί) Ο κανόνας συναίνεσης ϐασίζεται σε απλή πλειοψηφία 3ος Γύρος αποστολή µηνυµάτων Κατανεµηµένα Συστήµατα Ι ΤΜΗΥΠ/ΠΠ, Τρίτη 12 Ιανουαρίου 2009 14 / 51
Παράδειγµα Εκτέλεσης Αλγόριθµου SimpleConsensus Εστω ένα σύγχρονο γενικό δίκτυο όπου n = 6 και δ = 2. Οι διεργασίες έχουν µια τιµή εισόδου (ϱοζ κουτί) Οι διεργασίες διατηρούν µια λίστα (µπλέ κουτί) Οι διεργασίες έχουν µια τιµή εξόδου (κίτρινο κουτί) Ο κανόνας συναίνεσης ϐασίζεται σε απλή πλειοψηφία 3ος Γύρος επεξεργασία Κατανεµηµένα Συστήµατα Ι ΤΜΗΥΠ/ΠΠ, Τρίτη 12 Ιανουαρίου 2009 14 / 51
Παράδειγµα Εκτέλεσης Αλγόριθµου SimpleConsensus Εστω ένα σύγχρονο γενικό δίκτυο όπου n = 6 και δ = 2. Οι διεργασίες έχουν µια τιµή εισόδου (ϱοζ κουτί) Οι διεργασίες διατηρούν µια λίστα (µπλέ κουτί) Οι διεργασίες έχουν µια τιµή εξόδου (κίτρινο κουτί) Ο κανόνας συναίνεσης ϐασίζεται σε απλή πλειοψηφία 3ος Γύρος απόφαση Κατανεµηµένα Συστήµατα Ι ΤΜΗΥΠ/ΠΠ, Τρίτη 12 Ιανουαρίου 2009 14 / 51
Χαρακτηριστικά του Αλγόριθµου SimpleConsensus Σε ένα σύγχρονο δίκτυο G µε n διεργασίες και m κανάλια Στο τέλος του γύρου δ κάθε διεργασία u [1, n] διατηρεί µια λίστα l u = {(1, i 1 ), (2, i 2 ),..., (n, i n ) Ολες οι διεργασίες έχουν κοινές λίστες, δηλ. u [1, n] : l u = l Η χρονική πολυπλοκότητα είναι O (diam(g)) Η πολυπλοκότητα επικοινωνίας είναι O (diam(g) m) Η πολυπλοκότητα επικοινωνίας σε bit είναι O (diam(g) n m) Κατανεµηµένα Συστήµατα Ι ΤΜΗΥΠ/ΠΠ, Τρίτη 12 Ιανουαρίου 2009 15 / 51
SimpleConsensusM.nc module SimpleConsensusM { p r o v i d e s { i n t e r f a c e ConsensusControl ; uses { i n t e r f a c e SendMsg ; i n t e r f a c e ReceiveMsg ; i n t e r f a c e T i m e r ; Κατανεµηµένα Συστήµατα Ι ΤΜΗΥΠ/ΠΠ, Τρίτη 12 Ιανουαρίου 2009 16 / 51
SimpleConsensusM.nc enum { UNKNOWN_VALUE = 254, TOT_NODES = 5, TOT_ROUNDS = 2 ; implementation { u i n t 1 6 _ t m_id ; u i n t 8 _ t m _ i n i t V a l u e ; u i n t 8 _ t m_values [ TOT_NODES ] ; u i n t 8 _ t m_decision ; u i n t 8 _ t m_msgcount ; TOS_Msg m_msg ; / /... Κατανεµηµένα Συστήµατα Ι ΤΜΗΥΠ/ΠΠ, Τρίτη 12 Ιανουαρίου 2009 17 / 51
οµή Μηνυµάτων /opt/tinyos-1.x/tos/types/am.h # define TOSH_DATA_LENGTH 29 typedef s t r u c t TOS_Msg { u i n t 1 6 _ t addr ; u i n t 8 _ t type ; u i n t 8 _ t group ; u i n t 8 _ t length ; i n t 8 _ t data [ TOSH_DATA_LENGTH ] ; u i n t 1 6 _ t crc ; u i n t 1 6 _ t s t r e n g t h ; u i n t 8 _ t ack ; u i n t 1 6 _ t time ; u i n t 8 _ t sendsecuritymode ; u i n t 8 _ t receivesecuritymode ; TOS_Msg ; Κατανεµηµένα Συστήµατα Ι ΤΜΗΥΠ/ΠΠ, Τρίτη 12 Ιανουαρίου 2009 18 / 51
οµή Μηνυµάτων του SimpleConsensusM ConsensusMsg.h typedef s t r u c t ConsensusMsg { u i n t 1 6 _ t i d ; u i n t 8 _ t values [ TOT_NODES ] ; ConsensusMsg ; enum { AM_CONSENSUSMSG = 16 ; Κατανεµηµένα Συστήµατα Ι ΤΜΗΥΠ/ΠΠ, Τρίτη 12 Ιανουαρίου 2009 19 / 51
Ουρά FIFO µε µηνύµατα Το TinyOS υλοποιεί ένα component για την τοποθέτηση µηνυµάτων σε FIFO ουρά. Προσφέρει το interface SendMsg και απαιτεί ένα interface SendMsg Στην ουσία το συνδέουµε στο interface SendMsg του αλγορίθµου µε το interface SendMsg του GenericComm Κάθε ϕορά που κάνουµε send το µήνυµα µπαίνει αυτόµατα στην ουρά η ουρά αναλαµβάνει την τελική αποστολή Κατανεµηµένα Συστήµατα Ι ΤΜΗΥΠ/ΠΠ, Τρίτη 12 Ιανουαρίου 2009 20 / 51
ιασύνδεση SimpleConsensus.nc c o n f i g u r a t i o n SimpleConsensus { p r o v i d e s i n t e r f a c e S t d C o n t r o l ; p r o v i d e s i n t e r f a c e ConsensusControl ; implementation { components SimpleConsensusM, QueuedSend, GenericComm, TimerC ; SimpleConsensusM. SendMsg > QueuedSend. SendMsg [ AM_CONSENSUSMS SimpleConsensusM. ReceiveMsg > GenericComm. ReceiveMsg [AM_CON SimpleConsensusM. T i mer > TimerC. T i m e r [ unique ( " T imer " ) ] ; S t d C o n t r o l = GenericComm ; S t d C o n t r o l = QueuedSend ; ConsensusControl = SimpleConsensusM ; Κατανεµηµένα Συστήµατα Ι ΤΜΗΥΠ/ΠΠ, Τρίτη 12 Ιανουαρίου 2009 21 / 51
SimpleConsensusM.nc async command r e s u l t _ t ConsensusControl. i n i t ( u i n t 1 6 _ t deviceid, u i n t 8 _ t value ) { u i n t 8 _ t i ; atomic { m_id = deviceid ; m _ i n i t V a l u e = value ; m_ decision = UNKNOWN_VALUE ; m_msgcount = 0 ; / / I n i t i a l i z e a r r a y f o r ( i = 0 ; i <TOT_NODES ; i ++) m_values [ i ] = UNKNOWN_VALUE ; dbg ( DBG_TEMP, " SimpleConsensus : i n i t i a l i z e d. \ n " ) ; r e t u r n SUCCESS ; Κατανεµηµένα Συστήµατα Ι ΤΜΗΥΠ/ΠΠ, Τρίτη 12 Ιανουαρίου 2009 22 / 51
SimpleConsensusM.nc async command r e s u l t _ t ConsensusControl. s t a r t ( ) { u i n t 8 _ t d e c i s i o n ; atomic d e c i s i o n = m_decision ; / / Check i f already f i n i s h e d i f ( d e c i s i o n! = UNKNOWN_VALUE) r e t u r n F A I L ; atomic m_values [ m_id ] = m _ i n i t V a l u e ; dbg ( DBG_TEMP, " SimpleConsensus : s t a r t e d w i t h i n i t i a l value %d / / S t a r t the t i m e r c a l l T i m e r. s t a r t ( TIMER_REPEAT, 1 0 0 0 ) ; r e t u r n SUCCESS ; Κατανεµηµένα Συστήµατα Ι ΤΜΗΥΠ/ΠΠ, Τρίτη 12 Ιανουαρίου 2009 23 / 51
SimpleConsensusM.nc event r e s u l t _ t T i m e r. f i r e d ( ) { u i n t 1 6 _ t msgcount ; atomic msgcount = m_msgcount ; / / Check i f number of t o t a l t r a n s m i t i o n s reached i f ( msgcount > TOT_ROUNDS ) { c a l l T i m e r. stop ( ) ; post reportdone ( ) ; r e t u r n SUCCESS ; post sendmessage ( ) ; r e t u r n SUCCESS ; Κατανεµηµένα Συστήµατα Ι ΤΜΗΥΠ/ΠΠ, Τρίτη 12 Ιανουαρίου 2009 24 / 51
SimpleConsensusM.nc t a s k void sendmessage ( ) { / / Access message body ConsensusMsg msgdata = ( ConsensusMsg ) m_msg. data ; u i n t 8 _ t i ; / / Set message contents msgdata >i d = m_id ; atomic f o r ( i = 0 ; i <TOT_NODES ; i ++) msgdata >values [ i ] = m_values [ i ] ; / / T r y to send the message c a l l SendMsg. send ( TOS_BCAST_ADDR, s i z e o f ( ConsensusMsg ), &m_m Κατανεµηµένα Συστήµατα Ι ΤΜΗΥΠ/ΠΠ, Τρίτη 12 Ιανουαρίου 2009 25 / 51
SimpleConsensusM.nc event r e s u l t _ t SendMsg. senddone ( TOS_MsgPtr msg, bool success ) atomic m_msgcount + +; r e t u r n SUCCESS ; Κατανεµηµένα Συστήµατα Ι ΤΜΗΥΠ/ΠΠ, Τρίτη 12 Ιανουαρίου 2009 26 / 51
SimpleConsensusM.nc t a s k void sendmessage ( ) { / / Access message body ConsensusMsg msgdata = ( ConsensusMsg ) m_msg. data ; u i n t 8 _ t i ; / / Set message contents msgdata >i d = m_id ; atomic f o r ( i = 0 ; i <TOT_NODES ; i ++) msgdata >values [ i ] = m_values [ i ] ; / / T r y to send the message c a l l SendMsg. send ( TOS_BCAST_ADDR, s i z e o f ( ConsensusMsg ), &m_m Κατανεµηµένα Συστήµατα Ι ΤΜΗΥΠ/ΠΠ, Τρίτη 12 Ιανουαρίου 2009 27 / 51
SimpleConsensusM.nc event TOS_MsgPtr ReceiveMsg. r e c e i v e ( TOS_MsgPtr recv_ packet ) { / / Access message body ConsensusMsg msgdata = ( ConsensusMsg ) recv_packet >data ; u i n t 8 _ t i ; / / Merge received s e t w i t h l o c a l copy atomic f o r ( i = 0 ; i < TOT_NODES ; i ++) { i f ( msgdata >values [ i ]! = UNKNOWN_VALUE) m_values [ i ] = msgdata >values [ i ] ; r e t u r n recv_packet ; Κατανεµηµένα Συστήµατα Ι ΤΜΗΥΠ/ΠΠ, Τρίτη 12 Ιανουαρίου 2009 28 / 51
SimpleConsensusM.nc t a s k void reportdone ( ) { u i n t 8 _ t i, decision, maxvalue, allsame ; atomic { allsame = 0 ; maxvalue = m_values [ 0 ] ; d e c i s i o n = m_values [ 0 ] ; f o r ( i = 1 ; i < TOT_NODES ; i ++) { i f ( m_values [ i ] > maxvalue ) maxvalue = m_values [ i ] ; i f ( m_values [ i ]! = d e c i s i o n ) allsame = 1 ; i f ( allsame == 1) d e c i s i o n = maxvalue ; m_decision = d e c i s i o n ; s i g n a l ConsensusControl. done ( d e c i s i o n ) ; Κατανεµηµένα Συστήµατα Ι ΤΜΗΥΠ/ΠΠ, Τρίτη 12 Ιανουαρίου 2009 29 / 51
SimpleConsensusM.nc async command u i n t 8 _ t ConsensusControl. getvalue ( ) { r e t u r n m_decision ; Κατανεµηµένα Συστήµατα Ι ΤΜΗΥΠ/ΠΠ, Τρίτη 12 Ιανουαρίου 2009 30 / 51
οκιµαστική Εφαρµογή Θέλουµε µια απλή εφαρµογή για να ελέγξουµε τον αλγόριθµο Να µετρήσουµε την απόδοση του σε διαφορετικές τοπολογιες Η εφαρµογή δίνει µια ταυτότητα στον αλγόριθµο και όταν τελειώσει εξάγει το αποτέλεσµα χρησιµοποιώντας καποια LED Κατανεµηµένα Συστήµατα Ι ΤΜΗΥΠ/ΠΠ, Τρίτη 12 Ιανουαρίου 2009 31 / 51
Χρήση Timer Εφόσον έχουµε να κάνουµε µε ένα ασύγχρονο σύστηµα, υπάρχει περίπτωση οι συσκευές να µη ξεκινήσουν ταυτόχρονα αλλά να υπάρχει µια χρονική καθυστέρηση. Θέλουµε να εξασφαλίσουµε ότι όλες οι συσκευές του συστήµατος είναι ενεργοποιηµένες και συµµετέχουν στην εκλογή αρχηγού. Χρησιµοποιούµε ένα Timer για να καθυστερήσουµε την εκτέλεση του αλγόριθµου. Κατανεµηµένα Συστήµατα Ι ΤΜΗΥΠ/ΠΠ, Τρίτη 12 Ιανουαρίου 2009 32 / 51
lab3appm.nc module lab3appm { p r o v i d e s { i n t e r f a c e S t d C o n t r o l ; uses { i n t e r f a c e ConsensusControl ; i n t e r f a c e Leds ; i n t e r f a c e T i m e r ; implementation { u i n t 8 _ t m_values [ 2 0 ] = { 0, 1, 1, 0, 1, 1, 1, 0, 2, 1, 0, 1, 1, 0, 2, 1 ; Κατανεµηµένα Συστήµατα Ι ΤΜΗΥΠ/ΠΠ, Τρίτη 12 Ιανουαρίου 2009 33 / 51
lab3appm.nc command r e s u l t _ t S t d C o n t r o l. i n i t ( ) { c a l l Leds. i n i t ( ) ; c a l l ConsensusControl. i n i t ( TOS_LOCAL_ADDRESS, m_values [ TOS_LOCAL_ADDRESS ] ) ; r e t u r n SUCCESS ; command r e s u l t _ t S t d C o n t r o l. s t a r t ( ) { r e t u r n c a l l T i m e r. s t a r t ( TIMER_ONE_SHOT, 3 0 0 0 ) ; command r e s u l t _ t S t d C o n t r o l. stop ( ) { r e t u r n c a l l T i m e r. stop ( ) ; Κατανεµηµένα Συστήµατα Ι ΤΜΗΥΠ/ΠΠ, Τρίτη 12 Ιανουαρίου 2009 34 / 51
lab3appm.nc event r e s u l t _ t T i m e r. f i r e d ( ) { post s t a r t C o n s e n s u s ( ) ; r e t u r n SUCCESS ; t a s k void s t a r t C o n s e n s u s ( ) { / / S t a r t the consensus process c a l l ConsensusControl. s t a r t ( ) ; c a l l Leds. redon ( ) ; dbg ( DBG_TEMP, " D i s t r i b u t e d consensus process s t a r t e d. \ n " ) ; Κατανεµηµένα Συστήµατα Ι ΤΜΗΥΠ/ΠΠ, Τρίτη 12 Ιανουαρίου 2009 35 / 51
lab3appm.nc event r e s u l t _ t ConsensusControl. done ( u i n t 8 _ t value ) { dbg ( DBG_TEMP, " Node %d decided value %d. \ n ", TOS_LOCAL_ADDRESS, value ) ; c a l l Leds. redoff ( ) ; c a l l Leds. greenon ( ) ; r e t u r n SUCCESS ; Κατανεµηµένα Συστήµατα Ι ΤΜΗΥΠ/ΠΠ, Τρίτη 12 Ιανουαρίου 2009 36 / 51
Θέµατα Μελέτης Θέλουµε να εξετάσουµε: Πλήρες δίκτυο 5 διεργασιών. (δεν δηλώνουµε αρχείο τοπολογίας) Πλήρες δίκτυο 10 διεργασιών. (δεν δηλώνουµε αρχείο τοπολογίας) Γενικό δίκτυο 8 διεργασιών. (προσοχή το αρχείο τοπολογίας έχει αλλάξει) Γενικό δίκτυο 16 διεργασιών. (προσοχή το αρχείο τοπολογίας έχει αλλάξει) Παρατηρείστε τα µηνύµατα εξόδου. Πόσοι γύροι απαιτούνται για να προκύψει συµφωνία στις αποφάσεις όλων των διεργασιών; Πόσα µηνύµατα ανταλλάσσονται; Κατανεµηµένα Συστήµατα Ι ΤΜΗΥΠ/ΠΠ, Τρίτη 12 Ιανουαρίου 2009 37 / 51
Αλγόριθµος OptSimpleConsensus Θέλουµε να υλοποιήσουµε τον αλγόριθµο OptSimpleConsensus Οι διεργασίες στέλνουν µήνυµα µόνο αν υπάρξει κάποια αλλαγή στον πίνακα που διατηρεί τις τιµές των άλλων διεργασιών. Πόσα µηνύµατα εχουµε ; Πως αλλάζει η συµπεριφορά του συστήµατος στις απώλειες µηνυµάτων ; Απαιτούνται λιγότεροι γύροι ; Κατανεµηµένα Συστήµατα Ι ΤΜΗΥΠ/ΠΠ, Τρίτη 12 Ιανουαρίου 2009 38 / 51
Μοντέλο Σφαλµάτων Επικοινωνίας Εξετάζουµε την περίπτωση όπου κατά την εκτέλεση ενός κατανεµηµένου αλγορίθµου παρουσιάζονται σφάλµατα κατά την αποστολή µηνυµάτων Σφάλµα Επικοινωνίας Το δίκτυο επικοινωνίας που συνδέει τις µονάδες ενός κατανεµηµένου συστήµατος µπορεί να αποτύχει κατά την αποστολή ενός µηνύµατος µέσω ενός (ελαττωµατικού) καναλιού. Η παράδοση των µηνυµάτων που έχουν σταλεί δεν είναι εγγυηµένη. Υποθέτουµε ότι ένας αριθµός µηνυµάτων που ϑα αποσταλούν κατά την εκτέλεση ενός κατανεµηµένου αλγορίθµου, δεν ϑα παραδοθούν µε επιτυχία. Κατανεµηµένα Συστήµατα Ι ΤΜΗΥΠ/ΠΠ, Τρίτη 12 Ιανουαρίου 2009 39 / 51
TINYOS-Generic8.nss 0 : 5 : 0 0 : 6 : 0 0 : 7 : 0 1 : 2 : 0 1 : 3 : 0 2 : 1 : 0 2 : 3 : 0 2 : 4 : 0 2 : 5 : 0 3 : 1 : 0 3 : 2 : 0 Κατανεµηµένα Συστήµατα Ι ΤΜΗΥΠ/ΠΠ, Τρίτη 12 Ιανουαρίου 2009 40 / 51
TINYOS-Generic8-F.nss 0 : 5 : 0 0 : 6 : 0. 5 0 : 7 : 0 1 : 2 : 0 1 : 3 : 0. 5 2 : 1 : 0 2 : 3 : 0 2 : 4 : 0 2 : 5 : 0. 5 3 : 1 : 0 3 : 2 : 0. 7 Κατανεµηµένα Συστήµατα Ι ΤΜΗΥΠ/ΠΠ, Τρίτη 12 Ιανουαρίου 2009 41 / 51
Θέµατα Μελέτης Θέλουµε να εξετάσουµε τη συµπεριφορά των αλγόριθµων SimpleConsensus και OptSimpleConsensus για τις ακόλουθες περιπτώσεις: Πλήρες δίκτυο 5 διεργασιών. (δεν δηλώνουµε αρχείο τοπολογίας) Πλήρες δίκτυο 10 διεργασιών. (δεν δηλώνουµε αρχείο τοπολογίας) Γενικό δίκτυο 8 διεργασιών. (προσοχή το αρχείο τοπολογίας έχει αλλάξει) Γενικό δίκτυο 16 διεργασιών. (προσοχή το αρχείο τοπολογίας έχει αλλάξει) Παρατηρείστε τα µηνύµατα εξόδου. Πως επιρεάζεται η συµπερηφορά των αλγορίθµων; Πόσοι γύροι απαιτούνται για να προκύψει συµφωνία στις αποφάσεις όλων των διεργασιών; Πόσα µηνύµατα ανταλλάσσονται; Κατανεµηµένα Συστήµατα Ι ΤΜΗΥΠ/ΠΠ, Τρίτη 12 Ιανουαρίου 2009 42 / 51
Μοντέλο Σφαλµάτων Τερµατισµού Εξετάζουµε την περίπτωση όπου κατά την εκτέλεση ενός κατανεµηµένου αλγορίθµου σφάλµατα που παρουσιάζονται στις υπολογιστικές µονάδες (στους επεξεργαστές) εµφανίζονται το πολύ σ σφάλµατα Σφάλµα Τερµατισµού Κάποια (ελαττωµατική) µονάδα του κατανεµηµένου συστήµατος µπορεί να αποτύχει κατά την εκτέλεση µια διεργασίας. Ενα σφάλµα τερµατισµού µπορεί να παρουσιαστεί σε οποιοδήποτε σηµείο της εκτέλεσης µιας διεργασίας. Η διεργασία µπορεί να τερµατίσει ξαφνικά κατά την παραγωγή µηνυµάτων, οπότε να σταλεί µόνο ένα µέρος των εξερχόµενων µηνυµάτων. Κατανεµηµένα Συστήµατα Ι ΤΜΗΥΠ/ΠΠ, Τρίτη 12 Ιανουαρίου 2009 43 / 51
Είσοδος/ Εξοδος στα ανώτερα επίπεδα Για να µπορέσουµε να προσοµοιώσουµε τα σφάλµατα τερµατισµού, επεκτείνουµε το interface ConsensusControl ως εξής: command result_t stop() σταµατάει τη διαδικασία συναίνεσης. Επιστρέφει πάντα SUCCESS. ConsensusControl.nc async command r e s u l t _ t stop ( ) ; Κατανεµηµένα Συστήµατα Ι ΤΜΗΥΠ/ΠΠ, Τρίτη 12 Ιανουαρίου 2009 44 / 51
οκιµαστική Εφαρµογή Θέλουµε µια απλή εφαρµογή για να ελέγξουµε τον αλγόριθµο υπο την παρουσία σφαλµάτων τερµατισµού. Εισάγουµε ένα δεύτερο Timer για να µπορούµε να δηµιουργήσουµε σφάλµατα σε συγκεκριµένες χρονικές στιγµές. module lab3appfailuresm { uses { i n t e r f a c e ConsensusControl ; i n t e r f a c e Leds ; i n t e r f a c e T i m e r ; i n t e r f a c e T i m e r as T i m e r F a i l ; Κατανεµηµένα Συστήµατα Ι ΤΜΗΥΠ/ΠΠ, Τρίτη 12 Ιανουαρίου 2009 45 / 51
lab3appfailuresm.nc command r e s u l t _ t S t d C o n t r o l. s t a r t ( ) { i f ( TOS_LOCAL_ADDRESS == 1) c a l l T i m e r F a i l. s t a r t ( TIMER_ONE_SHOT, 4 0 0 0 ) ; i f ( TOS_LOCAL_ADDRESS == 4) c a l l T i m e r F a i l. s t a r t ( TIMER_ONE_SHOT, 3 5 0 0 ) ; i f ( TOS_LOCAL_ADDRESS == 6) c a l l T i m e r F a i l. s t a r t ( TIMER_ONE_SHOT, 3 0 0 0 ) ; i f ( TOS_LOCAL_ADDRESS == 9) c a l l T i m e r F a i l. s t a r t ( TIMER_ONE_SHOT, 3 5 0 0 ) ; i f ( TOS_LOCAL_ADDRESS == 13) c a l l T i m e r F a i l. s t a r t ( TIMER_ONE_SHOT, 5 0 0 0 ) ; r e t u r n c a l l T i m e r. s t a r t ( TIMER_ONE_SHOT, 3 0 0 0 ) ; Κατανεµηµένα Συστήµατα Ι ΤΜΗΥΠ/ΠΠ, Τρίτη 12 Ιανουαρίου 2009 46 / 51
lab3appfailuresm.nc event r e s u l t _ t T i m e r F a i l. f i r e d ( ) { dbg ( DBG_TEMP, " Node %d crashed!!! \ n ", TOS_LOCAL_ADDRESS ) ; c a l l Leds. yellowon ( ) ; c a l l ConsensusControl. stop ( ) ; Κατανεµηµένα Συστήµατα Ι ΤΜΗΥΠ/ΠΠ, Τρίτη 12 Ιανουαρίου 2009 47 / 51
Θέµατα Μελέτης Θέλουµε να εξετάσουµε τη συµπεριφορά των αλγόριθµων SimpleConsensus και OptSimpleConsensus για τις ακόλουθες περιπτώσεις: Πλήρες δίκτυο 5 διεργασιών. (δεν δηλώνουµε αρχείο τοπολογίας) Πλήρες δίκτυο 10 διεργασιών. (δεν δηλώνουµε αρχείο τοπολογίας) Γενικό δίκτυο 8 διεργασιών. (προσοχή το αρχείο τοπολογίας έχει αλλάξει) Γενικό δίκτυο 16 διεργασιών. (προσοχή το αρχείο τοπολογίας έχει αλλάξει) Παρατηρείστε τα µηνύµατα εξόδου. Πως επιρεάζεται η συµπερηφορά των αλγορίθµων; Πόσοι γύροι απαιτούνται για να προκύψει συµφωνία στις αποφάσεις όλων των διεργασιών; Πόσα µηνύµατα ανταλλάσσονται; Κατανεµηµένα Συστήµατα Ι ΤΜΗΥΠ/ΠΠ, Τρίτη 12 Ιανουαρίου 2009 48 / 51
Βυζαντινά Σφάλµατα Το δίκτυο περιέχει ελαττωµατικές διεργασίες που δεν σταµατούν αλλά συνεχίζουν να συµµετέχουν στην εκτέλεση του αλγορίθµου. Η συµπεριφορά των διεργασιών µπορεί να είναι τελείως ανεξέλεγκτη. Η εσωτερική κατάσταση µια ελαττωµατικής διεργασίας µπορεί να αλλάξει κατά την διάρκεια ενός γύρου χωρίς να υπάρχει κάποιο µήνυµα. Μια ελαττωµατική διεργασία µπορεί να στείλει µηνύµατα µε οποιοδήποτε περιεχόµενο, ανεξάρτητα από τις οδηγίες του κατανεµηµένου αλγορίθµου που ϑα έπρεπε να τρέχει. Ονοµάζουµε τέτοιου είδους σφάλµατα ως Βυζαντινά σφάλµατα. Μπορούµε να µοντελοποιήσουµε εχθρική συµπεριφορά (π.χ. ϑέµατα ασφάλειας). Κατανεµηµένα Συστήµατα Ι ΤΜΗΥΠ/ΠΠ, Τρίτη 12 Ιανουαρίου 2009 49 / 51
οκιµαστική Εφαρµογή Θέλουµε µια απλή εφαρµογή για να ελέγξουµε τον αλγόριθµο υπο την παρουσία ϐυζαντινών σφαλµάτων. Βασιζόµαστε στις προηγούµενες τροποποιήσεις. Αντί να σταµατήσουµε την διεργασία, την αρχικοποιούµε ξανά και την επανεκκινούµε. event r e s u l t _ t T i m e r F a i l. f i r e d ( ) { c a l l ConsensusControl. stop ( ) ; i f ( TOS_LOCAL_ADDRESS == 1) c a l l ConsensusControl. i n i t ( 3, 2 ) ; c a l l ConsensusControl. s t a r t ( ) ; r e t u r n SUCCESS ; Κατανεµηµένα Συστήµατα Ι ΤΜΗΥΠ/ΠΠ, Τρίτη 12 Ιανουαρίου 2009 50 / 51
Θέµατα Μελέτης Θέλουµε να εξετάσουµε τη συµπεριφορά των αλγόριθµων SimpleConsensus και OptSimpleConsensus για τις ακόλουθες περιπτώσεις: Πλήρες δίκτυο 5 διεργασιών. (δεν δηλώνουµε αρχείο τοπολογίας) Πλήρες δίκτυο 10 διεργασιών. (δεν δηλώνουµε αρχείο τοπολογίας) Γενικό δίκτυο 8 διεργασιών. (προσοχή το αρχείο τοπολογίας έχει αλλάξει) Γενικό δίκτυο 16 διεργασιών. (προσοχή το αρχείο τοπολογίας έχει αλλάξει) Παρατηρείστε τα µηνύµατα εξόδου. Πως επιρεάζεται η συµπεριφορά των αλγορίθµων; Πόσοι γύροι απαιτούνται για να προκύψει συµφωνία στις αποφάσεις όλων των διεργασιών; Πόσα µηνύµατα ανταλλάσσονται; Κατανεµηµένα Συστήµατα Ι ΤΜΗΥΠ/ΠΠ, Τρίτη 12 Ιανουαρίου 2009 51 / 51