Αδιέξοδα Ανάθεση Πόρων (Deadlocks Resource Allocation)
Το Πρόβλημα του Αδιεξόδου Ένα σύνολο από διεργασίες σε αναμονή, όπου η κάθε μια κατέχει έναν αριθμό από πόρους και περιμένει να αποκτήσει και έναν άλλο πόρο που κατέχει κάποια από τις διεργασίες του συνόλου Παράδειγμα: Το σύστημα διαθέτει δύο πόρους (ο κάθε πόρος μπορεί να χρησιμοποιείται μόνο από μια διεργασία κάθε χρονική στιγμή) Οι P 1 και P 2 κατέχουν πρόσβαση καθεμία σε έναν πόρο και αναμένουν να τους δοθεί πρόσβαση και στον άλλο Αναπαράσταση με σημαφόρους A και B, με αρχική τιμή 1: P 1 P 2 wait (A); wait(b); wait (B); wait(a); Σελίδα 2
Παράδειγμα Περάσματος Γέφυρας Κίνηση μόνο προς μια κατεύθυνση Κάθε άκρη της γέφυρας μπορεί να θεωρηθεί ως ένας πόρος. Για να περάσει ένα αυτοκίνητο πρέπει να του δοθεί πρόσβαση και στους δύο πόρους Αν συμβεί αδιέξοδο, μπορεί να επιλυθεί αν οπισθοχωρήσει κάποιο αυτοκίνητο (αφήσει τους πόρους και υποχωρήσει). Μπορεί να χρειαστεί να οπισθοχωρήσουν πολλά αυτοκίνητα Η λιμοκτονία (starvation) είναι πιθανή Σελίδα 3
Αφηρημένο Μοντέλο Συστήματος Τύποι πόρων R 1, R 2,..., R m π.χ. Κύκλοι ΚΜΕ, χώρος μνήμης, συσκευές I/O Για κάθε τύπο πόρου R i υπάρχουν W i οντότητες (που για την παρακάτω μελέτη θα θεωρούνται όμοιες) Μια διεργασία αξιοποιεί κάποιον πόρο με την ακόλουθη διαδικασία: αίτηση (request) χρήση (use) αποδέσμευση (release) Σελίδα 4
Χαρακτηρισμός Αδιεξόδου (Deadlock Characterization) Ένα αδιέξοδο μπορεί να συμβεί αν ισχύουν ταυτόχρονα οι εξής συνθήκες: Αμοιβαίος αποκλεισμός (Mutual exclusion): Μόνο μια διεργασία μπορεί να χρησιμοποιεί μια οντότητα ενός πόρου κάθε χρονική στιγμή Κατοχή και αναμονή (Hold and wait): Μια διεργασία που κατέχει τουλάχιστον έναν πόρο αναμένει να αποκτήσει επιπλέον πόρους που κατέχουν άλλες διεργασίες Δεν υπάρχει διακοπή (No preemption): Ένας πόρος μπορεί να αποδεσμευτεί από τη διεργασία που τον κατέχει μόνο εθελοντικά και αφού η διεργασία έχει ολοκληρώσει την εργασία της με τον πόρο Σελίδα 5
Χαρακτηρισμός Αδιεξόδου (συνέχεια) Κυκλική αναμονή (Circular wait): Υπάρχει ένα σύνολο {P 0, P 1,, P n-1 } από διεργασίες εν αναμονή, έτσι ώστε η P 0 να περιμένει για ένα πόρο που έχει δεσμεύσει η P 1, η P 1 να περιμένει για ένα πόρο που έχει δεσμεύσει η P 2,, η P n 2 να περιμένει για ένα πόρο που έχει δεσμεύσει η P n-1, και η P n-1 να περιμένει για ένα πόρο που έχει δεσμεύσει η P 0 P 0 P 1, P 1 P 2,, P n 1 P 0 Σελίδα 6
Γράφος Ανάθεσης Πόρων (Resource- Allocation Graph) Ορίζεται γράφος με σύνολο κόμβων V και σύνολο ακμών Ε Το σύνολο κόμβων V χωρίζεται σε δύο τύπους: P = {P 1, P 2,, P n }, οι διεργασίες του συστήματος R = {R 1, R 2,, R m }, οι τύποι των πόρων του συστήματος Το σύνολο ακμών Ε χωρίζεται σε δύο τύπους: Ακμή αίτησης κατευθυνόμενη ακμή P i R j Ακμή ανάθεσης κατευθυνόμενη ακμή R j P i Σελίδα 7
Γράφος Ανάθεσης Πόρων (συνέχεια) Διεργασία Πόρος με 4 ίδιες οντότητες Η P i κάνει αίτηση για μια οντότητα του R j P i R j Η P i κατέχει μια οντότητα του πόρου R j P i R j Σελίδα 8
Παράδειγμα Γράφου Ανάθεσης Πόρων Σελίδα 9
Γράφος Ανάθεσης Πόρων με Αδιέξοδο Σελίδα 10
Γράφος Ανάθεσης Πόρων με Κύκλο αλλά όχι και Αδιέξοδο Σελίδα 11
Βασικές Παρατηρήσεις Αν ένας γράφος δεν περιέχει κύκλους δεν υπάρχει αδιέξοδο Αν ένας γράφος περιέχει κύκλο Αν υπάρχει μόνο μια οντότητα για τον κάθε πόρο αδιέξοδο Αν υπάρχουν αρκετές οντότητες ανά τύπο πόρου πιθανότητα εμφάνισης αδιεξόδου (αλλά όχι σίγουρα αδιέξοδο) Σελίδα 12
Μέθοδοι Χειρισμού Αδιεξόδου Διασφάλιση ότι το σύστημα δεν θα εισέλθει ποτέ σε κατάσταση αδιεξόδου (deadlock state) Ανοχή προς το σύστημα, ώστε να μπορεί να εισέλθει σε κατάσταση αδιεξόδου και στη συνέχεια ανάκαμψη από το αδιέξοδο Αγνόηση του προβλήματος και προσποίηση ότι τα αδιέξοδα δε συμβαίνουν ποτέ σε ένα σύστημα, προσέγγιση που χρησιμοποιείται στα περισσότερα ΛΣ, συμπεριλαμβανομένου και του UNIX Σελίδα 13
Αποτροπή Αδιεξόδου (Deadlock Prevention) Περιορισμός του τρόπου με τον οποίο μπορούν να γίνονται αιτήσεις Ελαχιστοποίηση αμοιβαίου αποκλεισμού δεν απαιτείται για τους κοινούς πόρους, πρέπει να ισχύει για τους μη κοινούς πόρους Απαγόρευση κράτησης εν αναμονή πρέπει να υπάρχει εγγύηση ότι, όταν μια διεργασία κάνει αίτηση για έναν πόρο, δεν κατέχει άλλο Απαιτεί από τη διεργασία να αιτηθεί και να της ανατεθούν όλοι οι πόροι πριν την έναρξη της εκτέλεσης, ή επιτρέπει στις διεργασίες να κάνουν αιτήσεις μόνο όταν δεν κατέχουν πόρους Χαμηλή χρησιμοποίηση πόρων, πιθανότητα λιμοκτονίας Σελίδα 14
Αποτροπή Αδιεξόδου (συνέχεια) Εισαγωγή διακοπών επιτρέπεται να αφαιρεθούν πόροι από μια διεργασία που βρίσκεται ακόμα στο στάδιο της αίτησης για πόρους Αν μια διεργασία που κατέχει κάποιους πόρους κάνει αίτηση για κάποιον πόρο ο οποίος δε μπορεί να της ανατεθεί αμέσως, τότε όλοι οι πόροι που κρατούνται αποδεσμεύονται Η διεργασία θα ξεκινήσει ξανά μόνο όταν μπορέσει να επανακτήσει όλους τους πόρους της που κατείχε αλλά και αυτούς για τους οποίους κάνει αίτηση Αποφυγή κυκλικής αναμονής επιβολή μιας συνολικής διάταξης όλων των τύπων πόρων, και αίτηση για πόρους από τις διεργασίες σε αύξουσα σειρά τύπου των πόρων που χρειάζονται Σελίδα 15
Αποφυγή Αδιεξόδου (Deadlock Avoidance) Απαιτούνται επιπρόσθετες πληροφορίες διαθέσιμες εκ των προτέρων: Το απλούστερο και πιο χρήσιμο μοντέλο απαιτεί από κάθε διεργασία να δηλώνει, εκ των προτέρων, το μέγιστο πλήθος των πόρων κάθε τύπου που θα χρειαστεί Ο αλγόριθμος αποφυγής αδιεξόδου εξετάζει δυναμικά την κατάσταση της ανάθεσης πόρων για να διασφαλίσει ότι δεν μπορεί με κανέναν τρόπο να δημιουργηθεί συνθήκη κυκλικής αναμονής Όταν μια διεργασία αιτείται ένα διαθέσιμο πόρο, το σύστημα πρέπει να αποφασίσει κατά πόσο η άμεση ανάθεση του πόρου αυτού στην διεργασία αφήνει το σύστημα σε ασφαλή κατάσταση (safe state) Σελίδα 16
Ανίχνευση Αδιεξόδου (Deadlock Detection) Επιτρέπουμε στο σύστημα να εισέλθει σε κατάσταση αδιεξόδου Απαιτείται να υπάρχει (πότε εκτελείται;) αλγόριθμος ανίχνευσης αδιεξόδου Σχήμα ανάκαμψης ΥΣ από το αδιέξοδο (recovery scheme) Σελίδα 17
Χρήση Αλγόριθμου Ανίχνευσης Πότε και πόσο συχνά πρέπει να καλείται ο αλγόριθμος ανίχνευσης αδιεξόδου, εξαρτάται από: Πόσο συχνά είναι πιθανό να συμβεί ένα αδιέξοδο; Το πλήθος των διεργασιών που θα χρειαστεί να υποχωρήσουν (rollback) ξαναρχίζοντας την εκτέλεση τους από την αρχή (μια για κάθε ξεχωριστό κύκλο) Αν ο αλγόριθμος ανίχνευσης καλείται αυθαίρετα, μπορεί να υπάρχουν πολλοί κύκλοι στο γράφο των πόρων και να μην είναι εφικτό να προσδιοριστεί ποια από τις διεργασίες είναι αυτή που προκαλεί το αδιέξοδο Σελίδα 18
Ανάκαμψη από το Αδιέξοδο: Τερματισμός Διεργασιών Παύση όλων των διαδικασιών που εμπλέκονται στο αδιέξοδο Παύση μιας διεργασίας τη φορά μέχρι να εξαλειφθεί ο κύκλος του αδιεξόδου Με ποια σειρά πρέπει να διαλέγουμε τις διεργασίες για παύση; Προτεραιότητα της διεργασίας Πόση ώρα εκτελείται η διεργασία και πόσο υπολείπεται μέχρι την ολοκλήρωσή της Πόροι που έχουν χρησιμοποιηθεί από τη διεργασία Πόροι που χρειάζεται για να ολοκληρωθεί η διεργασία Πόσες διεργασίες θα χρειαστεί να τερματιστούν; Είναι αλληλεπιδραστική ή μαζικής επεξεργασίας (batch); Σελίδα 19
Ανάκαμψη από το Αδιέξοδο: Αφαίρεση Πόρων (Resource Preemption) Επιλογή ενός «θύματος» (victim) ελαχιστοποίηση κόστους Πισωγύρισμα (Rollback) επιστροφή σε κάποια ασφαλή κατάσταση, επανεκκίνηση της διεργασίας από αυτή την κατάσταση Λιμοκτονία η ίδια διεργασία μπορεί να επιλέγεται συνέχεια ως θύμα, το πλήθος των πισωγυρισμάτων πρέπει να υπολογίζεται στο κόστος Σελίδα 20
Συνδυασμένη Προσέγγιση στο Χειρισμό Αδιεξόδων Συνδυασμός των τριών βασικών προσεγγίσεων αποτροπή αποφυγή ανίχνευση επιτρέποντας τη χρήση της βέλτιστης προσέγγισης για κάθε έναν από τους πόρους του συστήματος Διαμερισμός των πόρων σε ιεραρχικά διατεταγμένες κλάσεις και εφαρμογή της πιο κατάλληλης τεχνικής για το χειρισμό αδιεξόδων μέσα στην κάθε κλάση Σελίδα 21