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

Σχετικά έγγραφα
Ιδιοκτησία Αντικειµένου

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

Θεωρητικό Μέρος. 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); } }

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

ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΕΙΡΑΙΩΣ ΣΧΟΛΗ ΤΕΧΝΟΛΟΓΙΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΕΠΙΚΟΙΝΩΝΙΩΝ ΤΜΗΜΑ ΨΗΦΙΑΚΩΝ ΣΥΣΤΗΜΑΤΩΝ «ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ»

Εργαστήριο 4: Υλοποίηση Αφηρημένου Τύπου Δεδομένων: Ταξινομημένη Λίστα

Διάλεξη 12: Λίστες Υλοποίηση & Εφαρμογές. Διδάσκων: Παναγιώτης Ανδρέου

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

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

Δομές Δεδομένων & Αλγόριθμοι

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

Εισαγωγή στον Προγραμματισμό (με. τη C)

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

for for for for( . */

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

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

Παράλληλη Επεξεργασία Εργαστηριακή Ασκηση Εαρινού Εξαµήνου 2008

Ο βρόχος for Η εντολή for χρησιμοποιείται για τη δημιουργία επαναληπτικών βρόχων στη C

ΣΤΗΛΗ Β ΑΠΟΤΕΛΕΣΜΑ 1. float(10) α pow(2,3) β abs(-10) γ int(5.6) δ. 10 ε. 5.6 Μονάδες 8 ΣΤΗΛΗ Α ΣΥΝΑΡΤΗΣΗ

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Ακαδημαϊκό έτος ΤΕΤΡΑΔΙΟ ΕΡΓΑΣΤΗΡΙΟΥ #4

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

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

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

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

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

Διάλεξη 07: Λίστες Ι Υλοποίηση & Εφαρμογές

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

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

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

Δομές Δεδομένων. Καθηγήτρια Μαρία Σατρατζέμη. Τμήμα Εφαρμοσμένης Πληροφορικής. Δομές Δεδομένων. Τμήμα Εφαρμοσμένης Πληροφορικής

Εισαγωγή στον Προγραμματισμό

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

Διάλεξη 22: Δυαδικά Δέντρα. Διδάσκων: Παναγιώτης Ανδρέου

Παράδειγµα: Προσοµοίωση µιας ουράς FIFO Οι λειτουργίες που υποστηρίζονται από µια ουρά FIFO είναι: [enq(q,x), ack(q)] [deq(q), return(q,x)] όπου x είν

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

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

Φροντιστήριο 4 Σκελετοί Λύσεων

Διδάσκων: Παναγιώτης Ανδρέου

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

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

Να το ξαναγράψετε χρησιμοποιώντας αντί για την εντολή Για Τέλος_επανάληψης: α. την εντολή Όσο Τέλος_επανάληψης

4. Συνδεδεμένες Λίστες

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

Επιλέξτε Σωστό ή Λάθος για καθένα από τα παρακάτω:

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

ΕΞΕΤΑΖΟΜΕΝΟ ΜΑΘΗΜΑ: ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ ΣΥΝΟΛΟ ΣΕΛΙΔΩΝ: ΕΞΙ (6)

Προβλήματα, αλγόριθμοι, ψευδοκώδικας

FAIL PASS PASS οριακά

Φροντιστήριο 4 Σκελετοί Λύσεων

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

Εισαγωγή στον δομημένο προγραμματισμό

I. ΑΛΓΟΡΙΘΜΟΣ II. ΠΡΑΞΕΙΣ - ΣΥΝΑΡΤΗΣΕΙΣ III. ΕΠΑΝΑΛΗΨΕΙΣ. 1. Τα πιο συνηθισμένα σενάρια παραβίασης αλγοριθμικών κριτηρίων είναι:

Δομές Δεδομένων Ενότητα 2

ΥΠΟΠΡΟΓΡΑΜΜΑΤΑ. Κάθε υποπρόγραμμα έχει μόνο μία είσοδο και μία έξοδο. Κάθε υποπρόγραμμα πρέπει να είναι ανεξάρτητο από τα άλλα.

TO ΥΠΟΠΡΟΓΡΑΜΜΑ ΣΥΝΑΡΤΗΣΗ

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

Βιβλιοθήκες Αφηρημένοι τύποι δεδομένων. Προγραμματισμός II 1

Διάλεξη 06: Συνδεδεμένες Λίστες & Εφαρμογές Στοιβών και Ουρών

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

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

#include <stdlib.h> Α. [-128,127] Β. [-127,128] Γ. [-128,128]

Δυναμικός Κατακερματισμός. Βάσεις Δεδομένων Ευαγγελία Πιτουρά 1

Δυναμικός Κατακερματισμός. Βάσεις Δεδομένων Ευαγγελία Πιτουρά 1

Διάλεξη 2. Μεταβλητές - Δομές Δεδομένων - Eίσοδος δεδομένων - Έξοδος: Μορφοποίηση - Συναρτήσεις. Διοργάνωση : ΚΕΛ ΣΑΤΜ

Στοίβες με Δυναμική Δέσμευση Μνήμης

Οργάνωση Υπολογιστών ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ. Ασκήσεις 7: Πρόγραμμα Συνδεδεμένης Λίστας και Διαδικασιών. Μανόλης Γ.Η.

Περιεχόμενα. Πρόλογος... 21

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

Προγραμματισμός ΙI (Θ)

Φροντιστήρια Επίγνωση Προτεινόμενα Θέματα Πανελλαδικών ΑΕΠΠ 2015

ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ

Ανάλυση της Ορθότητας Προγραμμάτων (HR Κεφάλαιο 4)

Κεφάλαιο 10 Υποπρογράμματα. Καραμαούνας Πολύκαρπος

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

Ενδεικτικές Ερωτήσεις Θεωρίας

Δυναμικός Κατακερματισμός. Βάσεις Δεδομένων Ευαγγελία Πιτουρά 1

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

ΚΕΦΑΛΑΙΟ 10 ΥΠΟΠΡΟΓΡΑΜΜΑΤΑ

Ψευδοκώδικας. November 7, 2011

2 ΟΥ και 8 ΟΥ ΚΕΦΑΛΑΙΟΥ

Εργαστήριο Λειτουργικών Συστημάτων 8o εξάμηνο, Ροή Υ, ΗΜΜΥ

ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ

Μάντεψε τον Αριθμό. Έχω Ένα Μυστικό. Το Βρήκα;

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

Προγραμματισμός Η/Υ (ΤΛ2007 )

Dr. Garmpis Aristogiannis - EPDO TEI Messolonghi

Στοιχεία Αλγορίθµων και Πολυπλοκότητας

Τεχνολογία και Προγραμματισμός Υπολογιστών. Η γλώσσα προγραμματισμού C

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

ΟΙΚΟΝΟΜΙΚΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΤΑΝΕΜΗΜΕΝΑ ΣΥΣΤΗΜΑΤΑ Εαρινό Εξάμηνο

Δομές ελέγχου ροής προγράμματος

Τεχνικές Αναπαράστασης αλγορίθµων Ψευδοκώδικας Διάγραµµα Ροής Αλγοριθµικές δοµές (Ακολουθία Επιλογή Επανάληψη)

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

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

Οργάνωση αρχείων: πως είναι τοποθετηµένες οι εγγραφές ενός αρχείου όταν αποθηκεύονται στο δίσκο

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

Νήµατα. Πολύ σηµαντικό

Αναδρομή. Τι γνωρίζετε για τη δυνατότητα «κλήσης» αλγορίθμων; Τι νόημα έχει;

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

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

Transcript:

Κατανεµηµένος Υπολογισµός Εαρινό Εξάµηνο Ακ. Έτους 2008-09 ιδάσκουσα: Παναγιώτα Φατούρου Προγραµµατιστική Εργασία Προθεσµία Παράδοσης: 1 ο µέρος: 20 Μαΐου 2009 (µε e-mil στο βοηθό της εργασίας και στη διδάσκουσα) 2 ο µέρος: 4 Ιουνίου 2009. Ο κώδικας θα πρέπει να σταλεί µε e-mil στον βοηθό της εργασίας. Η προφορική εξέταση και µια µικρή παρουσίαση της βιβλιοθήκης που υλοποιήθηκε στην τάξη θα γίνει την Τρίτη, 9 Ιουνίου. Βοηθός Προγραµµατιστικής Εργασίας: Ελευθέριος Κοσµάς (ekosms@cs.uoi.gr) Κάθε µια από τις εργασίες εµπεριέχει τη µελέτη ενός συστήµατος TM, την υλοποίησή του και την πειραµατική του µελέτη. Στη βιβλιογραφία έχουν προταθεί αρκετοί αλγόριθµοι STM. Στα πλαίσια της εργασίας αυτού του µαθήµατος, εστιάζουµε σε τρεις από αυτούς. Πιο συγκεκριµένα, κάθε εργασία θα µελετήσει έναν από τους αλγορίθµους TLII [3], NBSTM [2] και DSTM [1]. [1] M. P. Herlihy, V. Luchngco, M. Moir nd W. N. Scherer III. Sofwre Trnscionl Memory for Dynmic-Sized D Srucures, In Proceedings of 22nd Annul ACM Symposium on Principles of Disribued Compuing (PODC), pges 92-101, July 2003. [2] Ελευθέριος Κοσµάς, «ΣΥΓΧΡΟΝΙΣΜΟΣ ΙΕΡΓΑΣΙΩΝ ΜΕΣΩ ΟΣΟΛΗΨΙΩΝ», Μεταπτυχιακή Εργασία Εξειδίκευσης, 2008. [3] D. Dice, O. Shlev nd N. Shvi. Trnscionl Locking II, In Proceedings of he 20 h Inernionl Symposium on Disribued Compuing (DISC), Sepember 2006. Α. Εισαγωγή και περιγραφή αποτελεσµάτων εργασίας Για την πλήρη εκµετάλλευση των πολυπύρηνων επεξεργαστών είναι απαραίτητο να απλοποιηθεί η διαδικασία παράλληλου προγραµµατισµού. Μια νέα τεχνική παράλληλου προγραµµατισµού που αναγνωρίζεται από τους ερευνητές ως η επικρατέστερη εναλλακτική µέθοδος παράλληλου προγραµµατισµού είναι η Sofwre Trnscionl Μνήµη (STM). Η STM υποστηρίζει την εκτέλεση δοσοληψιών από τις διεργασίες, οι οποίες περιέχουν λειτουργίες που ο χρήστης επιθυµεί να εκτελέσει στα διαµοιραζόµενα αντικείµενα. Η STM εγγυάται την ατοµική εκτέλεση των λειτουργιών αυτών. Σκοπός της παρούσας εργασίας είναι η µελέτη, υλοποίηση και πειραµατική ανάλυση υπαρχόντων συστηµάτων STM. Σε κάθε µια από τις εργασίες θα πρέπει να µελετηθεί ο αντίστοιχος αλγόριθµος και αρχικά να γραφεί ο κώδικάς του υπό την µορφή ψευδοκώδικα (σε όσους δεν παρουσιάζεται ήδη). Θα πρέπει επίσης να επισηµανθούν σηµεία της περιγραφής ενός αλγορίθµου τα οποία δεν είναι ξεκάθαρα, καθώς και να αναφερθούν τυχόν υποθέσεις ή τροποποιήσεις που θεωρείτε απαραίτητες. Έπειτα, θα πρέπει να υλοποιηθεί ο κάθε αλγόριθµος στη γλώσσα προγραµµατισµού C χρησιµοποιώντας επιπρόσθετα µια βιβλιοθήκη η οποία παρέχει υλοποιήσεις των ατοµικών λειτουργιών των ισχυρών καταχωρητών (τύπου CAS και LL/SC) που είναι απαραίτητοι για την υλοποίηση των STM αλγορίθµων.

Ο κάθε αλγόριθµος θα υλοποιηθεί υπό τη µορφή µιας βιβλιοθήκης συναρτήσεων και διαδικασιών, τις οποίες θα µπορεί ο χρήστης να καλεί για την επίτευξη εκτέλεσης κώδικα µε ατοµικό τρόπο κατά τη συγγραφή παράλληλου κώδικα. Η διεπαφή (inerfce) της βιβλιοθήκης αυτής παρουσιάζεται αναλυτικά στη συνέχεια. Η συγγραφή κώδικα για τη δηµιουργία της βιβλιοθήκης αυτής είναι µια από τις βασικές εργασίες που ζητείται να εκτελέσετε. Τέλος, η απόδοση των συγκεκριµένων αλγορίθµων θα πρέπει να µελετηθεί αναλυτικά. Μετρικά τα οποία θα µπορούσαν να µελετηθούν είναι το πλήθος (ή ποσοστό) των επιτυχηµένων και αποτυχηµένων δοσοληψιών, ο µέσος χρόνος ολοκλήρωσης µιας δοσοληψίας (που πιθανώς επανεκτελείται εάν αποτύχει) ως επιτυχηµένης, ο αντίστοιχος αριθµητικός µέσος, το µέσο πλήθος αποτυχιών ανά δοσοληψία πριν αυτή καταφέρει τελικά να ολοκληρωθεί, και άλλα. Β. Απαραίτητοι Ορισµοί Περιγραφή ιεπαφής Βιβλιοθήκης STM Η STM αποτελείται από ένα σύνολο κελιών µνήµης, τα οποία ονοµάζονται rnscionl µεταβλητές, ή -µεταβλητές εν συντοµία, και τα οποία επιτρέπεται να προσπελάζονται από τις διεργασίες µόνο µέσω των λειτουργιών που η STM παρέχει. Συγκεκριµένα η STM επιτρέπει στις διεργασίες να επικοινωνούν διαβάζοντας και ενηµερώνοντας -µεταβλητές µε τη βοήθεια δοσοληψιών. Αυτό σηµαίνει ότι οι διεργασίες περικλείουν τις λειτουργίες που επιθυµούν να εκτελέσουν στις -µεταβλητές σε µια δοσοληψία και ζητούν από την STM να εκτελέσει τη συγκεκριµένη δοσοληψία. Εάν το πλήθος των - µεταβλητών είναι σταθερό τότε η STM λέγεται στατική, ενώ εάν µπορεί να τροποποιηθεί (καλώντας κάποια συνάρτηση δηµιουργίας νέων -µεταβλητών) λέµε ότι χρησιµοποιείται δυναµική STM. Σηµειώνεται ότι για την εκτέλεση µιας δοσοληψίας που χρησιµοποιεί δυναµικά δεδοµένα (π.χ., που θέλει να εισάγει ένα νέο στοιχείο σε µια δυναµική δοµή δεδοµένων) απαιτείται η χρήση δυναµικής STM. Στην παρούσα εργασία θα ασχοληθούµε µόνο µε δυναµικές δοσοληψίες. Η STM µπορεί να µοντελοποιηθεί ως ένα ατοµικό αντικείµενο που παρέχει κάποιες λειτουργίες στις διεργασίες που επιθυµούν να το χρησιµοποιήσουν. Οι λειτουργίες αυτές αποτελούν τη βιβλιοθήκη συναρτήσεων και διαδικασιών που προαναφέρθηκε και τις οποίες µπορεί να καλεί ο χρήστης. Πιο συγκεκριµένα, µια µνήµη STM υποστηρίζει για κάθε διεργασία p i τις εξής λειτουργίες: i) poiner BeginTrnscion(): Η λειτουργία αυτή χρησιµοποιείται από την p i για να εκκινήσει µια νέα δοσοληψία. Η BeginTrnscion επιστρέφει ένα δείκτη σε µια κατάλληλη δοµή (διαφορετική για κάθε αλγόριθµο) που περιγράφει τη δοσοληψία που µόλις εκκινήθηκε. Ο χρήστης απαιτείται να χρησιµοποιήσει ως παράµετρο ένα τέτοιο δείκτη κατά την κλήση των υπολοίπων λειτουργιών που θα εκτελεστούν από αυτή τη δοσοληψία. ii) poiner CreeNewTmVr(poiner, d): Η λειτουργία αυτή χρησιµοποιείται από την p i που εκτελεί τη δοσοληψία που περιγράφεται από τον δείκτη (ο οποίος επιστράφηκε από την BeginTrnscion() κατά τη δηµιουργία της δοσοληψίας αυτής). Σκοπός της είναι να δηµιουργήσει µια νέα -µεταβλητή vr τα δεδοµένα της οποίας αρχικοποιούνται ώστε να είναι ίδια µε τα δεδοµένα d (τα οποία σε αυτή την εργασία είναι ενός συγκεκριµένου τύπου που θα σας δοθεί). Η χρησιµότητα της λειτουργίας αυτής εξηγείται στη συνέχεια. Η CreeNewTmVr επιστρέφει στην p i ένα δείκτη σε µια κατάλληλη δοµή που περιγράφει την vr. Ο χρήστης απαιτείται να χρησιµοποιήσει ως παράµετρο ένα τέτοιο δείκτη στην κλήση των λειτουργιών RedTmVr και WrieTmVr που διαβάζουν και τροποποιούν αντίστοιχα τηv vr. Κάθε υλοποίηση µνήµης STM αντιστοιχεί κάποιες επιπλέον πληροφορίες (med) σε κάθε - µεταβλητή η οποία περιγράφει δεδοµένα του χρήστη τα οποία πρόκειται να προσπελαστούν µέσω δοσοληψιών. Αυτές οι επιπλέον πληροφορίες αποτελούν την αναπαράσταση της -µεταβλητής στο σύστηµα STM. Μέσω της CreeNewTmVr ο χρήστης ενηµερώνει το σύστηµα STM για την

