Shawn:Οδηγίες Χρήσης
Από DistrSys
Παράθεση διαδοχικών βημάτων σε μια τυπική εξομοίωση
Αφού γίνει compile με επιτυχία ο Shawn θα προκύψει ένα εκτελέσιμο αρχείο εντός του φακέλου buildfiles (~/shawn/buildfiles/, στις εικόνες που ακολουθούν ο φάκελος shawn βρίσκεται εντός του φακέλου develop, πράγμα μη απαραίτητο ). Γιά τους χρήστες των Windows θα είναι το shawn.exe και για τα Unix συστήματα θα είναι απλά shawn. Χρησιμοποιούμε οποιοδήποτε shell για να εκτελέσουμε το αρχείο (με την εντολή ./shawn) οπότε και αντικρίζουμε την παρακάτω οθόνη. Εννοείται ότι βρισκόμαστε πάντα εντός του φακέλου buildfiles.
Η παραπάνω εικόνα ενδεχομένως να διαφέρει, ανάλογα με τις εφαρμογές (applications) που έχουμε ενεργοποιήσει προηγουμένως. Είναι ανάγκη να ενεργοποιηθεί η εφαρμογή Examples (Παραδείγματα) κατά τη διάρκεια της διαμόρφωσης του shawn με τη χρήση του ccmake. Με απλούστερα λόγια να επιλεγεί σε κατάσταση ON το MODULE_APPS_EXAMPLES. Η γραμμή init_examples(sc) εμφανίζεται μετά το init_apps επιβεβαιώνοντας ότι αυτή η εφαρμογογή είναι ενεργοποιημένη. Αρχικά θα μελετηθεί το HelloWorld-processor παράδειγμα. Όπως υπονοεί και το όνομα είναι πολύ απλό. Μετά την εναρκτήρια διαδικασία (boot) κάθε κόμβος στέλνει ένα μήνυμα συγκερκιμένου είδους. Όλοι κόμβοι που το λαμβάνουν, εκτυπώνουν την ετικέτα αναγνώρισης (label) τόσο τη δικιά τους, όσο και αυτή του κόμβου αποστολέα. Εάν ένας κόμβος δεν δεχτεί κάποιο μήνυμα για πέντε γύρους, τότε θα εκτυπώσει τον αριθμό τον γνωστών γειτόνων (δλδ τους κόμβους από τους οποιούς έχει δεχτεί ένα μήνυμα) και τις ετικέτες αναγνώρισης (labels) αυτών των γειτόνων. Ακολούθως θα αυτο-απενεργοποιηθεί. Σε πρώτο χρόνο πρέπει να ρυθμιστούν οι βασικές συνθήκες του περιβάλλοντος εξομοίωσης. Αυτό θα επιτευχθεί με την εισαγωγή της ακόλουθης γραμμής στην κονσόλα.
prepare_world edge_model=simple comm_model=disk_graph range=1
Η εντολή αυτή δημιουργεί στο Shawn ένα καινούριο «κόσμο» και τον παραμετροποιεί. Έτσι ρυθμίζονται τα Edge Model, Communication Model και η ακτίνα επικοινωνίας. Η οθόνη έχει ως εξής :
Κατά την εκτέλεση ένος task ακολουθείται μία επαναλαμβανόμενη διαδικασία. Πρώτον εκτυπώνεται το : Simulation: Running task 'name_of_task' . Δεύτερον το παράγωγο (output) του task και τρίτον το εκτυπώνεται η γραμμή Simulation: Task done 'name_of_task'. Αφού δημιουργηθεί με επιτυχία το περιβάλλον εξομοίωσης πρέπει να του εμφυσήσουμε «ζωή». Για αυτό το λόγο προσθέτουμε επεξεργαστές τύπου HelloWorld. Σημειωτέων ότι δεν δημιουργείται νέο περιβάλλον εξομοίωσης, απλά προστίθενται κόμβοι στην παρεχόμενη περιοχή του περιβάλλοντος εξομοίωσης. Η εντολή είναι :
rect_world width=25 height=25 count=800 processors=helloworld
Από αυτή την εντολή έχουμε την προσθήκη 800 επεξεργαστών τύπου HelloWorld σε ένα ορθογώνιο μέρος του κόσμου (με μέγεθος 25 επί 25). Όπως φαίνεται και στην εικόνα.
Τέλος η έναρξη της εξομοίωσης γίνεται με τη παρακάτω εντολή :
simulation max_iterations=10
Στο συγκεκριμένο παράδειγμα η παράμετρος max_iterations δεν είναι απαραίτητη, δεδομένου του ότι οι επεξεργαστές απενεργοποιούν τους εαυτούς τους με τη πάροδο μερικών γύρων (εδώ οι γύροι είναι 6). Γενικά όμως αυτή η παράμετρος συνίσταται να ορίζεται για την αποφυγή αέναων γύρων εκτέλεσης. Κατά την εξομοίωση η οθόνη μοιάζει ως εξής :
Εδώ οι κόμβοι τυπώνουν αυτούς από τους οποίους έχουν δεχτεί μήνυμα. Παραδείγματος χάρην στήν πρωτή γραμμή του παραπάνω σχήματος ο κόμβος 341 δέχεται μήνυμα από τον κόμβο 728. Στη συνέχεια όλοι κόμβοι τυπώνουν το μέγεθος της γειτονίας τους. Αυτό ακολουθείται από τις ετικέτες αναγνώρισης (labels) των γειτόνων. Ο κόμβος 799 έχει 6 γείτονες με πρώτο τον τον κόμβο 141 όπως δείχνει το επόμενο σχήμα. Η εξομοίωση τελειώνει στον 6 γύρο σε αντίθεση με τους 10 γύρους που έχουμε ορισεί ως μέγιστο αριθμό επαναλήψεων. Αυτό οφείλεται στο ότι οι κόμβοι αυτο-απενεργοποιούνται. Αμέσως μετά τη γραμμή που δείχνει ότι η εξομοίωση έλαβε τέλος στον έκτο γύρο τυπώνονται κάποιες πληροφορίες. Αυτές είναι ο αριθμός των κόμβων που είναι ενεργοί, σε «ύπνωση» (sleeping) και ανενεργοί. Αν το άθροισμα των ενεργών και των εν υπνώση είναι μηδεν τότε η εξομοίωση έχει τελειώσει.
Χρήση αρχείου διαμόρφωσης (Configuration File)
Εύκολα γίνεται αντιληπτό, ότι το να γράφει κανείς αυτές τις γραμμές κάθε φορά που ξεκινά μία εξομοίωση είναι μονότονο και κουραστικό. Προς αποφυγή του παραπάνω έχουμε την δυνατότητα να δημιουργήσουμε ένα αρχείο, στο οποίο θα εισάγουμε όλες της γραμμές που θα θέλουμε να περάσουμε στον Shawn. Στη συνέχεια θα καλούμε το αρχείο αυτό.
Οπότε δημιουργούμε ένα αρχείο με το όνομα my_conf (εντός φακέλου buildfiles) το οποίο περιέχει τα παρακάτω :
# This is a comment that is not processed. Comments *must* be # written in a separate line, and are *not* allowed to be # attached to a line that contains a command for Shawn. prepare_world edge_model=simple comm_model=disk_graph range=1 rect_world width=25 height=25 count=800 processors=helloworld simulation max_iterations=10
Γενικά υπάρχουν λίγοι κανόνες που διέπουν αυτά τα αρχεία. Κάθε γραμμή που ξεκινά με δίεση (#) αποτελεί γραμμή σχολίων και δεν περνά στον parser. Ένα σχόλιο δεν επιτρέπεται να προσκολλάται σε μια έγκυρη εντολή του Shawn. Ακόμα μια παράμετρος μπορεί να γίνει κοινή (global) άμα γράψουμε key = value. Εν τοιαύτη περιπτώσει το key μπορεί να προσπελαστει από όλα τα ακολουθούμενα tasks. Τέλος μπορούμε να καλέσουμε ένα task απλά γράφοντας το όνομα του. Για παράδειγμα το simulation καλεί το task simulation στο οποίο αντιστοιχεί. Ένας τέτοιο task μπορεί επίσης να ακολουθείται από μια παράμετρο. Ενδεχομένως έχουμε ανάθεση στη παράμετρο max_iterations αφού καλεσθεί το simulation. Σε αυτή την περίπτωση η ανάθεση έχει αυστηρά τοπική ισχύ και αφορά μόνο το αντίστοιχο task. Τα επόμενα task δεν έχουν πρόσβαση σε αυτήν την παράμετρο (για να είναι global, η ανάθεση πρέπει να γραφτεί σε ξεχωριστή γραμμή όπως περιγράφεται προηγουμένως).
Για να εισαχθεί στον Shawn το αρχείο χρειάζεται η παράμετρος –f. Οπότε θα γράψουμε στην κονσόλα :
./shawn -f my_conf
Χρησιμοποίηση πολλαπλών configuration αρχείων
Αν τα configuration αρχεία αποκτούν εκτεταμένη πολυπλοκότητα δίναται να χωριστούν σε περισσοτερα αρχεία. Έτσι έχουμε ένα κύριο (master) αρχείο, το οποίο και περνάμε στον Shawn και περισσότερα δευτερεύοντα (slaves), που περιέχονται στο κύριο. Για να γίνει η συμπερίληψη αυτή των δευτερευόντων αρχείων, πρέπει να εμπεριέχει τη ακόλουθη γραμμή :
# some commands for Shawn ... include_file slave_file_to_include # more commands for Shawn ...
Το include_file βρίσκεται ακριβώς στην αρχή της κατάλληλης γραμμής του configuration αρχείου. Πολλαπλές συμπριλήψεις δεν είναι εφικτές. Δηλαδή ένα αρχείο το οποίο έχει γίνει συμπερίληψη δεν μπορεί να περιλαμβάνει κάποιο άλλο.






