Χειµερινό Εξάµηνο

Σχετικά έγγραφα
Χειµερινό Εξάµηνο

Κατανεµηµένα Συστήµατα Ι Μάθηµα Βασικής Επιλογής, Χειµερινού Εξαµήνου Τοµέας Εφαρµογών και Θεµελιώσεων

Χειµερινό Εξάµηνο

Αλγόριθµοι Κατασκευής Επικαλυπτικού ένδρου. Κατανεµηµένα Συστήµατα Ι Μάθηµα Βασικής Επιλογής, Χειµερινού Εξαµήνου Τοµέας Εφαρµογών και Θεµελιώσεων

Φροντιστήρια. Κατανεµηµένα Συστήµατα Ι Μάθηµα Βασικής Επιλογής, Χειµερινού Εξαµήνου Τοµέας Εφαρµογών και Θεµελιώσεων. Εργαστήρια

Κατανεµηµένα Συστήµατα Ι Μάθηµα Βασικής Επιλογής, Χειµερινού Εξαµήνου Τοµέας Εφαρµογών και Θεµελιώσεων. Ποιος είναι ο σκοπός του εργαστηρίου

Επισκόπηση. Κατανεµηµένα Συστήµατα Ι Μάθηµα Βασικής Επιλογής, Χειµερινού Εξαµήνου Τοµέας Εφαρµογών και Θεµελιώσεων. Λεπτοµέρειες υλοποίησης αλγορίθµων

Έρευνα στα Ασύρματα Δίκτυα Αισθητήρων WSN

Κατανεμημένα Συστήματα Ι

Επισκόπιση. Κατανεµηµένα Συστήµατα Ι Μάθηµα Βασικής Επιλογής, Χειµερινού Εξαµήνου Τοµέας Εφαρµογών και Θεµελιώσεων. Σφάλµατα επικοινωνίας στο Shawn

Προηγούµενο Μάθηµα. Κατανεµηµένα Συστήµατα Ι Μάθηµα Βασικής Επιλογής, Χειµερινού Εξαµήνου Τοµέας Εφαρµογών και Θεµελιώσεων. Ορισµοί Τοπική ιστορία

Περίληψη Φροντιστηρίου. Κατανεμημένα Συστήματα Ι. Το περιβάλλον DAP - Χαρακτηριστικά. Το περιβάλλον DAP Τι είναι.

Επισκόπηση. Κατανεµηµένα Συστήµατα Ι Μάθηµα Βασικής Επιλογής, Χειµερινού Εξαµήνου Τοµέας Εφαρµογών και Θεµελιώσεων. Simulation Commands

Μοντέλο Σύγχρονου ικτύου. Κατανεµηµένα Συστήµατα Ι Μάθηµα Βασικής Επιλογής, Χειµερινού Εξαµήνου Τοµέας Εφαρµογών και Θεµελιώσεων

Προηγούµενο Μάθηµα. Κατανεµηµένα Συστήµατα Ι Μάθηµα Βασικής Επιλογής, Χειµερινού Εξαµήνου Τοµέας Εφαρµογών και Θεµελιώσεων. Ορισµοί Τοπική ιστορία

Προηγούµενο Μάθηµα. Κατανεµηµένα Συστήµατα Ι Μάθηµα Βασικής Επιλογής, Χειµερινού Εξαµήνου Τοµέας Εφαρµογών και Θεµελιώσεων. Σύνοψη 3 ης ιάλεξης

Η Γλώσσα Προγραµµατισµού C++ (The C++ Programming Language) Ιστοσελίδα του µαθήµατος. Περιεχόµενα. ηµήτριος Κατσαρός, Ph.D. Κλάσεις.


Προηγούµενο Μάθηµα. Κατανεµηµένα Συστήµατα Ι Μάθηµα Βασικής Επιλογής, Χειµερινού Εξαµήνου Τοµέας Εφαρµογών και Θεµελιώσεων

Η Γλώσσα Προγραµµατισµού C++ (The C++ Programming Language)

Προηγούµενο Μάθηµα. Κατανεµηµένα Συστήµατα Ι Μάθηµα Βασικής Επιλογής, Χειµερινού Εξαµήνου Τοµέας Εφαρµογών και Θεµελιώσεων

Μοντέλο Σύγχρονου ικτύου. Κατανεµηµένα Συστήµατα Ι Μάθηµα Βασικής Επιλογής, Χειµερινού Εξαµήνου Τοµέας Εφαρµογών και Θεµελιώσεων

Σκοπός του µαθήµατος. Κατανεµηµένα Συστήµατα Ι Μάθηµα Βασικής Επιλογής, Χειµερινού Εξαµήνου Τοµέας Εφαρµογών και Θεµελιώσεων

Ανοχή απέναντι σε Σφάλµατα Fault Tolerance

Συστήματα Παράλληλης και Κατανεμημένης Επεξεργασίας

Κατανεμημένα Συστήματα. Javascript LCR example

Δομημένος Προγραμματισμός

Βασικές έννοιες. Κατανεμημένα Συστήματα 1

Βασικές έννοιες. Κατανεμημένα Συστήματα 1

Διάλεξη 16: Πρόβλημα Συμφωνίας. ΕΠΛ 432: Κατανεμημένοι Αλγόριθμοι

Διάλεξη 1: Εισαγωγή στον Κατανεμημένο Υπολογισμό. ΕΠΛ 432: Κατανεμημένοι Αλγόριθμοι

Σκοπός του µαθήµατος. Κατανεµηµένα συστήµατα. Μάθηµα Βασικής Επιλογής, Χειµερινού Εξαµήνου Τοµέας Εφαρµογών και Θεµελιώσεων

Το Πρόβληµα Οµοφωνίας Σύγχρονα Συστήµατα Μεταβίβασης Μηνύµατος Μοντέλο Κατάρρευσης (crash model) Οι διεργασίες µπορούν να σταµατούν να εκτελούνται σε

