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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Εργαστήριο ΔΙΕΡΓΑΣΙΕΣ - ΔΙΑΧΕΙΡΙΣΗ

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

$./jms console -w <jms in> -r <jms out> -o <operations file> namedpipe. (standard input).

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

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

Κατανεµηµένα Συστήµατα Ένα κατανεµηµένο σύστηµα είναι µια συλλογή από αυτόνοµες διεργασίες οι οποίες έχουν τη δυνατότητα να επικοινωνούν µεταξύ τους.

Ντίρλης Νικόλαος- ΕΤΥ 2 ο Φροντιστήριο Παρασκευή, 18/10/2013 Β4. Λειτουργικά Συστήματα- Φροντιστήριο 2

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

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

Λειτουργικά Συστήματα 7ο εξάμηνο, Ακαδημαϊκή περίοδος

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

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

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

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

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

lab7 PASS -Δεν έχεις καθόλου σχόλια! Διάβασε το φυλλάδιο. PASS -Πολύ καλή εργασία µε σωστά και επεξηγηµατικά σχόλια. -Πρόσεξε την στοίχισή σου!

Δημιουργία & Τερματισμός Διεργασιών. Προγραμματισμός II 1

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

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

Ορισµός Νήµα (thread) είναι µια ακολουθιακή ροή ελέγχου (δηλ. κάτι που έχει αρχή, ακολουθία εντολών και τέλος) σ ένα

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

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

Δίκτυα Επικοινωνιών ΙΙ: Network Programming UDP Sockets, Signals

Sheet2. - Άσκηση 1 οκ - Άσκηση 2 οκ. Σκέψου πώς θα µπορούσες να την

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

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

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

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

Εργαστήριο 8: Αναδρομική διεργασία εισαγωγής καινούριου κόμβου σε ΔΔΑ

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

Δημιουργία & Τερματισμός Διεργασιών. Προγραμματισμός II 1

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

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

Διάλεξη 10: Αλγόριθμοι Αμοιβαίου Αποκλεισμού σε περιβάλλον ανταλλαγής μηνυμάτων. ΕΠΛ 432: Κατανεμημένοι Αλγόριθμοι

ΕΚΔΟΣΗ 1.1 ΜΑΙΟΣ, 2018 ΕΙΣΑΓΩΓΗ ΣΤΑ ΚΑΤΑΝΕΜΗΜΕΝΑ ΣΥΣΤΗΜΑΤΑ ΕΚΛΟΓΗ ΑΡΧΗΓΟΥ ΕΠΙΜΕΛΕΙΑ: Β. ΤΣΑΚΑΝΙΚΑΣ, Β. ΤΑΜΠΑΚΑΣ

ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ. Διεργασίες και Νήματα Εργαστηριακές Ασκήσεις


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

Εντοπισμός τερματισμού. Κατανεμημένα Συστήματα 1

Αµοιβαίοςαποκλεισµός. Κατανεµηµένα Συστήµατα 03-1

Φύλλο εργασίας 3 - Χριστουγεννιάτικα φωτάκια (σταδιακή αύξηση και μείωση φωτεινότητας ενός LED) Το κύκλωμα σε breadboard

MESSAGE EDITOR FOR WINDOWS Ο ΗΓΙΕΣ ΧΡΗΣΕΩΣ

ΟΙΚΟΝΟΜΙΚΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ. Δοµές Δεδοµένων

Εισαγωγή στον Προγραµµατισµό, Αντώνιος Συµβώνης, ΣΕΜΦΕ, ΕΜΠ,, Slide 6

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

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

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

Διάλεξη 4: Εκλογή Προέδρου σε Δακτύλιους. ΕΠΛ 432: Κατανεμημένοι Αλγόριθμοι

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

Κατανεµηµένος Υπολογισµός Εαρινό Εξάµηνο Ακ. Έτους ιδάσκουσα: Παναγιώτα Φατούρου Προγραµµατιστική Εργασία

