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

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

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

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

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

ΗΥ240: Δομές Δεδομένων Εαρινό Εξάμηνο Ακαδημαϊκό Έτος Προγραμματιστική Εργασία - 2o Μέρος

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

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

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

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

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

Προγραμματιστική Εργασία Μέρος Β. Δρακωνάκης Κώστας Παπαϊωάννου Αντώνης

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

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

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

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

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

HY240 : Δομές Δεδομένων. Φροντιστήριο Προγραμματιστικής Εργασίας 2 ο και 3 ο Μέρος

Θεωρητικό Μέρος. int rec(int n) { int n1, n2; if (n <= 5) then return n; else { n1 = rec(n-5); n2 = rec(n-3); return (n1+n2); } }


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

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

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

Παρουσίαση 5 ης Άσκησης:

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

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

Προγραµµατιστική Εργασία 2 ο Μέρος

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

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

Παρουσίαση 5 ης Άσκησης:

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

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

Άσκηση 1 (ανακοινώθηκε στις 20 Μαρτίου 2017, προθεσμία παράδοσης: 24 Απριλίου 2017, 12 τα μεσάνυχτα).

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

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

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

Προγραµµατιστική Εργασία - 2 ο Μέρος

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

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

Οι βασικές λειτουργίες (ή πράξεις) που γίνονται σε μια δομή δεδομένων είναι:

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

Ενότητες 3 & 4: Δένδρα, Σύνολα & Λεξικά Ασκήσεις και Λύσεις

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

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

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

50 Ketseo,Theoni Sarif,Omar 104

Πληροφορική & Τηλεπικοινωνίες K18 - Υλοποίηση Συστημάτων Βάσεων Δεδομένων Χειμερινό Εξάμηνο M. Χατζόπουλος. Προθεσμία: 19/01/2015

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

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

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

Alternative to Balanced Trees, Comms of the ACM, 33(6), June 1990,

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

Παράλληλη Επεξεργασία

Προγραµµατιστική Εργασία 1 ο Μέρος

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

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

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

Δομές Δεδομένων. Ενότητα 6: Εφαρμογή Συνδεδεμένων Λιστών: Αλφαβητικό ευρετήριο κειμένου- Υλοποίηση ΑΤΔ Στοίβα και Ουρά με δείκτες

Εργαστήριο 5. Εαρινό Εξάμηνο

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

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

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

Συλλογές, Στοίβες και Ουρές

Οι λίστες, χάνοντας τα πλεονεκτήματα των πινάκων, λύνουν προβλήματα που παρουσιάζουν οι πίνακες

Οι δομές δεδομένων στοίβα και ουρά

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

0 The quick brown fox leaped over the lazy lazy dog 1 Quick brown foxes leaped over lazy dogs for fun

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

ΠΑΝΕΠΙΣΤΗΜΙΟ ΜΑΚΕ ΟΝΙΑΣ ΤΜΗΜΑ ΕΦΑΡΜΟΣΜΕΝΗΣ ΠΛΗΡΟΦΟΡΙΚΗΣ : ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ ΕΞΑΜΗΝΟ

My Instagram Παρουσίαση Α Μέρους Προγραμματιστικής Εργασίας

Διάλεξη 21η: Απλά Συνδεδεμένες Λίστες

Άσκηση 3 (ανακοινώθηκε στις 24 Απριλίου 2017, προθεσμία παράδοσης: 2 Ιουνίου 2017, 12 τα μεσάνυχτα).


Εισαγωγή εκτελέσιμου κώδικα σε διεργασίες

ΚΕΦΑΛΑΙΟ 8: Αφαίρεση δεδοµένων

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ. ΕΠΛ 035: οµές εδοµένων και Αλγόριθµοι για Ηλεκτρολόγους Μηχανικούς και Μηχανικούς Υπολογιστών

Το λειτουργικό σύστημα. Προγραμματισμός II 1

ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΕΣ ΤΕΧΝΙΚΕΣ

Σύνοψη Προηγούμενου. Λίστες (Lists) Συνδεδεμένες Λίστες: Εισαγωγή (1/2) Συνδεδεμένες Λίστες. Ορέστης Τελέλης

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

ΕΠΛ232 Προγραμματιστικές Τεχνικές και Εργαλεία Δυναμική Δέσμευση Μνήμης και Δομές Δεδομένων (Φροντιστήριο)

Εργασία 3 Σκελετοί Λύσεων

Santa Claus Παρουσίαση Α Μέρους Προγραμματιστικής Εργασίας

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

an:3 are:6 a:10