ΗY335: Δίκτυα Υπολογιστών Χειμερινό Εξάμηνο Τμήμα Επιστήμης Υπολογιστών Πανεπιστήμιο Κρήτης Διδάσκουσα: Μαρία Παπαδοπούλη

ιεργασίες και Επεξεργαστές στα Κατανεµηµένων Συστηµάτων

Εκλογή αρχηγού σε σύγχρονο δακτύλιο: Οι αλγόριθμοι LCR και HS. 1 Ο αλγόριθμος LCR (Le Lann, Chang, and Roberts)

ΤΕΙ Κρήτης, Παράρτηµα Χανίων

Συστήματα Παράλληλης και Κατανεμημένης Επεξεργασίας

Ο έλεγχος στο επίπεδο συστήµατος επικοινωνιών εξασφαλίζει ότι έχουµε µεταφορά στο δίκτυο χωρίς λάθη.

Προηγούµενο Μάθηµα. Κατανεµηµένα Συστήµατα Ι Μάθηµα Βασικής Επιλογής, Χειµερινού Εξαµήνου Τοµέας Εφαρµογών και Θεµελιώσεων. Υποστήριξη Φοιτητών

Επισκόπιση. Κατανεµηµένα Συστήµατα Ι Μάθηµα Βασικής Επιλογής, Χειµερινού Εξαµήνου Τοµέας Εφαρµογών και Θεµελιώσεων. Collecting Messages Statistics

Κεφάλαιο 8.7. Πίνακες & Συναρτήσεις ( ιάλεξη 17) ιδάσκων: ηµήτρης Ζεϊναλιπούρ

Κατανεμημένα Συστήματα Ι

WIRELESS SENSOR NETWORKS (WSN)

ΠΛΗ111. Ανοιξη Μάθηµα 3 ο. Συνδεδεµένες Λίστες. Τµήµα Ηλεκτρονικών Μηχανικών και Μηχανικών Υπολογιστών Πολυτεχνείο Κρήτης

Πληροφορική & Τηλεπικοινωνίες K18 - Υλοποίηση Συστηµάτων Βάσεων εδοµένων Εαρινό Εξάµηνο

Ελληνικό Ανοικτό Πανεπιστήµιο. Η Ανάλυση και ο Σχεδιασµός στην Ενοποιηµένη ιαδικασία. ρ. Πάνος Φιτσιλής

Δίκτυα Απευθείας Ζεύξης. Επικοινωνία µεταξύ δύο υπολογιστών οι οποίοι είναι απευθείας συνδεδεµένοι.

Προγραµµατισµός 2 The shell

ΗΜΥ 210 ΣΧΕΔΙΑΣΜΟΣ ΨΗΦΙΑΚΩΝ ΣΥΣΤΗΜΑΤΩΝ. Χειµερινό Εξάµηνο 2016 Συµπληρωµατική ΔΙΑΛΕΞΗ 14: Περιγραφή Ακολουθιακών Κυκλωµάτων στη VHDL

ΗΥ220 Εργαστήριο Ψηφιακών Κυκλωµάτων Τµήµα Επιστήµης Υπολογιστών Χειµερινό Εξάµηνο

Επισκόπηση. Κατανεµηµένα Συστήµατα Ι Μάθηµα Βασικής Επιλογής, Χειµερινού Εξαµήνου Τοµέας Εφαρµογών και Θεµελιώσεων

Κατανεμημένα Συστήματα Ι

Το Πρόβληµα Οµοφωνίας Σύγχρονα Συστήµατα Μεταβίβασης Μηνύµατος Μοντέλο Κατάρρευσης (crash model) Οι διεργασίες µπορούν να σταµατούν να εκτελούνται σε

Ιδιοκτησία Αντικειµένου

Προηγούµενο Μάθηµα. Κατανεµηµένα Συστήµατα Ι Μάθηµα Βασικής Επιλογής, Χειµερινού Εξαµήνου Τοµέας Εφαρµογών και Θεµελιώσεων. Υποστήριξη Φοιτητών

HY-486 Αρχές Κατανεμημένου Υπολογισμού Εαρινό Εξάμηνο

Εργαστηριακή Άσκηση 4

Ενδεικτικές Λύσεις 1ου Σετ Ασκήσεων

«Συγχρονισμός ρολογιών υπό την παρουσία σφαλμάτων»

Προγραμματισμός Ι. Εγγραφές. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Περιεχόµενα. 1 Εισαγωγή στις οµές εδοµένων 3. 2 Στοίβα (Stack) 5

Σχήµα 6.1: Εισαγωγή της εντολής Read From Spreadsheet File στο Block Diagram.

Κατανεμημένα Συστήματα

Διεργασίες (μοντέλο μνήμης & εκτέλεσης) Προγραμματισμός II 1

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ

Κατανεμημένα Συστήματα Ι

VHDL για Σχεδιασµό Ακολουθιακών Κυκλωµάτων

Consensus and related problems

ιαδίκτυα & Ενδοδίκτυα Η/Υ

Προγραμματισμός Υπολογιστών & Υπολογιστική Φυσική

Κατανεμημένα Συστήματα Ι

Δομές Δεδομένων. Ενότητα 4: Ο ΑΤΔ Λίστα & Υλοποίηση Λίστας με σειριακή αποθήκευση- Ο ΑΤΔ Συνδεδεμένη Λίστα- Υλοποίηση ΑΤΔ Συνδεδεμένη Λίστα με πίνακα

Προγραµµατισµός Ι (ΗΥ120)

ΚΑΤΑΝΕΜΗΜΕΝΑ ΣΥΣΤΗΜΑΤΑ. Παράδοση Ασκήσεων Κεφάλαιο 2 Ασκήσεις 3,6,8,9,15,22,24,26. Γεωργόπουλος Άλκης Α.Μ.: 39 Κοντογιώργης Αναστάσιος A.M.

