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

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

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

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

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

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

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

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

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

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

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

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

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

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

Επίλυση Προβληµάτων µε Greedy Αλγόριθµους

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

H ΓΛΩΣΣΑ C. Μάθηµα 1: Το Πρώτο µας Πρόγραµµα σε C. ηµήτρης Ψούνης

Μάθημα 5 ο : Μετάδοση Μηνυμάτων

ΗΥ240: οµές εδοµένων Χειµερινό Εξάµηνο Ακαδηµαϊκό Έτος Παναγιώτα Φατούρου. Προγραµµατιστική Εργασία 3 ο Μέρος

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κεφάλαιο 8 : H γλώσσα προγραµµατισµού Pascal

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

Χρήση του Ηλεκτρονικού Ταχυδροµείου µεαποµακρυσµένη σύνδεση

ΕΡΓΑΣΤΗΡΙΟ 11 - Απαντήσεις

H ΓΛΩΣΣΑ C. Μάθηµα 7: Πίνακες. ηµήτρης Ψούνης

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

Εισαγωγή στην πληροφορική

ΚΕΦΑΛΑΙΟ Web Services

του και από αυτόν επιλέγουµε το φάκελο εµφανίζεται ένα παράθυρο παρόµοιο µε το ακόλουθο:

ΕΡΓΑΣΙΑ ΕΞΑΜΗΝΟΥ - ΜΕΡΟΣ Γ'

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

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

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

P (A) = 1/2, P (B) = 1/2, P (C) = 1/9

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

2.2.3 Η εντολή Εκτύπωσε

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

Κεφάλαιο , 3.2: Συναρτήσεις II. ( ιάλεξη 12) ιδάσκων: ηµήτρης Ζεϊναλιπούρ

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

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

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

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

Βασικές Έννοιες Δοµών Δεδοµένων

Δροµολόγηση (Routing)

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

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

Κεφάλαιο Αλφαριθµητικές Σειρές Χαρακτήρων (Strings)