Εισαγωγή στους Υπολογιστές

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

ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ ΙΙ - UNIX. Συστήματα Αρχείων. Διδάσκoντες: Καθ. Κ. Λαμπρινουδάκης Δρ. Α. Γαλάνη

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

QuakeTM: Parallelizing a Complex Sequential Application Using Transactional Memory (Gajinov et al., 2009)

$./MirrorInitiator -n <MirrorServerAddress> -p <MirrorServerPort> \\ -s <ContentServerAddress1:ContentServerPort1:dirorfile1:delay1, \\

Κεφάλαιο 4: Λογισμικό Συστήματος

Πληροφορική & Τηλεπικοινωνίες K25 Ανάπτυξη Λογισμικού Εαρινό Εξάμηνο 2008 Καθηγητής Γιάννης Ιωαννίδης. Μέρος 2ο: Επίπεδο Ευρετηρίου Β+ Δένδρων

Πανεπιστήμιο Κρήτης, Τμήμα Επιστήμης Υπολογιστών ΗΥ463 Συστήματα Ανάκτησης Πληροφοριών Χειμερινό Εξάμηνο

Λειτουργικά Συστήματα Η/Υ

Προγραµµατιστική Εργασία 1 ο Μέρος

Παράλληλη Επεξεργασία

Ερωτήσεις πολλαπλής επιλογής - Κεφάλαιο Κάθε δομή μπορεί να χρησιμοποιηθεί σε οποιοδήποτε πρόβλημα ή εφαρμογή

Διάλεξη 17: Δυαδικά Δέντρα. Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ

Οντοκεντρικός Προγραμματισμός

Κεφάλαιο Αλφαριθμητικές Σειρές Χαρακτήρων (Strings) (Διάλεξη 20) 1) Strings στη C

Transcript:

HY-486 Αρχές Κατανεμημένου Υπολογισμού Εαρινό Εξάμηνο 2016-2017 Πρώτη Προγραμματιστική Εργασία Προθεσμία παράδοσης: Τρίτη 2/5 στις 23:59. 1. Γενική Περιγραφή Στην πρώτη προγραμματιστική εργασία καλείστε να υλοποιήσετε ένα διαμοιραζόμενο σύστημα διαχείρισης αρχείων (shared file management system), πάνω στο οποίο θα εκτελούνται διάφορες λειτουργίες ταυτόχρονα. Η προγραμματιστική εργασία θα πρέπει να υλοποιηθεί στην γλώσσα C με τη χρήση της βιβλιοθήκης pthreads. Προσοχή : Η εργασία είναι, εν μέρει, διαφορετική για τους προπτυχιακούς και τους μεταπτυχιακούς φοιτητές. Κάθε μέρος αναφέρεται αναλυτικά παρακάτω. 2. Υλοποίηση Ενός Διαμοιραζόμενου Συστήματος Διαχείρισης Αρχείων Στην εργασία αυτή θα πρέπει να υλοποιήσετε ένα διαμοιραζόμενο σύστημα διαχείρισης αρχείων στο οποίο ένα σύνολο από νήματα, που θα ονομάζονται client threads ή clients θα αιτούνται την εκτέλεση κάποιων λετουργιών πάνω σε εικονικά αρχεία καταγράφοντάς τις λειτουργίες αυτές σε μια διαμοιραζόμενη στοίβα. Ένα άλλο σύνολο από νήματα (updaters) θα αφαιρούν στοιχεία από την στοίβα και θα εκτελούν τις λειτουργίες που περιγράφονται σε αυτά. Οι λειτουργίες που υποστηρίζονται είναι δημιουργία (create), αναζήτηση (search), τροποποίηση (update) και διαγραφή (remove) αρχείων. Πιο συγκεκριμένα, κάθε client thread αιτείται την εκτέλεση διαφόρων λειτουργιών τις οποίες διαβάζει από ένα αρχείο testfile. Τα γεγονότα που περιέχονται στο test file περιγράφονται στην Ενότητα 4. Για κάθε λειτουργία, υπάρχει ένας κόμβος στη στοίβα που αναπαρίσταται από μια εγγραφή τύπου struct node: s truct node{ int action; int file_id;

} int new_size; // In case of file modification struct node * next; Κάθε αίτηση για εκτέλεση μιας λειτουργίας θα εισάγεται (εκτελώντας τη λειτουργία push) από ένα client thread σε μία διαμοιραζόμενη στοίβα (concurrent stack), η οποία ονομάζεται mod_stack και αναπαρίσταται στο παρακάτω σχήμα. Η διαμοιραζόμενη στοίβα θα πρέπει να υλοποιηθεί με δύο τρόπους, οι οποίοι έχουν αναλυθεί επαρκώς στις θεωρητικές διαλέξεις του μαθήματος και έχουν συζητηθεί στο φροντιστήριο: Προπτυχιακοί φοιτητές: a. Στοίβα που υλοποιείται χρησιμοποιώντας coarse-grained synchronization (δηλαδή ο συγχρονισμός κατά την πρόσβαση στην στοίβα επιτυγχάνεται χρησιμοποιώντας ένα coarse-grained lock). b. Στοίβα που υλοποιείται χρησιμοποιώντας coarse-grained synchronization (δηλαδή ο συγχρονισμός κατά την πρόσβαση στην στοίβα επιτυγχάνεται χρησιμοποιώντας ένα coarse-grained lock) στην οποία όμως έχει επιπρόσθετα υλοποιηθεί και ένας lock-based μηχανισμός elimination (όπως αυτός που σας ζητήθηκε να υλοποιήσετε στην 1η σειρά θεωρητικών ασκήσεων, Άσκηση 3). Μεταπτυχιακοί φοιτητές: a. Lock-free Stack (όπως έχει διδαχθεί στις διαλέξεις του μαθήματος) b. Lock-free Stack με lock-free μηχανισμό elimination (όπως έχει διδαχθεί στις διαλέξεις του μαθήματος)

