Προηγµένες Τεχνικές Προγραµµατισµού Ταυτόχρονος Προγραµµατισµός Αλγόριθµος του Dekker Πρόβληµα Αµοιβαίου Αποκλεισµού για δύο διεργασίες Algorithm of Dekker ιασφάλισε τον Αµοιβαίο Αποκλεισµό ιδάσκων: Κλεάνθης Θραµπουλίδης Dekker s Algorithm Αλγόριθµος Dekker - ψευδοκώδικας is the first known correct solution to the mutual exclusion problem in concurrent programming. The solution is attributed to Dutch mathematician Th. J. Dekker by Edsger W. Dijkstra in his manuscript on cooperating sequential processes. [1] allows two threads to share a single-use resource without conflict, using only shared memory for communication. [1] E.W. Dijkstra, Cooperating Sequential Processes, manuscript, 1965. Retrieved 13. May, 2009. Source: Wikipedia () while(true) () while(true) while() if( = = 2) while( = = 2); = 2; Σχέδιο ιάλεξης Πρόβληµα Αµοιβαίου Αποκλεισµού για δύο διεργασίες Το πρόβληµα του Αµοιβαίου Αποκλεισµού 4 λύσεις στο πρόβληµα του Αµοιβαίου Αποκλεισµού Αλγόριθµος του Dekker Συµπεράσµατα Nick serves the client requests that include at least one croissant. We assume that there is no client request including both croissant and cup of coffee. Helen has been assigned the task of performing the process required to serve the client requests that include at least one cup of coffee. 1
To πρόβληµα abstract descriptions of the processes executed by Helen and Nick Since the MWO is a resource that must be acquired for exclusive use by Helen or Nick, resource management is required to ensure the system s good operation. There is a need for a specific set of actions to ensure the exclusive use of the MWO. ιασφάλισε τον Αµοιβαίο Αποκλεισµό Croissant-order processing get the order from the client select croissant warm the croissant prepare the rest order deliver the order Coffee-order processing get the order from the client warm the water make the coffee prepare the rest order deliver the order Interleaving 1η προσπάθεια επίλυσης (χρήση Arbiter) In which level of granularity? Detail description of the activity warm <something> put the thing in the microwave oven set the timer start the microwave oven wait until the timer expires put the thing out δείχνει πια διεργασία είναι ή µπορεί να µπειστον Λύση Νο 1 - σενάριο Λύση Νο 1 - ψευδοκώδικας ώσε τον C ψευδοκώδικα int ; = 1; concurrent (); (); () while(true) while( = = 2); = 2; () while(true) while( = = 1); = 1; 2
Λύση 1 - Αποδεκτή; Λύση Νο 1 - Αποδεκτή; ικανοποιεί την απαίτηση του αµοιβαίου αποκλεισµού; είναι το σύστηµα βιώσιµο δηλαδή αποκλείεται να οδηγηθεί σε αδιέξοδο; Ικανοποιεί Αµοιβαίο Αποκλεισµό Αποκλείει αδιέξοδο Είναι αδύνατο οι δύο διεργασίες να είναι καθηλωµένες στους βρόχους while αλλά. Λύση Νο 1 Αξιολόγηση Θεώρηση ρυθµών δουλειάς...οι διεργασίες δεν έχουν χαλαρή σύνδεση Σενάριο 2: abnormal termination µιας διεργασίας Λύση Νο 1 Αξιολόγηση Μειονεκτήµατα οι διεργασίες δουλεύουν µε τον ίδιο ρυθµό σενάριο Η µπαίνει 100 φορές και η 10 abnormal termination της µιας διεργασίας οδηγεί σε αδιέξοδο το σύστηµα σενάριο η περιµένει την να εκτελέσει τον και να της παραχωρήσει το δικαίωµα εισόδου» «η τερµατίζει abnormal» 3
Λύση Νο 1 Busy waiting Solution 1 (Java pseudocode) έλεγχος prepareorder( ) while(commoncub. = = this.otherempl); this.usemwo(); //critical section commoncub. = this.otherempl; this.prepareremorder(); //remaining section 2η προσπάθεια επίλυσης Λύση Νο 2 3. χρήση 4. ενηµέρωση 2. ενηµέρωση = True : δείχνει πως η βρίσκεται στον = True : δείχνει πως η βρίσκεται στον Λύση Νο 2 - ψευδοκώδικας Λύση 2 - Αποδεκτή; int,; = = False; concurrent (), () Ικανοποιεί Αµοιβαίο Αποκλεισµό? () while(true) while(); () while(true) while(); ικανοποιεί την απαίτηση του αµοιβαίου αποκλεισµού; είναι το σύστηµα βιώσιµο δηλαδή αποκλείεται να οδηγηθεί σε αδιέξοδο; 4
Λύση Νο 2 Πιθανό σενάριο Solution 2 (Java pseudocode) Α/Α Ενέργεια 1 Έναρξη προγράµµατος FALSE FALSE 2 H ελέγχει την FALSE FALSE 3 H ελέγχει την FALSE FALSE 4 H κάνει set την TRUE FALSE 5 H κάνει set την TRUE TRUE 6 H εισέρχεται στον TRUE TRUE 7 H εισέρχεται στον TRUE TRUE prepareorder( ) while(this.otherempl.cub.cs); this.cub.cs = true; this.usemwo(); //critical section this.cub.cs = false; this.prepareremorder(); //remaining section 3η προσπάθεια επίλυσης Λύση Νο 3 - ψευδοκώδικας = True : δείχνει πως η βρίσκεται στον 3. χρήση 4. ενηµέρωση 1. ενηµέρωση 2. έλεγχος int,; = = False; concurrent (), () () while(true) while(); () while(true) while(); Λύση 3 - Αποδεκτή; Λύση Νο 3 Αµοιβαίος Αποκλεισµός ικανοποιεί την απαίτηση του αµοιβαίου αποκλεισµού; είναι το σύστηµα βιώσιµο δηλαδή αποκλείεται να οδηγηθεί σε αδιέξοδο; Για να ικανοποιεί την ιδιότητα του ΑΑ αρκεί να δείξουµε ότι (η p1 είναι στην crit1) -> (η p2 δε βρίσκεται στην crit2) 1. (όταν η p1 µπήκε στην crit1) τότε (η δεν ήταν True) 2. (η δεν είναι True) -> (η p2 δεν βρίσκεται στην crit2) 3. (1)&(2) -> όταν (η p1 µπήκε στην crit1) τότε (η p2 δεν βρισκόταν στην crit2) 4. (η p1 βρίσκεται στην crit1) -> (η είναι True) 5. (η είναι True) -> (η δεν εισέρχεται στην crit2) 6. (4)&(5) (η p1 βρίσκεται στην crit1) -> (η p2 δεν εισέρχεται στην crit2) 7. όση ώρα (η p1 βρίσκεται στην crit1), (η p2 δεν θα εισέλθει ποτέ στην crit2) (3)&(7) -> (η p1 είναι στην crit1) -> (η p2 δε βρίσκεται στην crit2) 5
Λύση Νο 3 Πιθανό σενάριο 4η προσπάθεια επίλυσης Α/ Α Ενέργεια 1 Έναρξη προγράµµατος FALSE FALSE 2 H κάνει set την TRUE FALSE 5. χρήση 4. ενηµέρωση 3. Υποχώρηση 1. ενηµέρωση 3 H κάνει set την TRUE TRUE 4 H ελέγχει την TRUE TRUE 5 H ελέγχει την TRUE TRUE 6 H ελέγχει την TRUE TRUE 7 H ελέγχει την TRUE TRUE = True : δείχνει πως η βρίσκεται στον 2. έλεγχος Λύση Νο 4 - ψευδοκώδικας Λύση 4 - Αποδεκτή; int,; = = False; concurrent (), () () while(true) while() /* µην κάνεις τίποτε για λίγο */ () while(true) while() /* µην κάνεις τίποτε για λίγο */ ικανοποιεί την απαίτηση του αµοιβαίου αποκλεισµού; Ναι.ίδιααπόδειξηµετηνλύσηΝο 3. είναι το σύστηµα βιώσιµο δηλαδή αποκλείεται να οδηγηθεί σε αδιέξοδο; Ναι Σενάριο υπερβολικού ιπποτισµού Α/Α Ενέργεια 1 Έναρξη προγράµµατος FALSE FALSE 2 H κάνει set την TRUE FALSE 3 H κάνει set την TRUE TRUE 4 H ελέγχει την TRUE TRUE 5 H ελέγχει την TRUE TRUE 6 H κάνει reset την FALSE TRUE 7 H κάνει reset την FALSE FALSE 8 H κάνει set την TRUE FALSE 9 H κάνει set την TRUE TRUE Λύση Νο 4 - Μειονέκτηµα Σενάριο υπερβολικού ιπποτισµού παρότι πολύ απίθανο οδηγεί σε απόρριψη της λύσης εν µπορούµε να δώσουµε εκ των προτέρων ένα όριο στον αριθµό των επαναλήψεων το σφάλµα είναι γνωστό σαν παραγκωνισµός συνοµωσία που όµως κάποια στιγµή θα τερµατιστεί Θέλουµε να είµαστε σε θέση να εγγυηθούµε για την συµπεριφορά του συστήµατος ακόµη και στην πιο δυσµενή περίπτωση If something can go wrong, it will go wrong. 6
Fast Predictable Rather than being fast (which is a relative term anyway), the most important property of a real-time system should be predictability; that is, its functional and timing behavior should be as deterministic as necessary to satisfy system specifications. Fast computing is helpful in meeting stringent timing specifications, but fast computing alone does not guarantee predictability. J. Stankovic Αλγόριθµος Dekker = 1 η πρέπει να επιµείνει και ελέγχει περιοδικά την = True : δείχνει πως η βρίσκεται στον 7 Συνδυασµός λύσεων 1 & 4 5 4 1 3 2 6 Αλγόριθµος Dekker - ψευδοκώδικας Dekker s Algor. (Java pseudocode) int ; int,; = = False; Turn = 1; concurrent (), () () while(true) while() if( = = 2) while( = = 2); = 2; () while(true) while() if( = = 1) while( = = 1); = 1; prepareorder( ) this.cub.cs = true; while(this.otherempl.cub.cs) if(commoncub. = = otherempl) this.cub.cs = False; while(commoncub. = = otherempl); this.cub.cs = True; this.usemwo(); //critical section commoncub. = otherempl; this.cub.cs = False; this.prepareremorder(); //remaining section Αλγόριθµος Dekker - Έλεγχος () while(true) while() if( = = 2) while( = = 2); = 2; Αµοιβαίος Αποκλεισµός ίδια απόδειξη µε την Νο 3 καθώς η δεν έχει καµία επίδραση στην απόφαση για είσοδο στον κρίσιµο τοµέα. Βιωσιµότητα είναι αρκετό να δείξουµε (λόγω συµµετρίας) ότι αν η εκτελέσει την = TRUE, δηλώνοντας την πρόθεση της να µπει στον κρίσιµο τοµέα, τελικά θα µπει Αλγόριθµος Dekker Απόδειξη βιωσιµότητας Crit_sec1 Turn = 2 = False rem_sec1 F = True Cs2 = = True () while(true) while() if( = = 1) while( = = 1); = 1; T = = 2 T = False Turn = = 2 F F T 7
The Dentist problem Αλγόριθµος Dekker Προβλήµατα includes one dentist and 12 weaklings. each weakling is very busy with a lot of activities. However, there is a need from time to time to visit the dentist. The dentist may serve only one weakling at a time. provide a solution to the dentist problem Σύνθετος δυσκολία δηµιουργίας λύσης για τον ΑΑ που είναι ένα από τα απλά προβλήµατα του ΤΠ Λύση ΑΑ για n διεργασίες; έχει µόνο Ακαδηµαϊκό ενδιαφέρον εν αποφεύγεται το busy waiting ώστε µια πρόταση για αποφυγή του busy waiting Συµπεράσµατα χρειάζονται πιο ισχυρές προγραµµατιστικές δοµές από τον διαιτητή µνήµης Εισάγονται νέα πρωτογενή στοιχεία αναστέλλουν την εκτέλεση των διεργασιών που µπλοκάρονται µε µόνη επιβάρυνση µια µικρή λίστα και λίγους υπολογισµούς διαχείρισης ουράς 8