Πληροφορική & Τηλεπικοινωνίες Υλοποίηση Συστημάτων Βάσεων Δεδομένων - Χειμερινό Εξάμηνο Καθηγητής Δ. Γουνόπουλος

Προσομοίωση BP με το Bizagi Modeler

ΗΥ486 - Αρχές Κατανεμημένου Υπολογισμού Εαρινό Εξάμηνο Δεύτερη Προγραμματιστική Εργασία

Sheet2. Σωστή, και µπράβο που µεριµνήσατε για λίστες διαφορετικών µεγεθών.

Σχήμα 1: TCP αποστολέας με παράθυρο αποστολέα = 1

2η Προγραµµατιστική Εργασία

VERSION 1.0 ΝΟΕΜΒΡΙΟΣ, 2016 ΤΕΧΝΟΛΟΓΙΕΣ ΥΠΟΛΟΓΙΣΤΙΚΟΥ ΝΕΦΟΥΣ ΔΗΜΙΟΥΡΓΩΝΤΑΣ ΤΟΠΟΛΟΓΙΕΣ ΔΙΚΤΥΩΝ ΣΤΟ CLOUDSIM ΕΠΙΜΕΛΕΙΑ: ΒΑΣΙΛΕΙΟΣ ΤΣΑΚΑΝΙΚΑΣ

Τµήµα Πληροφορικής. Δοµές Δεδοµένων - Εργασία 2. Φθινοπωρινό Εξάµηνο Διδάσκων: E. Μαρκάκης

Διάλεξη 17: Συμφωνία με Βυζαντινά Σφάλματα. ΕΠΛ 432: Κατανεμημένοι Αλγόριθμοι

Εκλογήαρχηγού. Εισαγωγή Ισχυρά συνδεδεµένος γράφος ακτύλιος µίας κατεύθυνσης Τοπολογία δένδρου. Κατανεµηµένα Συστήµατα 06-1

Κατανεμημένα Συστήματα Ι

Γενικά. Σχήµα Ι: Επικοινωνία Client-Server, ExecuteCommand TuniConnection

Προηγμένοι Μικροεπεξεργαστές. Εργαστήριο 3 Task Switching in PM

Απαντήσεις. Απάντηση. Απάντηση

ΔΙΚΤΥΑ ΥΠΟΛΟΓΙΣΤΩΝ ΙΙ

Λειτουργικά Συστήματα Πραγματικού Χρόνου

Δομημένος Προγραμματισμός. Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων

ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΤΜΗΜΑ ΜΑΘΗΜΑΤΙΚΩΝ

ΑΣΚΗΣΗ 1. Structural Programming

Τεχνικές διόρθωσης και ανίχνευσης σφαλµάτων

ΗΜΥ 213 Εργαστήριο Οργάνωσης Υπολογιστών και Μικροεπεξεργαστών

Ενότητα 9 Ξένα Σύνολα που υποστηρίζουν τη λειτουργία της Ένωσης (Union-Find)

CloudBox!: Ένα εργαλείο cloud αποθήκευσης αρχείων με κατανεμημένο τρόπο

Το Πρόβληµα Οµοφωνίας Σύγχρονα Συστήµατα Μεταβίβασης Μηνύµατος Μοντέλο Κατάρρευσης (crash model) Οι διεργασίες µπορούν να σταµατούν να εκτελούνται σε

Πληροφορική & Τηλεπικοινωνίες Υλοποίηση Συστημάτων Βάσεων Δεδομένων - Χειμερινό Εξάμηνο Καθηγητής Δ. Γουνόπουλος

Transcript:

Κατανεµηµένα Συστήµατα Ι Χειµερινό Εξάµηνο 2007-2008 Περίληψη Ο στόχος του εργαστηρίου είναι η υλοποίηση κατανεµηµένων αλγόριθµων συναίνεσης µε την γλώσσα προγραµµατισµού nesc και την χρήση Active Messages στο περιβάλλον TinyOS. Μελέτη της συµπεριφοράς των αλγόριθµων µε την χρήση του TOSSIM σε γενικά δίκτυα υπό την παρουσία σφαλµάτων τερµατισµού. Υλοποίηση Αλγόριθµου Συναίνεσης Σε ένα σύγχρονο δίκτυο G, η συναίνεση απαιτεί την κοινή επιλογής µιας µοναδικής τιµής απο όλες τις διεργασίες του συστήµατος. Οταν οι διεργασίες καταλήξουν σε µια κοινά αποδεκτή απόφαση, όλες οι διεργασίες τερµατίζουν. Οι διεργασίες, δέχεται ως είσοδο µία τιµή i u απο το σύνολο S, δηλ. i u S. Στην συνέχεια εκτελεί έναν κατανεµηµένο αλγόριθµο συναίνεσης και αποφασίζει (σε συνεργασία µε το υπόλοιπο δίκτυο) µια µοναδική τιµή. Υπάρχουν πολλοί διαφορετικοί αλγόριθµοι συναίνεσης οι οποίοι απευθύνονται σε ορισµένους τύπους συστηµάτων που χρησιµοποιούν συγκεκριµένες ιδιότητες του συστήµατος για να εκτελεστούν. Παρ όλα αυτά, όλοι οι αλγόριθµοι µπορούν να περιγραφούν µε τον ίδιο τρόπο όταν ϑέλουµε να ορίσουµε την λειτουργικότητα που προσφέρουν στα υψηλότερα επίπεδα ενός συστήµατος. Η γλώσσα nesc προσφέρει ένα τρόπο περιγραφής της εσωτερικής λειτουργίας των αλγόριθµων µε γενικό τρόπο. Με την χρήση των interfaces µπορούµε να περιγράψουµε τις λειτουργίες των αλγόριθµων εκλογής αρχηγού µε γενικό, αφαιρετικό τρόπο. Ορίζουµε το interface ConsensusControl ως εξής : command result_t init(uint16_t deviceid, uint8_t value) αρχικοποιεί τις εσωτερικές µεταβλητές του αλγόριθµου. Η παράµετρος deviceid υποδηλώνει την ταυτότητα που ϑα χρησιµοποιήσει η διεργασία. Η παράµετρος value υποδηλώνει την τιµή εισόδου που ϑα χρησιµοποιήσει η διεργασία ως είσοδο. Το command επιστρέφει πάντα SUCCESS. command result_t start() ξεκινά τη διαδικασία συναίνεσης. Επιστρέφει πάντα SUCCESS. command uint8_t getvalue() επιστρέφει την τιµή που αποφασίσαν οι διεργασίες, αλλιώς UNKNOWN_VALUE αν η διαδικασία συναίνεσης δεν έχει ολοκληρωθεί. event result_t done(uint8_t value) όταν ο αλγόριθµος συναίνεσης ολοκληρωθεί, δη- µιουργείται ένα event όπου η παράµετρος value δηλώνει την κοινή τιµή που αποφάσισαν οι διεργασίες. Το event επιστρέφει πάντα SUCCESS. Σελ. 1 από 12