Η διαμοιραζόμενη στοίβα αναπαρίσταται από μια εγγραφή (struct) του ακόλουθου τύπου: struct Stack{ struct node *top; pthread_mutex_t top_lock; } Συγκεκριμένα, για κάθε μία από τις προαναφερόμενες υλοποιήσεις θα πρέπει να παραδώσετε έναν ξεχωριστό φάκελο (directory), ο οποίος θα περιέχει ότι χρειάζεται η κάθε υλοποίηση για να κάνει compile και να εκτελείται. Ταυτόχρονα, τα updater threads θα εξάγουν κόμβους από την στοίβα (εκτελώντας λειτουργίες pop) και θα προσομοιώνουν την εκτέλεση της αντίστοιχης λειτουργίας πάνω σε μία διαμοιραζόμενη δομή που θα περιγράφει το εικονικό σύστημα αρχείων. Η διαμοιραζόμενη αυτή δομή θα είναι η εξής και θα πρέπει να υλοποιηθεί με τους εξής δύο τρόπους: Προπτυχιακοί φοιτητές: Διαμοιραζόμενη, ταξινομημένη σε αύξουσα διάταξη, απλά συνδεδεμένη λίστα, όπως φαίνεται στο παρακάτω σχήμα, στην οποία ο συγχρονισμός επιτυγχάνεται: a. με την τεχνική lazy synchronization b. με την τεχνική fine-grained synchronization (hand-over-hand locking) Μεταπτυχιακοί φοιτητές: Δένδρο δυαδικής αναζήτησης (binary search tree) με fine-grained synchronization (hand-over-hand locking)

Οι κόμβοι της διαμοιραζόμενης δομής δεδομένων των αρχείων θα είναι τύπου: Για τους προπτυχιακούς φοιτητές: struct filenode { int file_id; int file_size; pthread_mutex_t mutex; struct filenode * next; } Για τους μεταπτυχιακούς φοιτητές: struct filenode { int file_id; int file_size; pthread_mutex_t mutex; struct filenode * lc; struct filenode * rc; } Ακόμη, μετά την εκτέλεση κάθε λειτουργίας, είτε επιτυχημένης είτε αποτυχημένης, κάθε updater thread θα πρέπει να αυξάνει έναν διαμοιραζόμενο μετρητή total_operations. 3. Αρχείο Εισόδου, Αρχικοποίηση κι Εκτέλεση Προγράμματος Κατά την εκκίνηση του προγράμματος θα πρέπει να δίνεται ο αριθμός των client και των updater threads ως όρισμα της γραμμής εντολών. Τα ονόματα των testfiles που θα σας δοθούν θα αναφέρουν τον αριθμό των threads για την κάθε οικογένεια threads έτσι ώστε να παραμετροποιείτε την εκτέλεση κατάλληλα. Το κάθε νήμα από την οικογένεια των client threads, θα διαβάζει ένα κοινό για όλους αρχείο εισόδου (testfile), το οποίο θα περιέχει γραμμές της ακόλουθης μορφής (κάθε μια γραμμή περιγράφει ένα γεγονός): <action> <thread_id> <file_id> [<file_size>] Κ άθε thread θα παράγει αιτήματα, τα οποία θα τοποθετεί στη στοίβα (καλώντας την Push), μόνο για τις εντολές εισόδου του testfile που αναφέρονται στο thread id του, ενώ θα αγνοεί όλες τις υπόλοιπες εντολές εισόδου. Το αρχεία εισόδου (test files) θα έχουν δημιουργηθεί έτσι ώστε η εκτέλεση των νημάτων να πραγματοποιείται σε τρεις φάσεις: Τη φάση αρχικοποίησης, όπου τα client threads θα εργάζονται πάνω στην εισαγωγή

