Εντοπισμός τερματισμού Κατανεμημένα Συστήματα 1 lalis@inf.uth.gr
Μοντέλο συστήματος Μια ομάδα διεργασιών εκτελεί έναν υπολογισμό Κατάσταση διεργασίας: ενεργητική ή παθητική (ανάλογα με το αν εκτελεί μέρος του υπολογισμού) Μια ενεργητική διεργασία μπορεί ανά πάσα στιγμή να γίνει παθητική (να ολοκληρώσει τον υπολογισμό της) να στείλει μήνυμα σε οποιαδήποτε άλλη διεργασία (για να της αναθέσει ένα τμήμα του υπολογισμού) Μια παθητική διεργασία μπορεί να ξαναγίνει ενεργητική μόνο αν λάβει ένα μήνυμα (ανάθεση τμήματος υπολογισμού) Τερματισμός υπάρχει αν: (1) όλες οι διεργασίες βρίσκονται σε παθητική κατάσταση, και (2) δεν υπάρχει μήνυμα καθοδόν προς κάποια διεργασία Κατανεμημένα Συστήματα 2 lalis@inf.uth.gr
P είναι ενεργή P P στέλνει μήνυμα m P P είναι παθητική P P λαμβάνει μήνυμα και ενεργοποιείται m P Κατανεμημένα Συστήματα 3 lalis@inf.uth.gr
Αλγόριθμος σκυτάλης σε δακτύλιο (Dijkstra, Feijen, Gasteren) Οι διεργασίες έχουν λευκό ή μαύρο χρώμα αρχικά λευκό, αν μια διεργασία στείλει μήνυμα γίνεται μαύρη Όταν μια διακεκριμένη διεργασία Pc γίνει παθητική, γίνεται άσπρη και στέλνει μια άσπρη σκυτάλη κατά μήκος του δακτυλίου Κάθε διεργασία προωθεί την σκυτάλη κατά μήκος του δακτυλίου, όταν γίνει (ή αν είναι ήδη) παθητική αν η διεργασία είναι μαύρη, η σκυτάλη γίνεται μαύρη μετά την προώθηση της σκυτάλης, η διεργασία γίνεται λευκή Όταν η σκυτάλη επιστρέψει στην Pc, εντοπίζεται τερματισμός εφόσον (1) η Pc είναι παθητική, και (2) η Pc είναι λευκή, και (3) η σκυτάλη είναι λευκή Κατανεμημένα Συστήματα 4 lalis@inf.uth.gr
Init: clr = W; term = false; = true; app-sendmsg(p,msg): clr = B; send(p,msg); app-done_processing(): = false; On deliver(msg): = true; app-deliver(msg); checktermination /* Pc */: while () {} send(nxtproc(),<check,w>); clr = W; On deliver(<check,tclr>): if (myid==pc) { term = (!) && (clr==w) && (tclr==w); } else { while () {} if (clr==b) { tclr=b; } send(nxtproc(),<check,tclr>); clr = W; } Κατανεμημένα Συστήματα 5 lalis@inf.uth.gr
Ορθότητα συνθήκης τερματισμού 1. Η Pc είναι παθητική διαφορετικά, ο υπολογισμός σίγουρα δεν έχει τερματιστεί 2. Η Pc είναι λευκή και η σκυτάλη είναι λευκή διαφορετικά, τουλάχιστον μια διεργασία έστειλε τουλάχιστον ένα μήνυμα που πιθανώς να ενεργοποίησε μια διεργασία που ήταν παθητική (από την οποία πέρασε η σκυτάλη) Οι συνθήκες (1)+(2) εγγυώνται ότι η σκυτάλη πέρασε από παθητικές διεργασίες καμία διεργασία δεν έστειλε μήνυμα κατά τη διάρκεια μιας ολόκληρης κυκλικής διαδρομής της σκυτάλης Ο τερματισμός εντοπίζεται ένα κύκλο αφού δημιουργηθεί το τελευταίο μήνυμα Κατανεμημένα Συστήματα 6 lalis@inf.uth.gr
Κατανεμημένα Συστήματα 7 lalis@inf.uth.gr
Κατανεμημένα Συστήματα 8 lalis@inf.uth.gr
Κατανεμημένα Συστήματα 9 lalis@inf.uth.gr
Κατανεμημένα Συστήματα 1 lalis@inf.uth.gr
Κατανεμημένα Συστήματα 11 lalis@inf.uth.gr
m Κατανεμημένα Συστήματα 12 lalis@inf.uth.gr
Κατανεμημένα Συστήματα 13 lalis@inf.uth.gr
Κατανεμημένα Συστήματα 14 lalis@inf.uth.gr
Κατανεμημένα Συστήματα 15 lalis@inf.uth.gr
δεν εντοπίζεται τερματισμός Κατανεμημένα Συστήματα 16 lalis@inf.uth.gr
m Κατανεμημένα Συστήματα 17 lalis@inf.uth.gr
Κατανεμημένα Συστήματα 18 lalis@inf.uth.gr
Κατανεμημένα Συστήματα 19 lalis@inf.uth.gr
Κατανεμημένα Συστήματα 2 lalis@inf.uth.gr
Κατανεμημένα Συστήματα 21 lalis@inf.uth.gr
Κατανεμημένα Συστήματα 22 lalis@inf.uth.gr
Κατανεμημένα Συστήματα 23 lalis@inf.uth.gr
Κατανεμημένα Συστήματα 24 lalis@inf.uth.gr
δεν εντοπίζεται τερματισμός Κατανεμημένα Συστήματα 25 lalis@inf.uth.gr
Κατανεμημένα Συστήματα 26 lalis@inf.uth.gr
Κατανεμημένα Συστήματα 27 lalis@inf.uth.gr
Κατανεμημένα Συστήματα 28 lalis@inf.uth.gr
Κατανεμημένα Συστήματα 29 lalis@inf.uth.gr
εντοπίζεται τερματισμός Κατανεμημένα Συστήματα 3 lalis@inf.uth.gr
Πρόβλημα ορθότητας Ο αλγόριθμος είναι σωστός μόνο αν η αποστολή μηνυμάτων είναι σύγχρονη (ο αποστολέας μπλοκάρει μέχρι το μήνυμα να φτάσει στον παραλήπτη) Μια μαύρη διεργασία μπορεί να γίνει άσπρη (και σε δεύτερη φάση να προωθήσει μια άσπρη σκυτάλη) χωρίς το μήνυμα που έστειλε προηγουμένως να έχει φτάσει στον παραλήπτη του Θα «εντοπιστεί» τερματισμός λανθασμένα το μήνυμα θα φτάσει τελικά στον παραλήπτη τον οποίο και θα ενεργοποιήσει Το πρόβλημα υφίσταται και με FIFO μεταξύ των διεργασιών γιατί; Κατανεμημένα Συστήματα 31 lalis@inf.uth.gr
Κατανεμημένα Συστήματα 32 lalis@inf.uth.gr
m Κατανεμημένα Συστήματα 33 lalis@inf.uth.gr
m Κατανεμημένα Συστήματα 34 lalis@inf.uth.gr
m Κατανεμημένα Συστήματα 35 lalis@inf.uth.gr
m Κατανεμημένα Συστήματα 36 lalis@inf.uth.gr
m Κατανεμημένα Συστήματα 37 lalis@inf.uth.gr
m Κατανεμημένα Συστήματα 38 lalis@inf.uth.gr
δεν εντοπίζεται τερματισμός m Κατανεμημένα Συστήματα 39 lalis@inf.uth.gr
m Κατανεμημένα Συστήματα 4 lalis@inf.uth.gr
m Κατανεμημένα Συστήματα 41 lalis@inf.uth.gr
m Κατανεμημένα Συστήματα 42 lalis@inf.uth.gr
m Κατανεμημένα Συστήματα 43 lalis@inf.uth.gr
εντοπίζεται τερματισμός m Κατανεμημένα Συστήματα 44 lalis@inf.uth.gr
m Κατανεμημένα Συστήματα 45 lalis@inf.uth.gr
Λύση για ασύγχρονη μετάδοση μηνυμάτων Πρέπει να εντοπίζεται το γεγονός ότι υπάρχουν μηνύματα καθ οδόν, που δεν έχουν ληφθεί υπ όψη στο χρωματισμό των διεργασιών/σκυτάλης Χρειάζεται πληροφορία για το ισοζύγιο μηνυμάτων Κάθε διεργασία διατηρεί ένα τοπικό μετρητή αυξάνεται κατά 1 όταν η διεργασία στείλει ένα μήνυμα μειώνεται κατά 1 όταν η διεργασία λάβει ένα μήνυμα Η σκυτάλη μεταφέρει το άθροισμα των μετρητών Όταν η Pc λαμβάνει τη σκυτάλη, εκτός από τους προηγούμενους ελέγχους, ελέγχει και το άθροισμα για να υπάρχει τερματισμός, πρέπει να είναι μηδενικό Κατανεμημένα Συστήματα 46 lalis@inf.uth.gr
Init: clr = W; term = false; n = ; = true; app-sendmsg(p,msg): clr = B; n++; send(p,msg); app-done_processing(): = false; On deliver(msg): n--; = true; app-deliver(msg); checktermination /* Pc */: while () {} send(nxtproc(),<check,w,>); clr = W; On deliver(<check,tclr,tn>): if (myid==pc) { term = (!) && (clr==w) && (tclr==w) && (tn+n==); } else { while () {} if (clr==b) { tclr = B; } send(nxtproc(),<check,tclr,tn+n>); clr = W; } Κατανεμημένα Συστήματα 47 lalis@inf.uth.gr
Κατανεμημένα Συστήματα 48 lalis@inf.uth.gr
m 1 Κατανεμημένα Συστήματα 49 lalis@inf.uth.gr
m 1 Κατανεμημένα Συστήματα 5 lalis@inf.uth.gr
m 1 Κατανεμημένα Συστήματα 51 lalis@inf.uth.gr
m 1 1 Κατανεμημένα Συστήματα 52 lalis@inf.uth.gr
m 1 1 Κατανεμημένα Συστήματα 53 lalis@inf.uth.gr
1 m 1 Κατανεμημένα Συστήματα 54 lalis@inf.uth.gr
1 δεν εντοπίζεται τερματισμός m 1 Κατανεμημένα Συστήματα 55 lalis@inf.uth.gr
m 1 Κατανεμημένα Συστήματα 56 lalis@inf.uth.gr
m 1 1 Κατανεμημένα Συστήματα 57 lalis@inf.uth.gr
m 1 1 Κατανεμημένα Συστήματα 58 lalis@inf.uth.gr
1 m 1 Κατανεμημένα Συστήματα 59 lalis@inf.uth.gr
1 δεν εντοπίζεται τερματισμός m 1 Κατανεμημένα Συστήματα 6 lalis@inf.uth.gr
-1 m 1 Κατανεμημένα Συστήματα 61 lalis@inf.uth.gr
-1 1 Κατανεμημένα Συστήματα 62 lalis@inf.uth.gr
-1 1 Κατανεμημένα Συστήματα 63 lalis@inf.uth.gr
-1 1 Κατανεμημένα Συστήματα 64 lalis@inf.uth.gr
-1 1 1 Κατανεμημένα Συστήματα 65 lalis@inf.uth.gr
-1 1 1 Κατανεμημένα Συστήματα 66 lalis@inf.uth.gr
-1 1 Κατανεμημένα Συστήματα 67 lalis@inf.uth.gr
εντοπίζεται τερματισμός -1 1 Κατανεμημένα Συστήματα 68 lalis@inf.uth.gr
Χρωματισμός διεργασιών και σκυτάλης Το ισοζύγιο μηνυμάτων μπορεί να είναι, χωρίς να είναι όλες οι διεργασίες παθητικές μια διεργασία από την οποία ήδη πέρασε η σκυτάλη μπορεί να ενεργοποιηθεί από μια διεργασία από την οποία δεν πέρασε ακόμα η σκυτάλη στη συνέχεια, η διεργασία που ενεργοποιήθηκε μπορεί να στείλει ένα ή περισσότερα μηνύματα που να ισοσκελίζουν το ισοζύγιο μηνυμάτων τόσο για τις επιμέρους διεργασίες από τις οποίες θα περάσει η σκυτάλη όσο και σε καθολικό επίπεδο ο μετρητής της σκυτάλης θα είναι Εξακολουθεί να πρέπει να καταγράφεται (μέσω του χρωματισμού) η πιθανότητα να ενεργοποιηθούν παθητικές διεργασίες από τις οποίες έχει ήδη περάσει η σκυτάλη Κατανεμημένα Συστήματα 69 lalis@inf.uth.gr
Κατανεμημένα Συστήματα 7 lalis@inf.uth.gr
Κατανεμημένα Συστήματα 71 lalis@inf.uth.gr
Κατανεμημένα Συστήματα 72 lalis@inf.uth.gr
1 m Κατανεμημένα Συστήματα 73 lalis@inf.uth.gr
1-1 Κατανεμημένα Συστήματα 74 lalis@inf.uth.gr
1 m Κατανεμημένα Συστήματα 75 lalis@inf.uth.gr
Κατανεμημένα Συστήματα 76 lalis@inf.uth.gr
Κατανεμημένα Συστήματα 77 lalis@inf.uth.gr
Κατανεμημένα Συστήματα 78 lalis@inf.uth.gr
Κατανεμημένα Συστήματα 79 lalis@inf.uth.gr
δεν εντοπίζεται τερματισμός Κατανεμημένα Συστήματα 8 lalis@inf.uth.gr
Αλγόριθμος ανεστραμμένου δέντρου (Dijkstra & Scholten) Ο υπολογισμός αρχίζει από μια διεργασία Pc που είναι ενεργή και έχει ως γονιό τον εαυτό της Οι υπόλοιπες διεργασίες είναι παθητικές και ορφανές Όταν μια ορφανή διεργασία λάβει ένα μήνυμα, καταγράφει τον αποστολέα ως γονιό της τον οποίο ειδοποιεί ώστε να την καταγράψει ως παιδί του Όταν μια διεργασία γίνει παθητική και δεν έχει παιδιά, ειδοποιεί τον γονιό της (την διαγράφει από παιδί του), και μένει ορφανή Όταν η διεργασία Pc γίνει παθητική και δεν έχει παιδιά, τότε έχει τερματιστεί ο κατανεμημένος υπολογισμός Κατανεμημένα Συστήματα 81 lalis@inf.uth.gr
Init: children = ; term = false; = (myid==pc); if (myid==pc) { parent == myid) { parent = NULL; } app-sendmsg(p,msg): children++; send(p,<msg,myaddr,msg>); app-done_processing(): = false; On deliver(<msg,p,msg>): if (parent == NULL) { parent = p; } else { send(p,<dec_child_count>); } = true; app-deliver(msg); On receive(<dec_child_count>): children = children - 1; checktermination: if (!) && (children==)) { if (myid == Pc) { term = true; } else { send(parent,<dec_child_count>); parent = NULL; } } Κατανεμημένα Συστήματα 82 lalis@inf.uth.gr
c= P5 c= "link" to parent c= c= c= Κατανεμημένα Συστήματα 83 lalis@inf.uth.gr
c= c= P5 m c= c= c= Κατανεμημένα Συστήματα 84 lalis@inf.uth.gr
c=1 c= P5 c= c= c= Κατανεμημένα Συστήματα 85 lalis@inf.uth.gr
c=1 c= P5 c= c= m c= Κατανεμημένα Συστήματα 86 lalis@inf.uth.gr
c=1 c= P5 c= c= c=1 Κατανεμημένα Συστήματα 87 lalis@inf.uth.gr
c=1 c= P5 m c= c= c=1 Κατανεμημένα Συστήματα 88 lalis@inf.uth.gr
c=1 c= P5 c= c= c=1 Κατανεμημένα Συστήματα 89 lalis@inf.uth.gr
c=1 c= P5 c= c= c=1 Κατανεμημένα Συστήματα 9 lalis@inf.uth.gr
c=1 c= P5 c= c= c=1 Κατανεμημένα Συστήματα 91 lalis@inf.uth.gr
c=1 c= P5 c= c= m c=1 Κατανεμημένα Συστήματα 92 lalis@inf.uth.gr
c=1 c= P5 c= c= c=1 Κατανεμημένα Συστήματα 93 lalis@inf.uth.gr
c=1 c= P5 m c= c= c=1 Κατανεμημένα Συστήματα 94 lalis@inf.uth.gr
c=1 c= P5 c= c= c=2 Κατανεμημένα Συστήματα 95 lalis@inf.uth.gr
c=1 c= P5 c= c= c=2 Κατανεμημένα Συστήματα 96 lalis@inf.uth.gr
c=1 c= P5 c= c= c=1 Κατανεμημένα Συστήματα 97 lalis@inf.uth.gr
c=1 c= P5 m c= c= c=1 Κατανεμημένα Συστήματα 98 lalis@inf.uth.gr
c=1 c= P5 c= c=1 c=1 Κατανεμημένα Συστήματα 99 lalis@inf.uth.gr
c=1 c= P5 c= c=1 c=1 Κατανεμημένα Συστήματα 1 lalis@inf.uth.gr
c=1 c= P5 c= c=1 c=1 Κατανεμημένα Συστήματα 11 lalis@inf.uth.gr
c=1 c= P5 c= c=1 c=1 Κατανεμημένα Συστήματα 12 lalis@inf.uth.gr
c=1 c= P5 c= c= c=1 Κατανεμημένα Συστήματα 13 lalis@inf.uth.gr
c=1 c= P5 c= c= c= Κατανεμημένα Συστήματα 14 lalis@inf.uth.gr
c= εντοπίζεται τερματισμός c= P5 c= c= c= Κατανεμημένα Συστήματα 15 lalis@inf.uth.gr
Παρατηρήσεις Μια διεργασία γίνεται ορφανή όταν γίνει παθητική και δεν έχει δικά της παιδιά Η πληροφορία «πατρότητας» αλλάζει μόνο όταν η διεργασία που λαμβάνει ένα μήνυμα είναι ορφανή Η πληροφορία τερματισμού "επιστρέφει προς τα πίσω" κατά μήκος των ακμών του κατανεμημένου δέντρου Χρειάζεται προσοχή στην διαχείριση του μετρητή των παιδιών κάθε διεργασίας, έτσι ώστε να μην υπάρχει περίπτωση ασυνέπειας λόγω ασύγχρονης επικοινωνίας Κατανεμημένα Συστήματα 16 lalis@inf.uth.gr
Αλγόριθμος ανάκτησης πίστωσης (Mattern) Υποθέτουμε ότι ο υπολογισμός αρχίζει από μια (ενεργή) διεργασία, με συνολική πίστωση Ν Όταν μια (ενεργή) διεργασία στείλει μήνυμα σε μια άλλη διεργασία (που είναι παθητική), δίνει στην άλλη διεργασία ένας μέρος της πίστωσης της (π.χ. Ν/2) Όταν μια διεργασία γίνει παθητική, επιστρέφει την πίστωση της σε μια διακεκριμένη διεργασία Pc Όταν το άθροισμα των πιστώσεων στην Pc γίνει ίσο με την αρχική πίστωση, υπάρχει τερματισμός Η ορθότητα είναι προφανής Κατανεμημένα Συστήματα 17 lalis@inf.uth.gr