Ο κώδικας που αποτυπώνει το interface ConsensusControl στη γλώσσα nesc ϐρίσκεται στη σελίδα του µαθήµατος. Τοποθετήστε αυτό το αρχείο στον κατάλογο της εφαρµογής σας. Μια εφαρµογή που ϑέλει να εκτελέσει έναν κατανεµηµένο αλγόριθµο συναίνεσης (π.χ. για τη απόφαση µιας κοινής τιµής ϑερµοκρασίας από όλους τους κόµβους) ϑα χρησιµοποιήσει το παραπάνω interface χωρίς να έχει ιδιαίτερη σηµασία ποια ϑα είναι η τελική υλοποίηση των µεθόδων (δηλ. πως ϑα υλοποιήσουµε τον αλγόριθµο συναίνεσης). Υλοποιούµε την εφαρµογή lab3app όπου οι διεργασίες δέχονται ως είσοδο έναν αριθµό 8 bit. Για να µπορεί ο χειριστής του συστήµατος να διαγνώσει την κατάσταση που ϐρίσκονται οι συσκευές κατά την λειτουργία τους, η εφαρµογή χρησιµοποιεί τα Led των συσκευών ως εξής : Το κόκκινο led ανάβει όταν αρχίσει να εκτελείται ο αλγόριθµος. Οταν ολοκληρωθεί η εκτέλεση και τερµατίσει ο αλγόριθµος, το πράσινο Led ανάβει. Εφόσον έχουµε να κάνουµε µε ένα ασύγχρονο σύστηµα, υπάρχει περίπτωση οι συσκευές να µη ξεκινήσουν ταυτόχρονα αλλά να υπάρχει µια χρονική καθυστέρηση. Για να εξασφαλίσουµε ότι όλες οι συσκευές του συστήµατος είναι ενεργοποιηµένες και συµµετέχουν στον αλγόριθµο συναίνεσης χρησιµοποιούµε ένα Timer για να καθυστερήσουµε την εκτέλεση του αλγόριθµου. Η εκτέλεση του αλγόριθµου συναίνεσης και η ενηµέρωση της ολοκλήρωσης του γίνεται µε την υλοποίηση ενός task (το οποίο καλεί τη ConsensusControl.start()) και ένα event handler. Σύµφωνα µε τα παραπάνω, ορίζουµε το module lab3appm ως εξής : module lab3appm { provides { interface StdControl ; uses { interface ConsensusControl ; interface Leds ; interface Timer ; implementation { uint8_t m_values [20] = {0, 1, 1, 0, 1, 1, 1, 0, 2, 1, 0, 1, 1, 0, 2, 1 ; // I n i t i a l i z e the component. command result_t StdControl. 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 ] ) ; // Start things up set the timer to f i r e once a f t e r 3000ms command result_t StdControl. start ( ) { return c a l l Timer. start (TIMER_ONE_SHOT, 3000); // Halt execution of the application disables the clock component. command result_t StdControl. stop ( ) { return c a l l Timer. stop ( ) ; Σελ. 2 από 12

// Start the distributed consensus process task void startconsensus ( ) { c a l l Leds. redon ( ) ; // Start the consensus process c a l l ConsensusControl. start ( ) ; dbg (DBG_TEMP, " Distributed consensus process started.\n " ) ; // Event signaled when the distributed consensus process completed. event result_t ConsensusControl. done ( uint8_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 ( ) ; // Start the whole process event result_t Timer. f i r e d ( ) { post startconsensus ( ) ; Υλοποίηση του αλγόριθµου συναίνεσης SimpleConsensus Ο αλγόριθµος SimpleConsensus προσφέρει µια λύση για το πρόβληµα της κατανεµηµένης συναίνεσης σε γενικά δίκτυα όπου οι διεργασίες γνωρίζουν τη τοπολογία του δικτύου. Πρόκειται για έναν αλγόριθµο που απαιτεί O (diam(g)) γύρους και ανταλλάσσει O (m) µηνύµατα. Λόγω της ασύγχρονης λειτουργίας του συστήµατος, η σωστή εκτέλεση του αλγόριθµου SimpleConsensus απαιτεί την ύπαρξη µιας ουράς για τα εξερχόµενα µηνύµατα. Για αυτό τον λόγο χρησιµοποιού- µε το component QueuedSend που προσφέρει το ίδιο interface SendMsg µε το component GenericComm αλλά τοποθετεί τα µηνύµατα σε µια ουρά. Τα αρχεία που υλοποιούν το component QueuedSend είναι στον ϕάκελο /opt/tinyos-1.x/tos/lib/queue. Κατά την µεταγλώτισση της εφαρµογής µας, για να συµπεριληφθεί σωστά το component QueuedSend πρέπει να εισάγου- µε στο Makefile την εξής γραµµή : PFLAGS= -I%T/lib/Queue Η υλοποίηση του αλγόριθµου SimpleConsensus, σε υψηλό επίπεδο, αποτελείται από το module SimpleConsensusM που περιέχει την λογική της διαδικασίας, το component GenericComm που χρησιµοποιείται για την παραλαβή Active Messages και το component QueuedSend που χρησιµοποιείται για την αποστολή Active Messages. Το διάγραµµα διασύνδεσης απεικονίζεται γραφικά στην Εικ. 1. Σελ. 3 από 12

Σχήµα 1: Το διάγραµµα διασύνδεσης του SimpleConsensus includes ConsensusMsg ; configuration SimpleConsensus { provides interface StdControl ; provides interface ConsensusControl ; implementation { components SimpleConsensusM, QueuedSend, GenericComm; SimpleConsensusM. SendMsg > QueuedSend. SendMsg[AM_CONSENSUSMSG] ; SimpleConsensusM. ReceiveMsg > GenericComm. ReceiveMsg [AM_CONSENSUSMSG] ; SimpleConsensusM. Timer > TimerC. Timer [ unique ( " Timer " ) ] ; StdControl = GenericComm; StdControl = QueuedSend; ConsensusControl = SimpleConsensusM ; Το αρχείο ConsensusMsg.h ορίζει την δοµή των µηνυµάτων του αλγόριθµου και τις απαραίτητες σταθερές. Η δοµή του µηνύµατος ConsensusMsg είναι η ακόλουθη : Το πεδίο id χρησιµοποιείται για την αποθήκευση της ταυτότητας της διεργασίας που πρόκειται να στείλει το µήνυµα. Ο πίνακας values χρησιµοποιείται για την αποθήκευση των τιµών των άλλων διεργασιών που γνωρίζει η διεργασία που πρόκειται να στείλει το µήνυµα. enum { UNKNOWN_VALUE = 254, TOT_NODES = 16, TOT_ROUNDS = 40 ; typedef struct ConsensusMsg { uint16_t id ; uint8_t values [TOT_NODES] ; ConsensusMsg ; enum { AM_CONSENSUSMSG = 16 ; Σελ. 4 από 12

Το module SimpleConsensusM χρησιµοποιεί τα interface SendMsg και ReceiveMsg για την αποστολή και παραλαβή µηνυµάτων, το interface Timer για την περιοδική αποστολή των µηνυµάτων και προσφέρει το interface ConsensusControl. module SimpleConsensusM { provides { interface ConsensusControl ; uses { interface SendMsg; interface ReceiveMsg ; interface Timer ; Οι διεργασίες διατηρούν (α) µια µεταβλητή uint16_t m_id µε την ταυτότητα της διεργασίας, (ϐ) µια µεταβλητή uint8_t m_initvalue µε την τιµή εισόδου, (γ) έναν πίνακα uint8_t m_values[max_nodes] µε τις τιµές των διεργασιών στο δίκτυο, (δ) µια µεταβλητή uint8_t m_decision µε την απόφαση, (ε) µια µεταβλητή uint8_t m_count για την καταµέτρηση των µηνυµάτων και (στ) µια µεταβλητή TOS_Msg m_msg για την αποστολή µηνυµάτων. implementation { uint16_t m_id; uint8_t m_initvalue ; uint8_t m_values [MAX_NODES] ; uint8_t m_decision ; uint8_t m_msgcount; TOS_Msg m_msg;... Η αρχικοποίηση του αλγόριθµου γίνεται ως εξής : // I n i t i a l i z e the distributed consensus process. async command result_t ConsensusControl. i n i t ( uint16_t deviceid, uint16_t value ) { uint8_t i ; atomic { m_id = deviceid ; m_initvalue = value ; m_decision = UNKNOWN_VALUE; m_msgcount = 0; // I n i t i a l i z e array for ( i =0; i <MAX_NODES; i ++) m_values [ i ] = UNKNOWN_VALUE; dbg (DBG_TEMP, " SimpleConsensus : i n i t i a l i z e d.\n " ) ; και η συνάρτηση get υλοποιείται απλά : Σελ. 5 από 12

// Get decision async command uint8_t ConsensusControl. getvalue ( ) { return m_decision ; Η υλοποίηση της start ελέγχει κατά πόσο έχει ήδη ολοκληρωθεί η διαδικασία, δηλ. αν η m_decision δεν έχει τιµή UNKNOWN_VALUE αλλά την τελική απόφαση. Σε περίπτωση που δεν έχει ολοκληρωθεί η διαδικασία, η διεργασία ενεργοποιεί τον timer. Παρατηρήστε ότι η χρήση της καθολικής µεταβλητής γίνεται µε το πρόθεµα atomic. // Start the distributed consensus process. async command result_t ConsensusControl. start ( ) { uint8_t decision ; atomic decision = m_decision ; // Check i f already finished i f ( decision! = UNKNOWN_VALUE) return FAIL ; atomic m_values [ m_id] = m_initvalue ; dbg (DBG_TEMP, " SimpleConsensus : started with i n i t i a l value %d\n", m_initvalue ) ; // Start the timer c a l l Timer. start (TIMER_REPEAT, 1000); Τέλος, το interface ConsensusControl ορίζει και την χρήση του event done. Η δηµιουργία νέων event γίνεται από το task reportdone. Το task ελέγχει τις τιµές του συνόλου και εφόσον όλες οι τιµές είναι ίδιες, επιστρέφει την κοινή τιµή. Στην περίπτωση που οι τιµές δεν είναι ίδιες, επιστρέφει την µέγιστη τιµή. / Generate the event of the completion of the distributed consensus process / task void reportdone ( ) { uint8_t i, decision, maxvalue, allsame ; atomic { allsame = 0; // Check local set maxvalue = m_values [ 0 ] ; decision = m_values [ 0 ] ; for ( i =1; i < TOT_NODES; i ++) { // keep track of maximum i f ( m_values [ i ] > maxvalue ) maxvalue = m_values [ i ] ; // check i f values agree i f ( m_values [ i ]!= decision ) Σελ. 6 από 12

allsame = 1; // Check i f we do not have consensus i f ( allsame == 1) decision = maxvalue ; // Keep value m_decision = decision ; dbg (DBG_TEMP, " SimpleConsensus : completed.\n " ) ; signal ConsensusControl. done ( decision ) ; Χρησιµοποιούµε τον Timer για την αποστολή µηνυµάτων. Κάθε ϕορά που δηµιουργείτε ένα νέο event fired καλούµε το task sendmessage για την αποστολή ενός νέου µηνύµατος. Ο event handler ελέγχει αν έχουµε ολοκληρώσει το µέγιστο πλήθος αποστολών (σύµφωνα µε την σταθερά TOT_ROUNDS). Σε αυτή την περίπτωση σταµατάµε τον Timer και καλούµε το task reportdone. // Responde to Timer ticks event result_t Timer. f i r e d ( ) { uint16_t msgcount; atomic msgcount = m_msgcount; // Check i f number of t o t a l transmitions reached i f ( msgcount > TOT_ROUNDS) { c a l l Timer. stop ( ) ; post reportdone ( ) ; post sendmessage ( ) ; // Send a message to a l l neighboring processes task void sendmessage ( ) { // Access message body ConsensusMsg msgdata = ( ConsensusMsg ) m_msg. data ; uint8_t i ; // Set message contents msgdata >id = m_id; atomic for ( i =0; i <TOT_NODES; i ++) msgdata >values [ i ] = m_values [ i ] ; // Try to send the message c a l l SendMsg. send (TOS_BCAST_ADDR, s i z e o f ( ConsensusMsg ), &m_msg) ; Σελ. 7 από 12

dbg (DBG_TEMP, " SimpleConsensus : Sending \tconsensusmsg ( " ) ; for ( i =0; i <TOT_NODES; i ++) dbg (DBG_TEMP, "%d ", msgdata >values [ i ] ) ; dbg (DBG_TEMP, " ) \n " ) ; Το interface SendMsg ορίζει και την χρήση του event senddone. event handler για την καταµέτρηση των µηνυµάτων. Υλοποιούµε έναν απλό // Respond to the <code>sendmsg. senddone</code> event event r e s u l t_ t SendMsg. senddone ( TOS_MsgPtr msg, bool success ) { atomic m_msgcount++; Η παραλαβή των µηνυµάτων γίνεται µέσω του interface ReceiveMsg και τη διαχείριση του event ReceiveMsg. Η συνάρτηση ελέγχει τα περιεχόµενα του µηνύµατος και τα ενοποιεί µε τον πίνακα που διατηρεί η διεργασία. // Process a message received event TOS_MsgPtr ReceiveMsg. receive ( TOS_MsgPtr recv_packet ) { // Access message body ConsensusMsg msgdata = ( ConsensusMsg ) recv_packet >data ; uint8_t i ; dbg (DBG_TEMP, " SimpleConsensus : Received from %d \tconsensusmsg ( ", msgdata >id ) ; for ( i =0; i <TOT_NODES; i ++) dbg (DBG_TEMP, "%d ", msgdata >values [ i ] ) ; dbg (DBG_TEMP, " ) \n " ) ; // Merge received set with l o c a l copy atomic for ( i =0; i < TOT_NODES; i ++) { i f ( msgdata >values [ i ]! = UNKNOWN_VALUE) m_values [ i ] = msgdata >values [ i ] ; return recv_packet ; ιασύνδεση της εφαρµογής lab3app µε τον αλγόριθµο SimpleConsensus Η διασύνδεση της εφαρµογής lab3app µε τον αλγόριθµου SimpleConsensus, σε υψηλό επίπεδο, αποτελείται από το module lab3appm που περιέχει την λογική της εφαρµογής, το component SimpleConsensus που υλοποιεί έναν αλγόριθµο συναίνεσης, το component TimerC που χρησι- µοποιείται για την εκκίνηση της διαδικασίας και το component LedsC για την έξοδο της κατάστασης της συσκευής. Το διάγραµµα διασύνδεσης απεικονίζεται γραφικά στην Εικ. 1. configuration lab3app { implementation { Σελ. 8 από 12

Σχήµα 2: Το διάγραµµα διασύνδεσης της εφαρµογής lab3app components Main, lab3appm, SimpleConsensus, LedsC, TimerC ; Main. StdControl > lab3appm. StdControl ; Main. StdControl > SimpleConsensus. StdControl ; lab3appm. SpanningTreeControl > SimpleConsensus. SpanningTreeControl ; lab3appm. Leds > LedsC ; lab3appm. Timer > TimerC. Timer [ unique ( " Timer " ) ] ; Εκτελέστε τον αλγόριθµο για τις ακόλουθες περιπτώσεις : Πλήρες δίκτυο 5 διεργασιών. (δεν δηλώνουµε αρχείο τοπολογίας) Πλήρες δίκτυο 10 διεργασιών. (δεν δηλώνουµε αρχείο τοπολογίας) Γενικό δίκτυο 8 διεργασιών. (προσοχή το αρχείο τοπολογίας έχει αλλάξει) Γενικό δίκτυο 16 διεργασιών. (προσοχή το αρχείο τοπολογίας έχει αλλάξει) Παρατηρείστε τα µηνύµατα εξόδου. Πόσοι γύροι απαιτούνται για να προκύψει συµφωνία στις απο- ϕάσεις όλων των διεργασιών ; Ποιά είναι η ελάχιστη τιµή της σταθεράς TOT_ROUNDS που εξασφαλίζει την σωστή εκτέλεση του αλγόριθµου ; Πόσα µηνύµατα ανταλλάσονται ; Υλοποίηση του αλγόριθµου συναίνεσης OptSimpleConsensus Υλοποιείστε τον αλγόριθµο OptSimpleConsensus. Οι διεργασίες στέλνουν µήνυµα µόνο αν υπάρξει κάποια αλλαγή στον πίνακα που διατηρεί τις τιµές των άλλων διεργασιών. Εκτελέστε τον αλγόριθµο για τις ακόλουθες περιπτώσεις : Πλήρες δίκτυο 5 διεργασιών. (δεν δηλώνουµε αρχείο τοπολογίας) Πλήρες δίκτυο 10 διεργασιών. (δεν δηλώνουµε αρχείο τοπολογίας) Γενικό δίκτυο 8 διεργασιών. (προσοχή το αρχείο τοπολογίας έχει αλλάξει) Γενικό δίκτυο 16 διεργασιών. (προσοχή το αρχείο τοπολογίας έχει αλλάξει) Παρατηρείστε τα µηνύµατα εξόδου. Πόσοι γύροι απαιτούνται για να προκύψει συµφωνία στις απο- ϕάσεις όλων των διεργασιών ; Ποιά είναι η ελάχιστη τιµή της σταθεράς TOT_ROUNDS που εξασφαλίζει την σωστή εκτέλεση του αλγόριθµου ; Πόσα µηνύµατα ανταλλάσονται ; Ποσο ϐελτιώνει την απόδοση του SimpleConsensus η συγκεκριµένη τροποποίηση ; Σελ. 9 από 12

Προσοµοίωση Σφαλµάτων Επικοινωνίας Για να προσοµοιώσουµε σφάλµατα επικοινωνίας αρκεί να τροποποιείσουµε το αρχείο της τοπολογίας. Κάθε γραµµή του αρχείου περιγράφει ένα κανάλι ως εξής : sender ID : receiver ID : b i t error rate Το σφάλµα αφορά το λάθος που υπάρχει κατα την αποστολή ενός bit. Η τρίτη παράµετρος δηλώνει την πιθανότητα που υπάρχει ανα bit του µηνύµατος να αντιστραφεί απο 0 να γίνει 1 ή από 1 να γίνει 0. Κάθε bit ελέγχεται ανεξάρτητα. Οταν το ϑέτουµε σε 0 τότε δεν υπάρχει κανένα σφάλµα. Οταν το ϑέτουµε σε 1 τότε το κανάλι ειναι εντελώς αναξιόπιστο. Οταν το ϑέτουµε σε 0.01 τότε για κάθε bit που µεταδίδεται υπάρχει 1% πιθανότητα να αντιστραφεί. Το αρχείο για την τοπολογία 8 διεργασιών περιγράφεται ως εξής : 0:5:0 0:6:0 0:7:0 1:2:0 1:3:0... Αν υποθέσουµε ότι το κανάλι που ενώνει την διεργασία 0 µε την 6 αντιµετωπίζει σφάλµατα, µπο- ϱούµε να αλλάξουµε την αντίστοιχη γραµµή ϑέτοντας : 0:6:0.037 Προσοµοίωση Σφαλµάτων Τερµατισµού Συµφωνα µε το παραπάνω σφάλµα ανα bit η απώλια ανα πακέτο είναι 10%, όταν το µήκος των πακέτων είναι 36 byte (τυπικό µέγεθος πακέτου στο TinyOS). Τροποποιείστε τα αρχεία τοπολογίας για τα γενικά δίκτυα 8 και 16 κόµβων για τη δηµιουργία σφαλµάτων επικοινωνίας αλλάζοντας την 3η παράµετρο στο bit error rate όλων των καναλιών σε 0.037, 0.077 και 0.111 που αντιστοιχεί σε 10%, 20% και 30% απώλια πακέτων. Εκτελέστε τους αλγόριθµους SimpleConsensus και OptSimpleConsensus για τις τροποποιηµένες τοπολογίες. Παρατηρείστε τα µηνύµατα εξόδου. Πως επηρεάζεται η συµπεριφορά των αλγορίθµων ; Πόσοι γύροι απαιτούνται για να προκύψει συµφωνία στις αποφάσεις όλων των διεργασιών ; Ποιά είναι η ελάχιστη τιµή της σταθεράς TOT_ROUNDS που εξασφαλίζει την σωστή εκτέλεση του αλγόριθµου ; Πόσα µηνύµατα ανταλλάσονται ; Τροποποιούµε την εφαρµογή lab3app για να προσοµοιώσουµε σφάλµατα τερµατισµού. Χρησιµοποιούµε έναν δεύτερο Timer για να απενεργοποιήσουµε την εκτέλεση ορισµένων διεργασιών. Ο κώδικας που αποτυπώνει το lab3appfailures ϐρίσκεται στη σελίδα του µαθήµατος. Τοποθετήστε αυτό τα αρχεία σε ένα νέο κατάλογο. Εκτελέστε τους αλγόριθµους SimpleConsensus και OptSimpleConsensus για τις ακόλουθες περιπτώσεις : Πλήρες δίκτυο 5 διεργασιών. (δεν δηλώνουµε αρχείο τοπολογίας) Πλήρες δίκτυο 10 διεργασιών. (δεν δηλώνουµε αρχείο τοπολογίας) Γενικό δίκτυο 8 διεργασιών. (προσοχή το αρχείο τοπολογίας έχει αλλάξει) Σελ. 10 από 12

Γενικό δίκτυο 16 διεργασιών. (προσοχή το αρχείο τοπολογίας έχει αλλάξει) Παρατηρείστε τα µηνύµατα εξόδου. Πως επηρεάζεται η συµπεριφορά των αλγορίθµων ; Πόσοι γύροι απαιτούνται για να προκύψει συµφωνία στις αποφάσεις όλων των διεργασιών ; Ποιά είναι η ελάχιστη τιµή της σταθεράς TOT_ROUNDS που εξασφαλίζει την σωστή εκτέλεση του αλγόριθµου ; Πόσα µηνύµατα ανταλλάσονται ; Προσοµοίωση Βυζαντινών Σφαλµάτων Τροποποιούµε την εφαρµογή lab3app για να προσοµοιώσουµε ϐυζαντινά σφάλµατα. Χρησιµοποιούµε έναν δεύτερο Timer για να αλλιώσουµε την ταυτότητα και αρχική τιµή εισόδου ορισµένων διεργασιών. Ο κώδικας που αποτυπώνει το lab3appbyzantine ϐρίσκεται στη σελίδα του µαθήµατος. Τοποθετήστε αυτό τα αρχεία σε ένα νέο κατάλογο. Εκτελέστε τους αλγόριθµους SimpleConsensus και OptSimpleConsensus για τις ακόλουθες περιπτώσεις : Πλήρες δίκτυο 5 διεργασιών. (δεν δηλώνουµε αρχείο τοπολογίας) Πλήρες δίκτυο 10 διεργασιών. (δεν δηλώνουµε αρχείο τοπολογίας) Γενικό δίκτυο 8 διεργασιών. (προσοχή το αρχείο τοπολογίας έχει αλλάξει) Γενικό δίκτυο 16 διεργασιών. (προσοχή το αρχείο τοπολογίας έχει αλλάξει) Παρατηρείστε τα µηνύµατα εξόδου. Πως επηρεάζεται η συµπεριφορά των αλγορίθµων ; Πόσοι γύροι απαιτούνται για να προκύψει συµφωνία στις αποφάσεις όλων των διεργασιών ; Ποιά είναι η ελάχιστη τιµή της σταθεράς TOT_ROUNDS που εξασφαλίζει την σωστή εκτέλεση του αλγόριθµου ; Πόσα µηνύµατα ανταλλάσονται ; Εργαστηριακές Ασκήσεις 1. Εκτελέστε την εφαρµογή lab3app µε τον αλγόριθµο SimpleConsensus για τα γενικά δίκτυα 8 και 16 κόµβων και πλήρη δίκτυα 5 και 10 κόµβων. Πόσοι γύροι απαιτούνται για να συµφωνήσουν όλες οι διεργασίες ; Ποιά είναι η ελάχιστη τιµή της σταθεράς TOT_ROUNDS που εξασφαλίζει την σωστή εκτέλεση του αλγόριθµου ; Πόσα µηνύµατα ανταλλάσουν οι διεργασίες ; 2. Υλοποιείστε τον αλγόριθµο συναίνεσης OptSimpleConsensus. 3. Εκτελέστε την εφαρµογή lab3app µε τον αλγόριθµο OptSimpleConsensus για τα γενικά δίκτυα 8 και 16 κόµβων και πλήρη δίκτυα 5 και 10 κόµβων. Πόσοι γύροι απαιτούνται για να συµφωνήσουν όλες οι διεργασίες ; Ποιά είναι η ελάχιστη τιµή της σταθεράς TOT_ROUNDS που εξασφαλίζει την σωστή εκτέλεση του αλγόριθµου ; Σελ. 11 από 12

Πόσα µηνύµατα ανταλλάσουν οι διεργασίες ; Ποσο ϐελτιώνει την απόδοση του SimpleConsensus η συγκεκριµένη τροποποίηση ; 4. Τροποποιείστε τις τοπολογίες για τα γενικά δίκτυα 8 και 16 κόµβων για τη δηµιουργία σφαλµάτων επικοινωνίας αλλάζοντας την 3η παράµετρο στο bit error rate όλων των καναλιών από 0 σε 0.037, 0.077 και 0.111. 5. Εκτελέστε την εφαρµογή lab3app µε τους αλγόριθµους SimpleConsensus και OptSimpleConsensus για τα γενικά δίκτυα 8 και 16 κόµβων για κάθε περίπτωση bit error rate. Πόσοι γύροι απαιτούνται για να συµφωνήσουν όλες οι διεργασίες ; Ποιά είναι η ελάχιστη τιµή της σταθεράς TOT_ROUNDS που εξασφαλίζει την σωστή εκτέλεση του αλγόριθµου ; Πόσα µηνύµατα ανταλλάσουν οι διεργασίες ; 6. Τροποποιείστε την εφαρµογή για τη δηµιουργία σφαλµάτων τερµατισµού. 7. Εκτελέστε την εφαρµογή lab3appfailures µε τους αλγόριθµους SimpleConsensus και OptSimple- Consensus για τα γενικά δίκτυα 8 και 16 κόµβων και πλήρη δίκτυα 5 και 10 κόµβων. Πόσοι γύροι απαιτούνται για να συµφωνήσουν όλες οι διεργασίες ; Ποιά είναι η ελάχιστη τιµή της σταθεράς TOT_ROUNDS που εξασφαλίζει την σωστή εκτέλεση του αλγόριθµου ; Πόσα µηνύµατα ανταλλάσουν οι διεργασίες ; 8. Τροποποιείστε την εφαρµογή για τη δηµιουργία ϐυζαντινών σφαλµάτων. 9. Εκτελέστε την εφαρµογή lab3appfailures µε τον αλγόριθµο SimpleConsensus και OptSimpleConsensus για τα γενικά δίκτυα 8 και 16 κόµβων και πλήρη δίκτυα 5 και 10 κόµβων. Πόσοι γύροι απαιτούνται για να συµφωνήσουν όλες οι διεργασίες ; Ποιά είναι η ελάχιστη τιµή της σταθεράς TOT_ROUNDS που εξασφαλίζει την σωστή εκτέλεση του αλγόριθµου ; Πόσα µηνύµατα ανταλλάσουν οι διεργασίες ; Σελ. 12 από 12