στη στοίβα λειτουργιών τύπου create και τα updater threads θα εργάζονται πάνω στην εκτέλεση αυτών. Με τον τρόπο αυτό, θα δημιουργηθούν εικονικά αρχεία στο σύστημα. Στο τέλος της φάσης αυτής, όλα τα client νήματα θα πρέπει να συγχρονίζονται μεταξύ τους με τη χρήση ενός barrier. Τη φάση αναζήτησης, όπου όλα τα client threads θα εργάζονται πάνω στην εισαγωγή στη στοίβα λειτουργιών αναζήτησης αρχείων ενώ όλα τα updater threads θα εργάζονται πάνω στην εκτέλεση αυτών. Τη φάση επεξεργασίας, όπου όλα τα client threads θα εργάζονται πάνω στην εισαγωγή στη στοίβα λειτουργιών διαγραφής και επεξεργασίας αρχείων μέχρι να ολοκληρωθεί η ανάγνωση του αρχείου εισόδου και η δημιουργία των αντίστοιχων αιτημάτων στη στοίβα. Όλα τα updater threads θα εκτελούν τις λειτουργίες αυτές και θα τερματίζουν όταν έχουν εκτελεστεί όλες οι λειτουργίες που έχουν παράγει τα client threads. Προκειμένου να είναι εφικτός ο διαχωρισμός των παραπάνω φάσεων, τα test files θα σας δοθούν δομημένα με κατάλληλο τρόπο εξαρχής. Για το barrier μεταξύ των client threads θα υπάρχει ειδικό event στο test file. Χρησιμοποιήστε έτοιμες υλοποιήσεις barrier που παρέχει η βιβλιοθήκη των pthreads. 4. Γεγονότα Τα γεγονότα του αρχείου εισόδου είναι τα ακόλουθα: I <thread_id> <file_id> <file_size> Το συγκεκριμένο γεγονός (insert) σηματοδοτεί την εισαγωγή ενός νέου αρχείου με αναγνωριστικό <file_id> και μέγεθος <size_id> στο σύστημα διαχείρισης αρχείων. Η συγκεκριμένη ενέργεια θα πρέπει να εκτελεστεί από το client thread με αναγνωριστικό <thread_id>, κάτι που ισχύει και για όλα τα επόμενα γεγονότα. Όπως αναφέρθηκε και παραπάνω, το client thread με αναγνωριστικό <client_id> θα εισάγει την αντίστοιχη εγγραφή για τη λειτουργία αυτή στη διαμοιραζόμενη στοίβα. Κάποια στιγμή στο μέλλον, κάποιο updater thread θα αναλάβει τη διεκπεραίωση της λειτουργίας αυτής, προσομοιώνοντας την εκτέλεσή της πάνω στην διαμοιραζόμενη δομή που αναπαριστά το εικονικό σύστημα αρχείων. Σε περίπτωση που το αρχείο με αναγνωριστικό <file_id> υπάρχει ήδη, τότε η εισαγωγή θα αποτυγχάνει. Στη συνέχεια το updater thread θα εκτυπώνει το ανάλογο ακόλουθο μήνυμα για την επιτυχή ή αποτυχημένη εισαγωγή του αρχείου και θα επιστρέφει το μέγεθός του σε περίπτωση επιτυχίας, ειδάλλως μια τιμή λάθους. L <thread_id> <file_id> Αυτό το γεγονός (lookup) σηματοδοτεί την αναζήτηση του αρχείου με αναγνωριστικό <file_id> κι αν υπάρχει επιστρέφει το μέγεθός του κι εκτυπώνει το ακόλουθο μήνυμα επιτυχίας. Σε περίπτωση που δεν υπάρχει, επιστρέφει μία τιμή λάθους και τυπώνει το αντίστοιχο μήνυμα αποτυχίας. H επεξεργασία του γεγονότος αυτού από τα client threads και