ΕΡΓΑΣΤΗΡΙΟ ΒΙΟΜΗΧΑΝΙΚΩΝ ΕΛΕΓΚΤΩΝ

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΔΙΑΓΩΝΙΣΜΑ ΠΡΟΣΟΜΟΙΩΣΗΣ 23/04/2012. Α. Να απαντήσετε με Σ ή Λ στις παρακάτω προτάσεις:

Διαδικασιακός Προγραμματισμός

Εργαστήριο 7 fork(), exec(), signals

Άρα, Τ ser = (A 0 +B 0 +B 0 +A 0 ) επίπεδο 0 + (A 1 +B 1 +A 1 ) επίπεδο 1 + +(B 5 ) επίπεδο 5 = 25[χρονικές µονάδες]

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

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

ΟΙΚΟΝΟΜΙΚΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ. Δοµές Δεδοµένων

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

Βαθμός Σχόλια. lab5 PASS PASS PASS PASS PASS. Οριακά PASS - Καλή δουλειά

ΕΡΓΑΣΤΗΡΙΟ 6: Συναρτήσεις και Αναδρομή

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

ΔΙΑΓΩΝΙΣΜΑ ΠΡΟΣΟΜΟΙΩΣΗΣ ΣΤΗΝ ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ

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

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

Καθολικέςκαταστάσεις. Ορισµοί Κατασκευή καθολικών καταστάσεων Παθητική στρατηγική Ενεργητική στρατηγική. Κατανεµηµένα Συστήµατα 04-1

Transcript:

Κατανεµηµένα Συστήµατα Ι Χειµερινό Εξάµηνο 2008-2009 Περίληψη Ο στόχος του εργαστηρίου είναι η υλοποίηση κατανεµηµένων αλγόριθµων εκλογής αρχηγού µε την γλώσσα προγραµµατισµού nesc και την χρήση Active Messages στο περιβάλλον TinyOS. Μελέτη της συµπεριφοράς των αλγόριθµων µε την χρήση του TOSSIM σε δίκτυα δακτυλίου και γενικά δίκτυα. Υλοποίηση Αλγόριθµων Εκλογής Αρχηγού Η εκλογή αρχηγού σε ένα δίκτυο απαιτεί την επιλογή µιας µοναδικής µονάδας που ϑα ϐρεθεί στην κατάσταση αρχηγός (ή εκλεγµένη ) ενώ όλες οι άλλες µονάδες ϐρίσκονται στην κατάσταση µη-αρχηγός (ή µη εκλεγµένη ). Υπάρχουν πολλοί διαφορετικοί αλγόριθµοι εκλογής αρχηγού που απευθύνονται σε συγκεκριµένους τύπους συστηµάτων που χρησιµοποιούν συγκεκριµένες ιδιότητες του συστήµατος για να εκτελεστούν. Παρ ολα αυτά, όλοι οι αλγόριθµοι µπορούν να περιγραφούν µε τον ίδιο τρόπο όταν ϑέλουµε να ορίσουµε την λειτουργικότητα που προσφέρουν στα υψηλότερα επίπεδα ενός συστήµατος. Η γλώσσα nesc προσφέρει ένα τρόπο περιγραφής της εσωτερικής λειτουργίας των αλγόριθµων µε γενικό τρόπο. Με την χρήση των interfaces µπορούµε να περιγράψουµε τις λειτουργίες των αλγόριθµων εκλογής αρχηγού µε γενικό, αφαιρετικό τρόπο. Ορίζουµε το interface LeaderElection ως εξής : command result_t init(uint16_t deviceid) αρχικοποιεί τις εσωτερικές µεταβλητές του αλγόριθµου. Η παράµετρος deviceid υποδηλώνει την ταυτότητα που ϑα χρησιµοποιήσει η διεργασία κατα την εκλογή αρχηγού. Το command επιστρέφει πάντα SUCCESS. command uint16_t get() επιστρέφει την ταυτότητα της διεργασίας που εκλέχθηκε αν η διαδικασία ολοκληρώθηκε µε επιτυχία, αλλιώς UNKNOWN_LEADER. command uint8_t getstatus() επιστρέφει IS_LEADER αν η διεργασία έχει εκλεχθεί, αλλιώς NOT_LEADER. command result_t elect() επιχειρεί την εκκίνηση της διαδικασίας εκλογής αρχηγού. Αν η διαδικασία ξεκινήσει µε επιτυχία επιστρέφει SUCCESS. Αν η διαδικασία ϐρίσκεται σε εξέλιξη ή έχει τερµατίσει, επιστρέφει FAIL. event result_t electdone(uint16_t leaderid, uint8_t isleader) όταν ολοκλη- ϱωθεί η διαδικασία εκλογής αρχηγού δηµιουργείται ένα event όπου η παράµετρος leaderid Σελ. 1 από 11