Initialize each person to be free. while (some man is free and hasn't proposed to every woman) { Choose such a man m w = 1 st woman on m's list to

ΤΜΗΜΑ ΕΠΙΧΕΙΡΗΜΑΤΙΚΟΥ ΣΧΕΔΙΑΣΜΟΥ & ΠΛΗΡΟΦΟΡΙΑΚΩΝ ΣΥΣΤΗΜΑΤΩΝ ΤΕΙ ΠΑΤΡΑΣ ΤΕΙ ΠΑΤΡΑΣ ΣΗΜΕΙΩΣΕΙΣ ΜΑΘΗΜΑΤΟΣ ΕΠΙΧΕΙΡΗΣΙΑΚΏΝ ΠΑΙΓΝΙΩΝ- ΠΡΟΓΡΑΜΜΑ GAMBIT

c(2x + y)dxdy = 1 c 10x )dx = 1 210c = 1 c = x + y 1 (2xy + y2 2x + y dx == yx = 1 (32 + 4y) (2x + y)dxdy = 23 28

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

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

Packet Tracer. ηµιουργία τοπολογίας Βήµα 1: Εκτελούµε το Packet Tracer

Ασκήσεις Φροντιστηρίου «Υπολογιστική Νοηµοσύνη Ι» 7ο Φροντιστήριο 15/1/2008

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Αναφορές

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

Οδηγίες κλεισίµατος Ισολογισµού Οικονοµικές Αναφορές

12xy(1 x)dx = 12y. = 12 y. = 12 y( ) = 12 y 1 6 = 2y. x 6x(1 x)dx = 6. dx = 6 3 x4

ΣΕΤ ΑΣΚΗΣΕΩΝ 4. Προθεσµία: 22/12/2016, 21:00

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

Το Ηλεκτρονικό Ταχυδροµείο ( ) είναι ένα σύστηµα που δίνει την δυνατότητα στον χρήστη να ανταλλάξει µηνύµατα αλλά και αρχεία µε κάποιον άλλο

Εισαγωγή στη Χρήση της Εφαρµογής Compaq Visual Fortran & του Microsoft Developer Studio

ΦΥΣ-151. Ηλεκτρονικοί Υπολογιστές Ι (FORTRAN 77) (Άνοιξη 2004)

Γλώσσα Προγραμματισμού C++ Εισαγωγή - Μια πρώτη ματιά

Υλοποιήσεις Ψηφιακών Φίλτρων

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

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

Επιστηµονικός Υπολογισµός Ι Ενότητα 1 - Εισαγωγή. Ευστράτιος Γαλλόπουλος

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

Άσκηση 5 -Δηµιουργία ιστοσελίδων µε HTML µέρος 5 ο

lab13grades Άσκηση 2 -Σωστά απελευθερώνετε ολόκληρη τη λίστα και την κεφαλή

C Programming EPL032 Maria Stavrinou Ioannou Εισαγωγή στη Γλώσσα C

Σύνοψη Προηγούµενου. Γλώσσες χωρίς Συµφραζόµενα (2) Ισοδυναµία CFG και PDA. Σε αυτό το µάθηµα. Αυτόµατα Στοίβας Pushdown Automata

Σημειώσεις του εργαστηριακού μαθήματος Πληροφορική ΙΙ. Εισαγωγή στην γλώσσα προγραμματισμού

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

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

PROJECT ΣΤΟ ΜΑΘΗΜΑ ΕΙΣΑΓΩΓΗ ΣΤΙΣ ΕΥΡΕΤΙΚΕΣ ΜΕΘΟ ΟΥΣ

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

Βαθμός Σχόλια. lab PASS 1194 PASS 1238 PASS 1239 PASS

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

QR είναι ˆx τότε x ˆx. 10 ρ. Ποιά είναι η τιµή του ρ και γιατί (σύντοµη εξήγηση). P = [X. 0, X,..., X. (n 1), X. n] a(n + 1 : 1 : 1)

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

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΜΟΣ Εντολές επιλογής και αποφάσεων 1 ο Φύλλο Εργασιών Εισαγωγικές ασκήσεις για την εντολή if ΑΠΑΝΤΗΣΕΙΣ

ΣΕΤ ΑΣΚΗΣΕΩΝ 4. Προθεσµία: 13/1/13, 22:00

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Μαθήματα από τα εργαστήρια

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

Κλάσεις και Αντικείµενα

Κρυπτογραφία και Πολυπλοκότητα

Μονοδιάστατοι πίνακες Πολυδιάστατοι πίνακες Μέθοδοι Μέθοδοι Recursive Overloading

υναµικές οµές εδοµένων

ΗΥ240: Δοµές Δεδοµένων Εαρινό Εξάµηνο Ακαδηµαϊκό Έτος 2017 Διδάσκουσα: Παναγιώτα Φατούρου Προγραµµατιστική Εργασία - 1 ο Μέρος

Παρακάτω δίνεται o σκελετός προγράμματος σε γλώσσα C. Σχολιάστε κάθε γραμμή του κώδικα.

Εισαγωγή και επεξεργασία δεδοµένων

1 ΕΙΣΑΓΩΓΗ. Πρωταρχικοί Τύποι

Προγραμματιστικές Ασκήσεις, Φυλλάδιο 1

int array[10]; double arr[5]; char pin[20]; Προγραµµατισµός Ι

Εφαρμογές Σειριακής Επικοινωνίας

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αντικείμενα με πίνακες. Constructors. Υλοποίηση Στοίβας

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

1. Ακολουθία 2. Επιλογή 2.1. Απλή επιλογή

Οι δείκτες στη γλώσσα C

Στοιχεία Προγραμματισμού Σε Γραφικό Περιβάλλον Φύλλο εργασίας 1 ο

Transcript:

Επισκόπιση Κατανεµηµένα Συστήµατα Ι Μάθηµα Βασικής Επιλογής, Χειµερινού Εξαµήνου Τοµέας Εφαρµογών και Θεµελιώσεων Χρήστος Κονίνης Rerun exactly the same Simulation Τρίτη, 1 εκεµβρίου, 2009 Υπολογιστικό 4η Ασκηση findval Μέχρι τώρα όλα τα µηνύµατα που έστελνε ένας κόµβος παραδίδονταν µε επιτυχία Τι γίνεται σε περίπτωση που ϑέλουµε να εξοµοιώσουµε σφάλµατα στην επικοινωνία; Πρέπει να προσθέσουµε το random_drop_chain στην αλυσίδα των transmission model Το random_drop_chain απορρίπτει µηνύµατα µε µια συγκεκριµένη πιθανότητα prepare_world edge_model= l i s t comm_model= disk_graph \ transm_model= s t a t s _ c h a i n \ range=1 chain_transm_model name=random_drop_chain p r o b a b i l i t y =0.1 chain_transm_model name= r e l i a b l e r e c t _ w o r l d width =50 height =50 count =5000 p r o c e s s o r s = h e l l o w o r l d s i m u l a t i o n m a x _ i t e r a t i o n s =10 d u m p _ t r a n s m i s s i o n _ s t a t s Το παραπάνω παράδειγµα απορρίπτει µηνύµατα µε πιθανότητα 10% Τα µηνύµατα που δεν απορρίπτονται, παραδίδονται στον τελικό προορισµό από το reliable model Η αλυσίδα των transmission models που προκύπτει είναι : Message > StatsChain > RandomDropChain > R e l i a b l e

Επαναλαµβάνοντας την ίδια εξοµοίωση Το προηγούµενο παράδειγµα παρατηρούµε ότι σε κάθε εξοµοίωση παίρνουµε διαφορετικά αποτελέσµατα Αυτό συµβαίνει γιατί : 1. Το rect_world τοποθετεί τους κόµβους τυχαία 2. Το random_drop_chain απορρίπτει τα µηνύµατα τυχαία Αν ϑέλουµε να επαναλαµβάνουµε την ίδια εξοµοίωση πρέπει να αρχικοποιούµε την γεννήτρια τυχαίων αριθµών µε το ίδιο seed Υπάρχουν 2 τρόποι για να την αρχικοποιήσουµε : 1. Να ϑέσουµε απευθείας τιµή στο seed random_seed action = s e t seed =123456789 2. Να σώσουµε το seed από µια εξοµοίωση και έπειτα να την χρησιµοποιήσουµε σε µια άλλη random_seed action = create filename = f i l e _ c o n t a i n i n g _ t h e _ s e e d random_seed action =load filename = f i l e _ c o n t a i n i n g _ t h e _ s e e d Κατεβάστε το κώδικα του παραδείγµατος από εδώ : f t p : / / c a r r o t. c t i. gr / lab05 / simpleconsensus. t a r. gz Μεταφέρεται τα αρχεία msgserrors.conf και input-topology.xml στο ϕάκελο shawn/buildfiles ηµιουργήστε ένα νέο ϕάκελο shawn/src/legacyapps/simpleconsensus Μεταφέρεται υπόλοιπα αρχεία στον ϕάκελο shawn/src/legacyapps/simpleconsensus Από την κονσόλα µεταβείτε στον ϕάκελο shawn/buildfiles ώστε την εντολή ccmake../src και µετά: c, για να ενηµερωθεί για τον νέο κώδικα που προσθέσατε Ενεργοποιήστε την επιλογή simpleconsensus (πατώντας enter) c, για να ενηµερωθεί για τις αλλαγές g, για να αποθηκεύσει τις αλλαγές Τέλος δώστε την εντολή make για να γίνει compile το shawn Ο συγκεκριµένος Processor υλοποιεί τον αλγόριθµο simple consensus Ολες οι διεργασίες ξεκινάνε µε µία τιµή (την µεταβλητή input_value_) Εχουν ένα πίνακα που αποθηκεύουν όλες τις τιµές που έχουν λάβει από άλλες διεργασίες (σε κάθε ϑέση i την τιµή της διεργασίας i) Στην αρχή κάθε ϑέση του πίνακα αρχικοποιείται µε UNKNOWN_VALUE Σε κάθε γυρο οι διεργασίες στέλνουν ένα µήνυµα µε τον πίνακα στους γείτονες Κάθε διεργασία που λάβει ένα µήνυµα ενηµερώνει τον πίνακα που έχει µε τις νέες τιµές που έµαθε Οι διεργασίες τερµατίζουν µετα από diameter γύρους και εξετάζοντας τις τιµές του πίνακα αποφασίζουν για µία τίµη (µεταβλητή output_value_) Εκτελέστε τον simpleconsensus χρησιµοποιώντας το msgserrors.conf Παρατηρούµε ότι όλες οι διεργασίες αποφασίζουν την ίδια τιµη BEGIN ITERATION 4... DONE ITERATION 4 [ 0 active, 0 sleeping, 7 inactive ] Τροποποιήστε την πιθανότητα στο random_drop_chain του msgserrors.conf και επαναλάβεται την εξοµοίωση Θέστε την πιθανότητα ίση µε 0.9 (90%), πόσους γύρους χρείαζεται για να αποφασίσουν την ίδια τιµή όλες οι διεργασίες ;

Επισκόπιση Rerun exactly the same Simulation 4η Ασκηση findval Μέχρι τώρα χρησιµοποιούσαµε processors για να υλοποιήσουµε έναν αλγόριθµο Κάθε processor είχε την δικιά του εσωτερική κατάσταση (µεταβλητές που ήταν ιδιωτικές). Ο µόνος τρόπος για έχουµε πρόσβαση στην εσωτερική κατάσταση του processor ήταν µέσω debug µηνυµάτων Οµως σε πολλές περιπτώσεις ϑέλουµε να αποθηκεύσουµε την κατάσταση ενός κόµβου Επιπλέον σε αρκετές περιπτώσεις αλγόριθµοι χρειάζονται τιµές σαν είσοδο που παράγονται από άλλους πολύπλοκους αλγόριθµους Τα Tags είναι ένας µηχανισµός του shawn για να προσθέτουµε πληροφορία (µεταβλητές) στους κόµβους Χρησιµοποιώντας τα tasks load/save world µπορούµε να αποθηκεύουµε και να ανακτούµε αυτές τις πληροφορίες Πώς ϕτιάχνουµε ένα νέο Tag 1. Ορίζουµε µια µεταβλητή δείκτη τύπου shawn::<type name>tag στο processor.h π.χ. Πρακτικά τα Tags είναι κλάσεις που περιέχουν µία τιµή (π.χ. µια µεταβλητή) και ένα όνοµα (string) Υπάρχουν 3 διαφορετικές κατηγορίες Tags : 1. Simple Tags Περιέχουν τιµές ενός συγκεκριµένου τύπου (π.χ. boolean, int, string) 2. Group Tags Περιέχουν άλλα Tags 3. Map Tags Περιέχουν Ϲεύγη τιµών συγκεκριµένου τύπου shawn : : IntegerTag i n t _t a g ; 2. Την αρχικοποιούνται µε ένα νέο αντικείµενο shawn::<type name>tag συνήθως στην boot() του processor.cpp π.χ. i n t _t a g = new shawn : : IntegerTag ( "tag_name ", value ) ; 3. Προαιρετικά µπορούµε να ϑέσουµε το Tag µόνιµο ( set_persistency(true) ) ώστε να αποθηκεύετε αυτόµατα µε το save_world π.χ. int_ tag >s e t _ p e r s i s t e n c y ( true ) ; 4. Προσθέτουµε το νεο Tag στον κόµβο µε την συνάρτηση owner_w().add_tag( ); π.χ. owner_w ( ). add_tag ( i n t _t a g ) ;

Πώς ϕτιάχνουµε ένα νέο Tag Πώς διαβάζουµε/θέτουµε τιµή σε ένα Tag Παραδείγµατα αρχικοποίησης διαφορετικών Simple Tags Integer Tag : shawn : : IntegerTag i n t _t a g ; int_tag = new shawn : : IntegerTag ( "tag_name ", value ) ; int_ tag >s e t _ p e r s i s t e n c y ( true ) ; owner_w ( ). add_tag ( i n t _t a g ) ; Boolean Tag : shawn : : BoolTag bool_tag ; bool_tag = new shawn : : BoolTag ( "tag_name ", value ) ; owner_w ( ). add_tag ( bool_tag ) ; String Tag : shawn : : S t r i n g r T a g s t r i n g _t a g ; s t r i n g _t a g = new shawn : : S t r i n g T a g ( "tag_name ", value ) ; owner_w ( ). add_tag ( s t r i n g _t a g ) ; Στην περίπτωση που έχουµε ένα δείκτη στην µεταβλητή Tag : Καλούµε την µέθοδο set_value() για να ϑέσουµε µια νέα τιµή Καλούµε την µέθοδο value() για να πάρουµε την τιµή Παράδειγµα χρήσης Tag int_tag >set_value ( 4 2 ) ; i n t i n t _ v a l u e = in t _ tag >value ( ) string_tag >set_value ( " t e s t " ) ; S t r i n g s t r i n g _ v a l u e = s t r i n g _ t a g >value ( ) bool_tag >s e t _v a l u e ( t r u e ) ; bool bool_value = bool_tag >value ( ) Πώς ϐρίσκουµε ένα υπάρχων Tag από το αρχείο τοπολογίας Οταν υπάρχουν Tag στο αρχείο τοπολογίας (π.χ topology.xml) τότε ϕορτώνονται από τον εξοµοιωτή πριν ξεκινήσει η εξοµοίωση Σε αυτή την περίπτωση ξέρουµε µόνο το όνοµα του Tag και ϑέλουµε να πάρουµε την τιµή του: Καλούµε την µέθοδο owner_w().find_tag_w("tag name") για να πάρουµε το TagHandle που περιέχει το Tag shawn : : TagHandle tag = owner_w ( ). find_tag_w ( " parent " ) ; Καλούµε την µέθοδο tag.get() και κάνουµε dynamic_cast για να πάρουµε το πραγµατικό Tag shawn : : S t r i n g T a g parenttag = dynamic_cast <shawn : : S t r i n g T a g >( tag. get ( ) ) ; Καλούµε την µέθοδο set_value(), value() για να πάρουµε/θέσουµε τιµή s t r i n g _t a g >set_value ( " v0 " ) ; s t r i n g s t r i n g _ v a l u e = in t _ ta g >value ( ) Προσπέλαση των Tags από το αρχείο τοπολογίας Παράδειγµα προσπέλασης Tag από topology.xml shawn : : TagHandle tag = node. find_tag_w ( " i n p u t " ) ; / / check i f the tag e x i s t and has been added to the node i f ( tag. i s _ n o t _ n u l l ( ) ) { / / cast to the s p e c i f i c Tag type i n p u t _ t a g = dynamic_cast <shawn : : IntegerTag >( tag. get ( ) ) ; } input_tag >s e t _ v a l u e ( 42 ) ; input_tag >s e t _ p e r s i s t e n c y ( true ) ;

Θα τροποποιήσετε το Processor.cpp στο shawn/src/legacyapps/simpleconsensus ώστε να ϕορτώνει την µεταβλητή input_value_ από το Tag "input_value" του "input_topology.xml" : <snapshot i d ="0" >... <node i d = " v0 " > < l o c a t i o n x = " 0 " y = " 0. 2 " z = " 0 " / > <tag type = " i n t " name= " input_ value " value = " 4 1 " /> </node> <node i d = " v1 " > < l o c a t i o n x = " 0 " y = " 1 " z = " 0 " / > <tag type = " i n t " name= " input_ value " value = " 4 2 " /> </node>.... </ snapshot > Θα χρησιµοποιήσουµε ένα νέο Tag µε όνοµα "output_value ώστε να αποθηκεύουµε την µεταβλητή output_value_ Θα εκτελέσουµε την εξοµοίωση µε την τοπολογία input-topology.xml και ϑα σώσουµε την εξοµοίωση σε ένα αρχείο output-topology.xml Χρησιµοποιώντας το παρακάτω conf αρχειό εκτελέστε µια εξοµοίωση prepare_world edge_model= s i mple comm_model= disk_graph range=1 load_world f i l e = input topology. xml p r o c e s s o r s = simpleconsensus diameter =4 s i m u l a t i o n m a x _ i t e r a t i o n s =100 save_world f i l e =output topology. xml Παρατηρήστε τα περιεχόµενα output-topology.xml : <snapshot i d ="0" >... <node i d = " v0 " > < l o c a t i o n x = " 0 " y = " 0. 2 " z = " 0 " / > <tag type = " i n t " name= " input_ value " value = " 4 1 " /> <tag type = " i n t " name= " output_value " value = "4 2 " /> </node>.... </ snapshot > 1. ηλώστε 2 µεταβλητές τύπου shawn::integertag* στο Processor.h µε όνοµα input_tag_, ouput_tag_ shawn : : IntegerTag input_tag ; shawn : : IntegerTag output_tag ; 2. Αρχικοποιήστε τις µεταβλητές στην boot() output_tag_ = new shawn : : IntegerTag ( " output_value ", output_value_ owner_w ( ). add_tag ( output_tag_ ) ; output_tag_ >s e t _ p e r s i s t e n c y ( true ) ; shawn : : TagHandle tag = owner_w ( ). find_tag_w ( " i n p u t _v a l u e " ) ; i f ( tag. i s _ n o t _ n u l l ( ) ) { i n p u t _ t a g _ = dynamic_cast <shawn : : IntegerTag >( tag. get ( ) ) ; } input_value_ = input_tag_ >value ( ) ; 3. Μετά στην συνάρτηση work() ϐρίσκουµε το σηµείο που ενηµερώνουµε την µεταβλητη output_value_ και ενηµερώνουµε το αντίστοιχο Tag Επισκόπιση output_tag_ >s e t _ v a l u e ( output_value_ ) ; Rerun exactly the same Simulation 4η Ασκηση findval

findval - Υλοποίηση 1. Καλείστε να υλοποιήσετε έναν αλγόριθµο που κάθε διεργασία ϑα διαβάζει µια τιµή (input_value) 2. Θα στέλνει αυτή την τιµή σε µια ειδική διεργασία (Gateway Node) 3. Η διεργασία στο Gateway Node ϑα υπολογίζει την ελάχιστη τιµή, την µέγιστη τιµη, τον µέσο όρο και το σύνολο, από τις τιµές που έχει λάβει Οι τιµές των διεργασιών ϑα περιέχονται στα αρχεία µε τις τοπολογίες ως Tags µε όνοµα input_value Κάθε διεργασία (και το Gateway Node ) ϑα διαβάζει την τιµή της κατα την αρχικοποίηση από το αντίστοιχο Tag Το Gateway Node ϑα επιλέγετε χρησιµοποιώντας την συνάρτηση special_boot() Σε κάθε γύρο το Gateway Node ϑα τυπώνει από πόσους κόµβους έχει λάβει τιµή καθώς και το τρέχων ελάχιστο, µέγιστο, και µέσο όρο findval - Υλοποίηση Για την υλοποίηση µπορείτε να υλοποιήσετε όποιο αλγόριθµο (η συνδυασµό αλγορίθµων) ϑέλετε εσείς (π.χ. flooding, tree routing) Θα τρέξετε τον αλγόριθµό σας για 6 τοπολογίες αντίστοιχες µε του floodmax της προηγούµενης άσκησης µε όνοµα (findval-topology-*-*.xml) ϑα πάρετε τιµες για την χρονική πολυπλοκότητα και πολυπλοκότητα επικοινωνίας του αλγορίθµου σας και ϑα σχολιάσετε την συµπεριφορά του.