η εκτελέση της λειτουργίας που περιγράφεται σε αυτό από τα updater threads γίνεται με αντίστοιχο τρόπο όπως αυτός που περιγράψαμε παραπάνω για το γεγονός Ι. M <thread_id> <file_id> <new_file_size> Το γεγονός αυτό (modify) σηματοδοτεί την τροποποίηση του μεγέθους του αρχείου με αναγνωριστικό <file_id>. Αν αυτό το αρχείο υπάρχει στο εικονικό σύστημα αρχείων, το μέγεθός του τροποποιείται στη νέα τιμή <new_file_size> και τυπώνεται το ακόλουθο μήνυμα επιτυχίας μαζί με το παλιό και το νέο μέγεθος του αρχείου. Στην περίπτωση που το αρχείο δεν υπάρχει επιστρέφεται μία τιμή λάθους στο updater thread που ανέλαβε την διεκπεραίωσή της λειτουργίας και τυπώνεται το παρακάτω αντίστοιχο μήνυμα αποτυχίας. Σημειώνεται ότι η εκτέλεση μιας λειτουργίας τροποποίησης εμπεριέχει την εκτέλεση μιας αναζήτησης του αρχείου με το εν λόγω αναγνωριστικό. D <thread_id> <file_id> Το γεγονός αυτό (delete) σηματοδοτεί τη διαγραφή του αρχείου με αναγνωριστικό <file_id>. Παρόμοια με τα παραπάνω γεγονότα, αν το αρχείο βρεθεί, τότε διαγράφεται από την διαμοιραζόμενη δομή του συστήματος αρχείων κι επιστρέφεται το μέγεθός του το οποίο και τελικά τυπώνεται μαζί με το ακόλουθο μήνυμα επιτυχίας. Αν το αρχείο δεν υπάρχει, τυπώνεται το αντίστοιχο μήνυμα λάθους. Β Αυτό το γεγονός (barrier), υποδεικνύει σε κάθε νήμα που το συναντά να περιμένει και τα υπόλοιπα νήματα της οικογένειάς του πριν προχωρήσει στις επόμενες ενέργειές του. Πριν εκτελέσει την εντολή του barrier το κάθε thread θα πρέπει να τυπώνει το παρακάτω μήνυμα: Στην συνέχεια, όταν το κάθε client thread ξεκινήσει και πάλι την εκτέλεσή του, θα πρέπει να τυπώνει το ακόλουθο μήνυμα:

Στο τέλος της εκτέλεσης, δηλαδή αφού όλα τα client threads και τα updater threads έχουν τερματίσει, θα πρέπει να εκτυπώνεται η διαμοιραζόμενη δομή του εικονικού συστήματος αρχείων σε αύξουσα διάταξη ως προς το πεδίο file_id καθώς επίσης και ο διαμοιραζόμενος μετρητής total_operatios. Για τους μεταπτυχιακούς φοιτητές, οι κόμβοι του δένδρου θα πρέπει να έχουν εισαχθεί με τέτοιο τρόπο ώστε αν πραγματοποιηθεί ενδοδιατεταγμένη (in-order) διάσχιση στο δένδρο, τα αρχεία να προσπελάζονται και να τυπώνονται σε αύξουσα διάταξη ως προς το πεδίο file_id. Συγκεκριμένα, η εκτύπωση της διαμοιραζόμενης δομής θα πρέπει να έχει την ακόλουθη μορφή: 5. Παράδοση Εργασίας Για την παράδοση της εργασίας θα πρέπει να χρησιμοποιήσετε το πρόγραμμα turnin, που υπάρχει εγκατεστημένο στα μηχανήματα του τμήματος. Συγκεκριμένα, η εντολή παράδοσης είναι: turnin project1@hy486 Για να επιβεβαιώσετε ότι η υποβολή της εργασίας σας ήταν επιτυχής μπορείτε να χρησιμοποιήσετε την εντολή: verify-turnin project1@hy486 Προσοχή, τα παραδοτέα σας θα πρέπει να περιέχουν ό,τι χρειάζεται και να είναι σωστά δομημένα ώστε να κάνουν compile και να εκτελούνται στα μηχανήματα της σχολής, όπου

και θα γίνει η εξέταση της εργασίας. Ακόμη, όπως αναφέρθηκε παραπάνω, για κάθε διαφορετική υλοποίηση των διάφορων δομών δεδομένων θα πρέπει να παραδώσετε έναν ξεχωριστό φάκελο που θα περιέχει ό,τι χρειάζεται για να κάνει compile και να εκτελείται η συγκεκριμένη υλοποίηση. Η προθεσμία παράδοσης της εργασίας είναι την Τρίτη2/5 στις 23:59.