υποδηλώνει την ταυτότητα της διεργασίας που εκλέχθηκε και η παράµετρος isleader την κατάσταση της διεργασίας (IS_LEADER αν η διεργασία έχει εκλεχθεί, αλλιώς NOT_LEADER). Το event επιστρέφει πάντα SUCCESS. Ο κώδικας που αποτυπώνει το interface LeaderElection µε την γλώσσα nesc ϐρίσκεται στη σελίδα του µαθήµατος. Τοποθετήστε αυτό το αρχείο στον κατάλογο της εφαρµογής σας. Μια εφαρµογή που ϑέλει να εκλέξει µια µοναδική διεργασία (π.χ. για την δηµιουργία ενός ε- πικαλυπτικού δέντρου) ϑα χρησιµοποιήσει το παραπάνω interface χωρίς να έχει ιδιαίτερη σηµασία ποια ϑα είναι η τελική υλοποίηση των µεθόδων (δηλ. πως ϑα υλοποιήσουµε τον αλγόριθµο εκλογής αρχηγού). Ας υλοποιήσουµε την εφαρµογή lab1app που ϑέλει να εκλέξει µια µοναδική διεργασία. Για να µπορεί ο χειριστής του συστήµατος να διαγνώσει την κατάσταση που ϐρίσκονται οι συσκευές κατά την λειτουργία τους, η εφαρµογή χρησιµοποιεί κάποια Led ως εξής : Οσο εκτελείται ο αλγόριθµος εκλογής αρχηγού το κόκκινο Led είναι αναµµένο. Οταν ολοκλη- ϱωθεί η εκτέλεση και τερµατίσει ο αλγόριθµος, σβήνει. Αν η διεργασία είναι στην κατάσταση αρχηγός (ή εκλεγµένη ) το πράσινο Led είναι αναµµένο. Αν η διεργασία είναι στην κατάσταση µη-αρχηγός (ή µη εκλεγµένη ) το κίτρινο Led είναι αναµµένο. Εποµένως, η εκτέλεση του αλγόριθµου εκλογής αρχηγού και η ενηµέρωση της ολοκλήρωσης του γίνεται µε την υλοποίηση ενός task και ενός event handler: task void execleaderelection ( ) { result_t r ; // Start the leader election process r = c a l l LeaderElection. e l e c t ( ) ; i f ( r == SUCCESS) { c a l l Leds. redon ( ) ; dbg (DBG_TEMP, " Leader Election process started.\n " ) ; else dbg (DBG_TEMP, " Leader Election process already running.\n " ) ; event r e s u l t_ t LeaderElection. electdone ( uint16_t leaderid, uint8_t isleader ) { c a l l Leds. redoff ( ) ; dbg (DBG_TEMP, " Leader Election process completed.\n " ) ; i f ( isleader ) { c a l l Leds. greenon ( ) ; c a l l Leds. yellowoff ( ) ; dbg (DBG_TEMP, " I am the leader!\n " ) ; else { c a l l Leds. greenoff ( ) ; c a l l Leds. yellowon ( ) ; Σελ. 2 από 11

dbg (DBG_TEMP, " Device with ID %d i s the leader\n", leaderid ) ; Εφόσον έχουµε να κάνουµε µε ένα ασύγχρονο σύστηµα, υπάρχει περίπτωση οι συσκευές να µη ξεκινήσουν ταυτόχρονα αλλά να υπάρχει µια χρονική καθηστέριση. Για να εξασφαλίσουµε ότι όλες οι συσκευές του συστήµατος είναι ενεργοποιηµένες και συµµετέχουν στην εκλογή αρχηγού χρησιµοποιούµε ένα Timer για να καθυστερήσουµε την εκτέλεση του αλγόριθµου. Σύµφωνα µε τα παραπάνω, ορίζουµε το module lab1appm ως εξής : module lab1appm { provides { interface StdControl ; uses { interface LeaderElection ; interface Leds ; interface Timer ; implementation { // 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 LeaderElection. i n i t (TOS_LOCAL_ADDRESS) ; // Start things up set the timer to f i r e once a f t e r 1000ms command result_t StdControl. start ( ) { return c a l l Timer. start (TIMER_ONE_SHOT, 1000); // Halt execution of the application disables the clock component. command result_t StdControl. stop ( ) { return c a l l Timer. stop ( ) ; task void execleaderelection ( ) <<<< add here event r e s u l t_ t LeaderElection. electdone <<<< add here // Start the leader election event result_t Timer. f i r e d ( ) { post execleaderelection ( ) ; Παρατηρήστε ότι κατά την λειτουργία του συστήµατος υπάρχει περίπτωση να προκύψουν (α) σφάλ- Σελ. 3 από 11

µατα τερµατισµού στις συσκευές του συστήµατος (π.χ. στην εκλεγµένη συσκευή), (ϐ) παροδικά σφάλ- µατα όπου οι συσκευές λόγω επανεκκίνησης µπορεί να χάσουν την ταυτότητα της εκλεγµένης συσκευής ή (γ) προσθήκες νέων συσκευών που δεν γνωρίζουν την µοναδική συσκευή. Ενας εύκολος τρόπος να αντιµετωπίσουµε αυτές τις περιπτώσεις, είναι να εκτελούµε περιοδικά τον αλγόριθµο εκλογής αρχηγού αλλάζοντας την κλήση της Timer. Υλοποίηση του αλγόριθµου εκλογής αρχηγού LCR Ο αλγόριθµος εκλογής αρχηγού των LeLann, Chang και Roberts λειτουργεί σε κατευθυνόµενα δίκτυα δακτυλίου όπου οι διεργασίες δεν γνωρίζουν το σύνολο των διεργασιών (n). Πρόκειται για έναν αλγόριθµο σύγκρισης ταυτοτήτων όπου η διεργασία µε την µεγαλύτερη ταυτότητα εκλέγεται αρχηγός. Ο αλγόριθµος εκτελείτε για O (n) γύρους και ανταλλάσσει O ( n 2) µηνύµατα. Λόγω της ασύγχρονης λειτουργίας του συστήµατος, η σωστή εκτέλεση του αλγόριθµου LCR α- παιτεί την ύπαρξη µιας ουράς για τα εξερχόµενα µηνύµατα. Για αυτό τον λόγο χρησιµοποιούµε το component QueuedSend που προσφέρει το ίδιο interface SendMsg µε το component GenericComm αλλά τοποθετεί τα µηνύµατα σε µια ουρά. Τα αρχεία που υλοποιούν το component QueuedSend είναι στον ϕάκελο /opt/tinyos-1.x/tos/lib/queue. Κατά την µεταγλώτισση της εφαρµογή µας, για να συµπεριληφθεί σωστά το component QueuedSend πρέπει να εισάγουµε στο Makefile την εξής γραµµή : PFLAGS= -I%T/lib/Queue Η υλοποίηση του αλγόριθµου AsynchLCR, σε υψηλό επίπεδο, αποτελείται από το module AsynchLCRM που περιέχει την λογική της διαδικασίας, το component GenericComm που χρησιµοποιείται για την παραλαβή Active Messages και το component QueuedSend που χρησιµοποιείται για την αποστολή Active Messages. Το διάγραµµα διασύνδεσης απεικονίζεται γραφικά στην Εικ. 1. includes LCRMsg; configuration AsynchLCR { provides interface StdControl ; provides interface LeaderElection ; implementation { components AsynchLCRM, QueuedSend, GenericComm; AsynchLCRM. SendMsg > QueuedSend. SendMsg[AM_LCRMSG] ; AsynchLCRM. ReceiveMsg > GenericComm. ReceiveMsg [AM_LCRMSG] ; StdControl = GenericComm; StdControl = QueuedSend; LeaderElection = AsynchLCRM; Το αρχείο LCRMsg.h ορίζει την δοµή των µηνυµάτων του αλγόριθµου και τις απαραίτητες σταθερές. Η δοµή του µηνύµατος LCRMsg είναι πολύ απλή : Το πεδίο id χρησιµοποιείται για την αποθήκευση της ταυτότητας που πρόκειται να σταλεί. Το πεδίο isleader χρησιµοποιείται για τα µηνύµατα τερµατισµού που στέλνει η εκλεγµένη διεργασία (µε τιµή IS_LEADER). Σελ. 4 από 11

Σχήµα 1: Το διάγραµµα διασύνδεσης του AsynchLCR typedef struct LCRMsg { uint16_t id ; uint8_t isleader ; LCRMsg; enum { AM_LCRMSG = 14, UNKNOWN_LEADER = 65534, IS_LEADER = 1, NOT_LEADER = 0 ; Το module AsynchLCRM χρησιµοποιεί τα interface SendMsg και ReceiveMsg για την αποστολή και παραλαβή µηνυµάτων και προσφέρει το interface LeaderElection. module AsynchLCRM { provides { interface LeaderElection ; uses { interface SendMsg; interface ReceiveMsg ; Οι διεργασίες διατηρούν (α) µια µεταβλητή uint16_t m_id µε την ταυτότητα της διεργασίας, (ϐ) µια µεταβλητή uint8_t m_isleader µε την κατάσταση εκλεγµένη/µη-εκλεγµένη, (γ) µια µεταβλητή uint16_t m_leaderid µε την ταυτότητα της µοναδικής διεργασίας που εκλέχθηκε, και (δ) µια µεταβλητή TOS_Msg m_msg για την αποστολή µηνυµάτων. implementation { uint16_t m_id; uint16_t m_leaderid ; uint8_t m_isleader ; TOS_Msg m_msg;... Η αρχικοποίηση του αλγόριθµου γίνεται ως εξής : // I n i t i a l i z e the leader election process. async command result_t LeaderElection. i n i t ( uint16_t deviceid ) { atomic { m_isleader = NOT_LEADER; Σελ. 5 από 11

m_id = deviceid ; m_leaderid = UNKNOWN_LEADER; dbg (DBG_BOOT, "AsynchLCR: i n i t i a l i z e d.\n " ) ; και οι δύο συναρτήσεις get υλοποιούνται απλά : // Get current leader ID. async command uint16_t LeaderElection. get ( ) { return m_leaderid ; // Get current status. async command uint8_t LeaderElection. getstatus ( ) { return m_isleader ; Η υλοποίηση της elect ελέγχει κατά πόσο έχει ήδη ολοκληρωθεί η διαδικασία, δηλ. αν η leaderid δεν έχει τιµή UNKNOWN_LEADER αλλά το ID της µοναδικής διεργασίας. Σε περίπτωση που δεν έχει ολοκληρωθεί η διαδικασία, η διεργασία στέλνει ένα µήνυµα µε την ταυτότητα της. Παρατηρήστε ότι η χρήση της καθολικής µεταβλητής γίνεται µε το πρόθεµα atomic. // Start the leader election process. async command result_t LeaderElection. e l e c t ( ) { uint16_t leaderid ; atomic leaderid = m_leaderid ; // Check i f already finished i f ( leaderid! = UNKNOWN_LEADER) return FAIL ; dbg (DBG_USR1, "AsynchLCR: started\n " ) ; // Send f i r s t message ( with deviceid ) post sendmessage ( ) ; Τέλος, το interface LeaderElection ορίζει και την χρήση του event electdone. Η δη- µιουργία νέων event γίνεται από το task reportelectdone. Παρατηρήστε τον τρόπο δηµιουργίας νέων event µε το πρόθεµα signal. Παρατηρήστε ότι η χρήση των καθολικών µεταβλητών γίνεται µε το πρόθεµα atomic και την αντιγραφή τους σε τοπικές µεταβλητές. // Generate the event of the completion of the leader e l e c t i o n process task void reportelectdone ( ) { uint16_t leaderid ; uint8_t isleader = NOT_LEADER; atomic { leaderid = m_leaderid ; i f ( m_leaderid == m_id) { Σελ. 6 από 11

m_isleader = IS_LEADER; isleader = IS_LEADER; dbg (DBG_BOOT, "AsynchLCR: terminated.\n " ) ; signal LeaderElection. electdone ( leaderid, isleader ) ; Η λειτουργία του module AsynchLCRM στέλνει µηνύµατα στην εξερχόµενη γειτονική διεργασία στις εξής περιπτώσεις : Στην εκκίνηση του αλγόριθµου µε την χρήση του task sendmessage. Το µήνυµα περιέχει την ταυτότητα της διεργασίας (id = m_id) και η µεταβλητή isleader έχει τιµή NOT_LEADER. Για την προώθηση ενός µηνύµατος µε µεγαλύτερη ταυτότητα χρησιµοποιεί το task sendreceivedmessage. Οταν µια διεργασία εκλεχθεί αρχηγός στέλνει ένα µήνυµα ενηµέρωσης των υπόλοιπων διεργασιών (µήνυµα τερµατισµού) µε την χρήση του task sendterminationmessage. Το µήνυ- µα περιέχει την ταυτότητα της διεργασίας (id = m_id) και η µεταβλητή isleader έχει τιµή IS_LEADER. // Generate a new message with the ID of the device. task void sendmessage ( ) { LCRMsg msgdata = (LCRMsg ) m_msg. data ; // Set message contents atomic msgdata >id = m_id; msgdata >isleader = NOT_LEADER; // Try to send the message c a l l SendMsg. send (TOS_BCAST_ADDR, s i z e o f (LCRMsg), &m_msg) ; dbg (DBG_TEMP, "AsynchLCR: Sending \tlcrmsg(%d\ t%d)\n", msgdata >id, msgdata >isleader ) ; // Generate a termination message with the ID of the leader. task void sendterminationmessage ( ) { LCRMsg msgdata = (LCRMsg ) m_msg. data ; // Set message contents atomic msgdata >id = m_leaderid ; msgdata >isleader = IS_LEADER; // Try to send the message c a l l SendMsg. send (TOS_BCAST_ADDR, s i z e o f (LCRMsg), &m_msg) ; Σελ. 7 από 11

dbg (DBG_TEMP, "AsynchLCR: Sending \tlcrmsg(%d\ t%d)\n", msgdata >id, msgdata >isleader ) ; // Forward received message task void sendreceivedmessage ( ) { LCRMsg msgdata = (LCRMsg ) m_msg. data ; // Try to send the message c a l l SendMsg. send (TOS_BCAST_ADDR, s i z e o f (LCRMsg), &m_msg) ; dbg (DBG_TEMP, "AsynchLCR: Sending \tlcrmsg(%d\ t%d)\n", msgdata >id, msgdata >isleader ) ; Το interface SendMsg ορίζει και την χρήση του event senddone. Εποµένως υλοποιούµε έναν απλό event handler και στην περίπτωση που το event αφορούσε ένα µήνυµα τερµατισµού, γίνεται µια κλήση στο task reportelectdone (και ο αλγόριθµος τερµατίζει). // Respond to the <code>sendmsg. senddone</code> event event r e s u l t_ t SendMsg. senddone ( TOS_MsgPtr msg, bool success ) { LCRMsg msgdata = (LCRMsg ) msg >data ; dbg (DBG_TEMP, " Sent \tlcrmsg(%d\ t%d)\n", msgdata >id, msgdata >isleader ) ; // I f Termination message sent successfully, report i t and terminate i f ( msgdata >isleader ) post reportelectdone ( ) ; Η παραλαβή των µηνυµάτων γίνεται µέσω του interface ReceiveMsg και τη διαχείριση του event ReceiveMsg. Η συνάρτηση ελέγχει τον τύπο του µηνύµατος και πράττει ανάλογα. // Process a message received event TOS_MsgPtr ReceiveMsg. receive ( TOS_MsgPtr recv_packet ) { LCRMsg msgdata = (LCRMsg ) recv_packet >data ; uint16_t myid; atomic myid = m_id; dbg (DBG_TEMP, "AsynchLCR: Received \tlcrmsg(%d\ t%d)\n", msgdata >id, msgdata >isleader ) ; // Check i f this a termination message i f ( msgdata >isleader == IS_LEADER) { // The election has finished get leader s ID atomic m_leaderid = msgdata >id ; Σελ. 8 από 11

dbg (DBG_TEMP, "AsynchLCR: This i s a termination message\n " ) ; // Propagate Termination Message i f ( myid! = msgdata >id ) post sendterminationmessage ( ) ; else { // This i s a normal message // Check i f ID higher than ours i f ( msgdata >id > myid) { LCRMsg nextmsgdata = (LCRMsg ) m_msg. data ; // Copy message nextmsgdata >id = msgdata >id ; // Forward Message post sendreceivedmessage ( ) ; else i f ( msgdata >id == myid) { // This i s my ID I am the leader atomic m_leaderid = m_id; // Send Termination Message post sendterminationmessage ( ) ; return recv_packet ; ιασύνδεση της εφαρµογής lab1app µε τον αλγόριθµου AsynchLCR Η διασύνδεση της εφαρµογής lab1app µε τον αλγόριθµου AsynchLCR, σε υψηλό επίπεδο, αποτελείτε από το module lab1appm που περιέχει την λογική της εφαρµογής, το component AsynchLCR που υλοποιεί έναν αλγόριθµο εκλογής αρχηγού, το component TimerC που χρησιµοποιείται για την εκκίνηση της διαδικασίας εκλογής και το component LedsC για την έξοδο της κατάστασης της συσκευής. Το διάγραµµα διασύνδεσης απεικονίζεται γραφικά στην Εικ. 1. configuration lab1app { implementation { components Main, lab1appm, AsynchLCR, LedsC, TimerC ; Main. StdControl > lab1appm. StdControl ; Main. StdControl > AsynchLCR. StdControl ; lab1appm. LeaderElection > AsynchLCR. LeaderElection ; lab1appm. Leds > LedsC ; lab1appm. Timer > TimerC. Timer [ unique ( " Timer " ) ] ; Σελ. 9 από 11

Σχήµα 2: Το διάγραµµα διασύνδεσης της εφαρµογής lab1app Εκτελέστε τον αλγόριθµο µε την χρήση των δύο τοπολογιών δακτυλίου που προσφέρονται στην σελίδα του µαθήµατος για 7 και 16 διεργασίες. Παρατηρείστε τα µηνύµατα εξόδου. Μπορείτε να εξηγήσετε την συµπεριφορά του command elect; Πως γίνεται µια διεργασία να γνωρίζει τον αρχηγό χωρίς να έχει εκτελεστεί η command elect; Υλοποίηση του αλγόριθµου εκλογής αρχηγού FloodMax Ο αλγόριθµος εκλογής αρχηγού FloodMax λειτουργεί σε γενικά δίκτυα όπου οι διεργασίες δεν γνω- ϱίζουν το σύνολο των διεργασιών (n). Πρόκειται για έναν αλγόριθµο σύγκρισης ταυτοτήτων όπου η διεργασία µε την µεγαλύτερη ταυτότητα εκλέγεται αρχηγός. Ο αλγόριθµος εκτελείτε για O (diam(g)) γύρους και ανταλλάσσει O (diam(g) m) µηνύµατα. Οπως και στον αλγόριθµο AsynchLCR οι διεργασίες διατηρούν (α) µια µεταβλητή uint16_t m_id µε την ταυτότητα της διεργασίας 1, (ϐ) µια µεταβλητή uint8_t m_isleader µε την κατάσταση εκλεγµένη/µη-εκλεγµένη 2, (γ) µια µεταβλητή uint16_t m_leaderid µε την ταυτότητα της µοναδικής διεργασίας που εκλέχθηκε, και (δ) µια µεταβλητή TOS_Msg m_msg για την αποστολή µηνυµάτων. Επιπλέον οι διεργασίες διατηρούν µια µεταβλητή uint16_t m_maxid η οποία αρχικά είναι ίση µε την ταυτότητα uint16_t m_id. Σε τακτά χρονικά διαστήµατα BEACON_INTERVAL 3, οι διεργασίες στέλνουν ένα µήνυµα που περιέχει την µεταβλητή m_maxid. Οταν µια διεργασία λάβει ένα µήνυµα µε ταυτότητα uint16_t id το συγκρίνει µε την µεταβλητή m_maxid. Αν είναι µεγαλύτερη, ϑέτει την µεταβλητή m_maxid στην νέα τιµή id. Οι διεργασίες εκτελούν τον αλγόριθµο για συγκεκριµένο χρονικό διάστηµα EXEC_INTERVAL 4. Οταν περάσει το χρονικό διάστηµα, (α) ο αλγόριθµος ελέγχει τις µεταβλητές m_id, m_maxid. Αν η ταυτότητα της διεργασίας είναι η µεγαλύτερη που έχει εντοπιστεί, (ϐ) µεταβαίνει στην κατάσταση IS_LEADER ή αλλιώς (ϐ ) µεταβαίνει στην κατάσταση NOT_LEADER, (γ) ϑέτει την µεταβλητή m_leaderid µε την τιµή της m_maxid και (δ) τερµατίζει. Βασιστείτε στο component AsynchLCR και το module AsynchLCRM για να υλοποιήσετε τον αλγόριθµο FloodMax. Τροποποιείστε την εφαρµογή lab1app για να χρησιµοποιεί τον αλγόριθµο FloodMax. οκιµάστε την συµπεριφορά του αλγόριθµου σας µε την χρήση της τοπολογίας γενικού δικτύου που προσφέρεται στην σελίδα του µαθήµατος για 8 διεργασίες. Για πόσο χρονικό διάστηµα πρέπει να 1 Εχει δοθεί κατά την αρχικοποίηση του αλγόριθµου, δες command result_t init(uint16_t id) 2 Πιθανές τιµές IS_LEADER και NOT_LEADER: δύο σταθερές µε τιµή 1 και 0 αντίστοιχα 3 Οπου BEACON_INTERVAL µια σταθερά µε τιµή 1000 msec 4 Οπου EXEC_INTERVAL µια σταθερά µε τιµή ανάλογη µε την αναµενόµενη διάµετρο του δικτύου σε sec, π.χ. 15000 msec Σελ. 10 από 11

εκτελεστεί ο αλγόριθµος ; Πως µπορούµε να µειώσουµε τον αριθµό µηνυµάτων (αλγόριθµος OptFloodMax); Εργαστηριακές Ασκήσεις 1. Εκτελέστε την εφαρµογή lab1app µε τον αλγόριθµο LCR για τα δίκτυα δακτυλίου 7 και 16 κόµβων. Ποιά διεργασία εκλέγεται αρχηγός ; Πόσα µηνύµατα ανταλλάσουν οι διεργασίες ; 2. Υλοποιήστε τον αλγόριθµο εκλογής αρχηγού FloodMax. 3. Εκτελέστε την εφαρµογή lab1app µε τον αλγόριθµο FloodMax για το γενικό δίκτυο 8 κόµβων. Ποιά διεργασία εκλέγεται αρχηγός ; Πόσα µηνύµατα ανταλλάσουν οι διεργασίες ; 4. Εκτελέστε την εφαρµογή lab1app µε τον αλγόριθµο FloodMax για τα δίκτυα δακτυλίου 7 και 16 κόµβων. Ποιά διεργασία εκλέγεται αρχηγός ; Πόσα µηνύµατα ανταλλάσουν οι διεργασίες ; Συγκρίνετε την συµπεριφορά του αλγόριθµου FloodMax µε αυτή του αλγόριθµου LCR. Ποιά είναι η ϐασική διαφορά ; 5. Υλοποιήστε τον αλγόριθµο εκλογής αρχηγού OptFloodMax και επαναλάβετε τις ερωτήσεις 3 και 4. Σελ. 11 από 11