ύπαρξη κάποιων ακόµα δεδοµένων που πρόκειται να προσπελάζονται µέσω δοσοληψιών, έτσι ώστε να δηµιουργηθεί µια νέα -µεταβλητή που θα αντιστοιχισθεί στα δεδοµένα αυτά και να αρχικοποιηθεί κατάλληλα ο τρόπος αναπαράστασής της στο εκάστοτε σύστηµα STM. iii) (Boolen, d) RedTmVr(, Vr): Η λειτουργία αυτή χρησιµοποιείται από την p i που εκτελεί τη δοσοληψία (ο poiner που επιστράφηκε από την BeginTrnscion) για να διαβάσει τα δεδοµένα της -µεταβλητής Vr (ο poiner που επιστράφηκε από την CreeNewTmVr). H RedTmVr επιστρέφει στην p i δύο τιµές. Η πρώτη είναι µία τιµή Boolen η οποία είναι TRUE εάν η λειτουργία RedTmVr ολοκληρώθηκε επιτυχώς και FALSE σε αντίθετη περίπτωση. Εάν επιστραφεί TRUE, τότε στην δεύτερη µεταβλητή επιστρέφονται τα δεδοµένα d της Vr. Η RedTmVr αποτυγχάνει αν π.χ., επιχειρεί να διαβάσει µη-συνεπή δεδοµένα. iv) Boolen WrieTmVr (, Vr, d): Η λειτουργία αυτή χρησιµοποιείται από την p i που εκτελεί τη δοσοληψία για να ενηµερώσει τα δεδοµένα της -µεταβλητής Vr µε την τιµή d. H WrieTmVr επιστρέφει στην p i µία τιµή Boolen η οποία είναι TRUE εάν η λειτουργία WrieTmVr ολοκληρώθηκε επιτυχώς και FALSE σε αντίθετη περίπτωση. v) Boolen CommiTrnscion(): Με τη λειτουργία αυτή η p i δηλώνει ότι ολοκλήρωσε την εκτέλεση της δοσοληψίας και ζητά από την STM να τερµατίσει την επιτυχώς. Η λειτουργία αυτή επιστρέφει TRUE σε περίπτωση επιτυχούς τερµατισµού της ως επιτυχηµένης ή FALSE σε περίπτωση τερµατισµού της ως µη-επιτυχηµένης. vi) Void AborTrnscion(): Με τη λειτουργία αυτή η p i δηλώνει ότι επιθυµεί τον τερµατισµό της δοσοληψίας ως µη-επιτυχηµένη. Η λειτουργία αυτή εξασφαλίζει ότι η θα τερµατίσει µηεπιτυχώς και έτσι δεν επιστρέφει τίποτε. Ως παράδειγµα, στο Σχήµα 1 παρουσιάζεται η ατοµική λειτουργία αύξησης ενός µετρητή couner, µε βάση το µοντέλο STM. 1. void AomicCounerIncremen (TmVr couner) { 2. in mp; 3. TmVr newtmvr; 4. boolen bool; 5. void *; 6. while (1) { 7. = BeginTrnscion (); // δηµιουργία µιας νέας δοσοληψίας 8. (bool, mp) = RedTmVr (, couner); // ανάγνωση της -µεταβλητής couner 9. mp ++; // mp = τιµή της -µετ/τής couner 10. bool = WrieTmVr (, couner, mp); // εγγραφή στην -µετ/τής couner // couner = mp 11. if (bool == flse) { // αν η αυξηµένη τιµή είναι απαρχαιωµένη 12. AborTrnscion(); 13. coninue; 14. } 15. if (CommiTrnscion() == TRUE) // η WrieTmVr αποτυγχάνει // επιστρέφοντας FALSE 16. brek; // η δοσοληψία τερµατίζει επιτυχώς 17. } 18. }

Σχήµα 1: Αύξηση µετρητή µε χρήση του βασικού µοντέλου STM. Στο παραπάνω απλό παράδειγµα, η -µεταβλητή είναι ένας ακέραιος και η µνήµη STM είναι στατική. Στην εργασία που θα υλοποιήσετε, η µνήµη STM είναι δυναµική (όπως προαναφέρθηκε). Ωστόσο, υποθέτουµε ότι κάθε διεργασία µπορεί να αποθηκεύει ως δεδοµένα των -µεταβλητών µόνο δείκτες σε αντικείµενα της δοµής τύπου Objec που περιγράφεται παρακάτω και αποτελεί τον κόµβο µιας λίστας ή ουράς: ypedef void * TmVr; sruc Objec { in x; TmVr nex; } Γ. Απαραίτητες Συµβάσεις Στην παρούσα παράγραφο περιγράφεται ο τρόπος µε τον οποίο ο χρήστης χρησιµοποιεί το µοντέλο STM. Μια δοσοληψία εκκινείται µε την εκτέλεση της λειτουργίας BeginTrnscion, η οποία επιστρέφει ένα δείκτη σε µια κατάλληλη δοµή που περιγράφει τη δοσοληψία που µόλις εκκινήθηκε. Ο χρήστης χρησιµοποιεί το δείκτη αυτό σε όλες τις λειτουργίες που θέλει να εκτελέσει µέσω τις συγκεκριµένης δοσοληψίας. Από το σηµείο αυτό και έπειτα η δοσοληψία που εκτελεί ο χρήστης είναι εκκρεµής έως ότου εκτελεστεί από το χρήστη είτε η λειτουργία CommiTrnscion (για την ολοκλήρωση της δοσοληψίας ως επιτυχηµένης) είτε η λειτουργία AborTrnscion (για την ολοκλήρωση της δοσοληψίας ως αποτυχηµένης). Σηµειώνεται ότι ο χρήστης µπορεί να έχει το πολύ µία εκκρεµή δοσοληψία κάθε χρονική στιγµή, δηλαδή κάθε κλήση της λειτουργίας BeginTrnscion πρέπει να ακολουθείται από µια κλήση µιας εκ των λειτουργιών CommiTrnscion ή AborTrnscion, χωρίς να παρεµβάλλεται στο ενδιάµεσο κάποια άλλη κλήση της BeginTrnscion. Ο χρήστης προσπελάζει τις -µεταβλητές που επιθυµεί ή δηµιουργεί κάποια νέα -µεταβλητή µέσω µιας δοσοληψίας µόνο ενόσω η δοσοληψία αυτή είναι εκκρεµής, και µέσω των αντίστοιχων λειτουργιών RedTmVr, WrieTmVr και CreeNewTmVr. Ο χρήστης είναι ελεύθερος να καλεί τις λειτουργίες προσπέλασης για την ίδια -µεταβλητή όσες φορές επιθυµεί. Συγκεκριµένα, την πρώτη φορά που διαβάζει τα δεδοµένα µιας -µεταβλητής τα προσπελάζει µε την RedTmVr. Κάθε φορά που ο χρήστης ενηµερώνει κάποια -µεταβλητή εκτελεί τη λειτουργία WrieTmVr. Όταν ο χρήστης επιθυµεί να τελειώσει την εκτέλεση µιας δοσοληψίας καλεί είτε τη λειτουργία CommiTrnscion για να επιχειρήσει να τερµατίσει τη δοσοληψία ως επιτυχηµένη ή τη λειτουργία AborTrnscion για να την τερµατίσει ως µη-επιτυχηµένη. Εάν οποιαδήποτε λειτουργία προσπέλασης επιστρέψει στο χρήστη για την Boolen µεταβλητή την τιµή FALSE, δηλώνοντας ότι η συγκεκριµένη λειτουργία απέτυχε, ο χρήστης καλεί άµεσα µία εκ των λειτουργιών CommiTrnscion ή AborTrnscion ώστε να τερµατίσει τη δοσοληψία που εκτελεί. Σηµειώνεται ότι στην περίπτωση αυτή είναι βέβαιο, ανεξάρτητα µε τη λειτουργία τερµατισµού που καλείται, ότι η δοσοληψία θα τερµατίσει ως µη-επιτυχηµένη. Ο χρήστης χρησιµοποιεί τη λειτουργία CreeNewTmVr, κάθε φορά που επιθυµεί να δηµιουργήσει και να αρχικοποιήσει µια νέα -µεταβλητή κατά την εκτέλεση µιας δοσοληψίας. Για παράδειγµα, αν ο χρήστης επιθυµεί να υλοποιήσει µια συνδεδεµένη λίστα βάσει κάποιου ατοµικού αντικειµένου STM πρέπει να αντιστοιχίσει µια -µεταβλητή σε κάθε κόµβο της λίστας, η οποία αποθηκεύει ένα δείκτη στον κόµβο αυτό. Στην περίπτωση αυτή, εάν ο χρήστης θέλει να διατηρήσει έναν δείκτη p από κάποιο κόµβο x προς κάποιο κόµβο y της λίστας, ο p δεν επιτρέπεται να δείχνει απευθείας στο y, αλλά πρέπει

να δείχνει στην -µεταβλητή που περιγράφει τον κόµβο y της λίστας. Αυτό σηµαίνει ότι το µοντέλο STM δεν επιτρέπει στον χρήστη να διατηρεί δείκτες µεταξύ των ίδιων των διαµοιραζόµενων δεδοµένων, αλλά ένα διαµοιραζόµενο δεδοµένο x µπορεί να περιέχει δείκτη σε ένα διαµοιραζόµενο δεδοµένο y µόνο εάν ο δείκτης δείχνει στην αντίστοιχη -µεταβλητή που περιγράφει το y. Για το λόγο αυτό, ο δείκτης nex του sruc Objec είναι τύπου void. Παράδειγµα Έστω η λίστα του Σχήµατος 2. lis sr 0x128 0x256 0x384 3 7 2 Σχήµα 2: Συνδεδεµένη λίστα. Στο Σχήµα 3 παρουσιάζεται η µορφή της ίδια λίστας σε κάποιο σύστηµα µνήµης STM, στο οποίο η αναπαράσταση µιας -µεταβλητής συµβολίζεται αφαιρετικά µε έναν κόµβο med. Παρατηρούµε πως η -µεταβλητή του κόµβου 3 της λίστας είναι ένας δείκτης ο οποίος έχει την τιµή 0x248, δηλαδή την τιµή της διεύθυνσης στην οποία ξεκινά ο κόµβος med. lis sr 0x2048 0x4096 0x8192 M e d M e d M e d 0x128 0x256 0x384 3 7 2 Σχήµα 3: Συνδεδεµένη λίστα σε µια µνήµη STM. Στο Σχήµα 4 δίνεται ως παράδειγµα ο κώδικας της λειτουργίας εισαγωγής ενός κόµβου στη λίστα του Σχήµατος 3. Υποθέτουµε πως κάθε κόµβος εισάγεται στο τέλος της λίστας. Επίσης υποθέτουµε πώς υπάρχει ένας κόµβος φρουρός στην αρχή της λίστας. 1. void Inser (in num, TmVr lissr) { 2. Objec *mpnode=null, *newnode; 3. TmVr mpnodetmvr, newtmvr; 4. boolen bool; 5. void *; 6. while (1) { 7. = BeginTrnscion (); // δηµιουργία µιας νέας δοσοληψίας 8. mpnodetmvr = lissr; // Εύρεση του τελευταίου στοιχείου της // λίστας. Μετά το do..while στην

// mpnode θα βρίσκονται τα δεδοµένα του // στοιχείου αυτού και στην mpnodetmvr // η -µεταβλητή που το περιγράφει. 9. do { 10. if (mpnode!= null) 11. mpnodetmvr = mpnode->nex; 12. (bool, mpnode) = RedTmVr (, mpnodetmvr); 13. if (bool == flse) brek; 14. } while (mpnode->nex == null); 15. if (bool == flse) 16. AborTrnscion(); 17. else { 18. newnode = (Node *)mlloc (sizeof(node)); // Αρχικοποίηση δεδοµένων // νέου στοιχείου 19. newnode->num = num; 20. newnode->nex = null; 21. newtmvr = CreeNewTmVr (, newnode); // Αρχικοποίηση µιας - // µεταβλητής που θα // περιγράφει το νέο // στοιχείο 22. mpnode->nex = newtmvr; 23. bool = WrieTmVr (, mpnodetmvr, mpnode);// Ενηµέρωση τελευταίου // κόµβου της λίστας 24. if (bool == flse) 25. coninue; 26. if (CommiTrnscion() == TRUE) 27. brek; 28. } // else 29. } // while 30. } // Inser Σχήµα 4: Λειτουργία εισαγωγής ενός κόµβου στη λίστα στου Σχήµατος 3.. Παραδοτέα Στο πρώτο µέρος της εργασίας, σας ζητείται µε βάση το µοντέλο STM και το παράδειγµα της παραγράφου Γ να υλοποιήσετε τις λειτουργίες των δοµών δεδοµένων που θα χρησιµοποιήσετε στα πειράµατά σας, π.χ. λίστα, ταξινοµηµένη λίστα, ουρά, κτλ. Επίσης, στο στάδιο αυτό πρέπει να παρουσιάσετε ενδεικτικό κώδικα των πειραµάτων που πρόκειται να εκτελεστούν. Τέλος στο στάδιο αυτό ζητείται να παραδώσετε την πρώτη έκδοση της αναφοράς της εργασίας όπου θα περιγράφετε τα πειράµατα που πρόκειται να εκτελέσετε, τον αλγόριθµο που έχετε να υλοποιήσετε και τον σχεδιασµό της βιβλιοθήκης που θα προγραµµατίσετε βάσει του αλγορίθµου που έχετε αναλάβει να µελετήσετε. Στο δεύτερο στάδιο της εργασίας θα παραδώσετε µια βιβλιοθήκη συναρτήσεων και διαδικασιών που θα υλοποιούν έναν από τους αλγορίθµους STM που αναφέρθηκαν στην εισαγωγή.