6. Α ΙΕΞΟ Α Στέφανος Γκρίτζαλης Αναπληρωτής Καθηγητής Κωνσταντίνος Καραφασούλης ιδάσκων (Π 407) 6.1 ΠΟΡΟΙ (1/2) Υπάρχουν δύο τύποι πόρων σε υπολογιστικά συστήµατα: προεκχωρήσιµοι πόροι (preemptable resources): είναι οι πόροι που µπορούν να αποδεσµευτούν από τη διεργασία που τους κατέχει, χωρίς αρνητικές επιπτώσεις στο σύστηµα (π.χ. µνήµη) µη-προεκχωρήσιµοι πόροι (non-preemptable resources): είναι οι πόροι που δε µπορούν να αποδεσµευτούν από τη διεργασία που τους κατέχει, χωρίς αρνητικές επιπτώσεις στο σύστηµα (π.χ. εκτυπωτής). 2 1
6.1 ΠΟΡΟΙ (2/2) Αδιέξοδα (deadlocks) συµβαίνουν µεταξύ διεργασιών µε µη προεκχωρήσιµους πόρους, αφού σε αιτήσεις για προεκχωρήσιµους πόρους το πρόβληµα επιλύεται µε ανακατανοµή των πόρων µεταξύ των διεργασιών. 3 6.2 Α ΙΕΞΟ Α (1/6) Ένα σύνολο διεργασιών βρίσκεται σε αδιέξοδο (deadlock), αν κάθε διεργασία του συνόλου περιµένει ένα γεγονός που µόνο µια άλλη διεργασία του ίδιου συνόλου µπορεί να προκαλέσει. 4 2
6.2 Α ΙΕΞΟ Α (2/6) 6.2.1 Συνθήκες Αδιεξόδου (1/2) Για να οδηγηθούµε σε αδιέξοδο πρέπει να ικανοποιούνται οπωσδήποτε και οι τέσσερις ακόλουθες συνθήκες: Συνθήκη αµοιβαίου αποκλεισµού: κάθε πόρος είτε είναι δεσµευµένος από µία διεργασία, είτε είναι διαθέσιµος. Συνθήκη δέσµευσης και αναµονής: διεργασίες που δεσµεύουν πόρους που τους εκχωρήθηκαν νωρίτερα, µπορούν να ζητούν και νέους. 5 6.2 Α ΙΕΞΟ Α (3/6) 6.2.1 Συνθήκες Αδιεξόδου (2/2) Συνθήκη µη προεκχώρησης: πόροι που έχουν εκχωρηθεί σε µια διεργασία µπορούν να αποµακρυνθούν από τον έλεγχό της, µόνον αν τους αποδεσµεύσει αυτή. Συνθήκη κυκλικής αναµονής: πρέπει να υπάρχει µια κυκλική αλυσίδα δύο ή περισσότερων διεργασιών, καθεµία από τις οποίες περιµένει έναν πόρο που είναι δεσµευµένος από το επόµενο µέλος της αλυσίδας. 6 3
6.2 Α ΙΕΞΟ Α (4/6) 6.2.2 Μοντελοποίηση Αδιεξόδου Οι αναγκαίες συνθήκες για την επίτευξη αδιεξόδου µπορούν να µοντελοποιηθούν µε χρήση κατευθυνόµενων γράφων. O πόρος R έχει αποδοθεί στην διαδικασία Α ιαδικασία B περιµένει για τον πόρο S Οι διαδικασίες C και D βρίσκονται σε αδιέξοδο 7 6.2 Α ΙΕΞΟ Α (5/6) Οι γράφοι πόρων αποτελούν εργαλείο που µας επιτρέπει να εξετάσουµε αν µια συγκεκριµένη σειρά απαιτήσεων και αποδεσµεύσεων οδηγεί σε αδιέξοδο. 8 4
6.2 Α ΙΕΞΟ Α (5/6) 9 6.2 Α ΙΕΞΟ Α (5/6) 10 5
6.2 Α ΙΕΞΟ Α (6/6) Για την αντιµετώπιση του προβλήµατος του αδιεξόδου χρησιµοποιούνται οι ακόλουθες στρατηγικές: Απλή αγνόηση του προβλήµατος (ignore the problem) Ανίχνευση και επανόρθωση (detection and recovery) υναµική αποφυγή µε προσεκτική κατανοµή πόρων (dynamic avoidance) Πρόληψη, µε συστηµατική αναίρεση µιας από τις τέσσερις αναγκαίες συνθήκες (prevention). 11 6.3 ΑΛΓΟΡΙΘΜΟΣ ΑΓΝΟΗΣΗΣ ΤΟΥ ΠΡΟΒΛΗΜΑΤΟΣ Ηαπλούστερη προσέγγιση είναι η αγνόηση του προβλήµατος, γνωστή ως αλγόριθµος της στρουθοκαµήλου (the ostrich algorithm). Για παράδειγµα, στο σύστηµα UNIX, αν µια κλήση FORK αποτύχει επειδή ο πίνακας διεργασιών είναι πλήρης, το πρόγραµµα που καλεί τη FORK περιµένει για τυχαίο χρονικό διάστηµα και ξαναπροσπαθεί. Εκτιµάται ότι η αγνόηση του προβλήµατος και η αποδοχή περιστασιακού αδιεξόδου είναι προτιµότερη από την ύπαρξη κανόνα περιορισµού. 12 6
6.4 ΑΝΙΧΝΕΥΣΗ ΚΑΙ ΕΠΑΝΟΡΘΩΣΗ Α ΙΕΞΟ ΟΥ (1/15) Στα πλαίσια της στρατηγικής αυτής, το σύστηµα δε δρα προληπτικά, αλλά χρησιµοποιεί µηχανισµούς ανίχνευσης (detection) και ακολούθως επανόρθωσης (recovery) του προβλήµατος. 13 6.4 ΑΝΙΧΝΕΥΣΗ ΚΑΙ ΕΠΑΝΟΡΘΩΣΗ Α ΙΕΞΟ ΟΥ (2/15) 6.4.1 Ανίχνευση αδιεξόδου µε έναν πόρο από κάθε είδος Θεωρούµε συστήµατα µε έναν πόρο από κάθε είδος. Παράδειγµα αντίστοιχου πολύπλοκου συστήµατος περιγράφεται στο επόµενο σχήµα µε επτά διεργασίες και έξι πόρους. 14 7
6.4 ΑΝΙΧΝΕΥΣΗ ΚΑΙ ΕΠΑΝΟΡΘΩΣΗ Α ΙΕΞΟ ΟΥ (2/15) Τ 15 6.4 ΑΝΙΧΝΕΥΣΗ ΚΑΙ ΕΠΑΝΟΡΘΩΣΗ Α ΙΕΞΟ ΟΥ (3/15) Ογράφοςτων πόρων και διεργασιών περιέχει έναν κύκλο, στον οποίο οπτικά φαίνεται ότι υπάρχει αδιέξοδο. Απαιτείται όµως τυπικός αλγόριθµος που θα ελέγχει την ύπαρξη κύκλων σε κατευθυνόµενους γράφους. 16 8
6.4 ΑΝΙΧΝΕΥΣΗ ΚΑΙ ΕΠΑΝΟΡΘΩΣΗ Α ΙΕΞΟ ΟΥ (4/15) Ακολούθως περιγράφεται ένας απλός αλγόριθµος που εξετάζει γράφους και τερµατίζεται: είτε όταν εντοπίσει έναν κύκλο, είτε όταν αποδείξει ότι δεν υπάρχει κανένας κύκλος. [1] Για κάθε κόµβο Κ του γράφου εκτέλεσε τα 5 ακόλουθα βήµατα µε τον Κ ως αρχικό κόµβο. [2] Αρχικοποίησε τη Λ ως κενή λίστα και όλα τα τόξα ως ασηµάδευτα. 17 6.4 ΑΝΙΧΝΕΥΣΗ ΚΑΙ ΕΠΑΝΟΡΘΩΣΗ Α ΙΕΞΟ ΟΥ (5/15) [3] Πρόσθεσε τον τρέχοντα κόµβο στο τέλος της Λ. Αν ο κόµβος εµφανίζεται τώρα στη λίστα δύο φορές, τότε ο γράφος περιέχει έναν κύκλο που περιέχεται στη Λ και ο αλγόριθµος τερµατίζεται. [4] Από τον τρέχοντα κόµβο, έλεγξε αν υπάρχουν ασηµάδευτα τόξα. Αν υπάρχουν πήγαινε στο βήµα 5. Αν δεν υπάρχουν, πήγαινε στο βήµα 6. [5] ιάλεξε τυχαία ένα ασηµάδευτο εξερχόµενο τόξο και σηµάδεψέ το. Ακολούθησέ το στο νέο τρέχοντα κόµβο και πήγαινε στο βήµα 3. [6] Τώρα έχουµε φτάσει σε έναν κόµβο χωρίς ασηµάδευτα εξερχόµενα τόξα. Πήγαινε πίσω στον προηγούµενο κόµβο, δηλαδή σε αυτόν που ήταν τρέχων προηγουµένως, κάνε τον τρέχοντα και πήγαινε στο βήµα 3. Αν ο κόµβος αυτός είναι ο αρχικός, τότε ο γράφος δεν περιέχει κύκλους και ο αλγόριθµος τερµατίζεται. 18 9
6.4 ΑΝΙΧΝΕΥΣΗ ΚΑΙ ΕΠΑΝΟΡΘΩΣΗ Α ΙΕΞΟ ΟΥ (6/15) 6.4.2 Ανίχνευση αδιεξόδου µε πολλούς πόρους από κάθε είδος Υποθέτουµε ότι έχουµε: ν διεργασίες, 1 έως ν µ κατηγορίες πόρων, µε E 1 πόρους κατηγορίας 1, E 2 πόρους κατηγορίας 2 και γενικά E i πόρους κατηγορίας i (1<= i <= µ). Το E καλείται διάνυσµα υπαρχόντων πόρων (existing resource vector) και εκφράζει το συνολικό αριθµό στιγµιότυπων κάθε πόρου. π.χ. αν η κατηγορία 1 είναι οι µονάδες ταινίας, τότε αν το σύστηµα έχει δύο µονάδες ταινίας γράφουµε E 1 =2. 19 6.4 ΑΝΙΧΝΕΥΣΗ ΚΑΙ ΕΠΑΝΟΡΘΩΣΗ Α ΙΕΞΟ ΟΥ (7/15) A i είναι ο αριθµός των στιγµιότυπων του πόρου i- που είναι διαθέσιµα την τρέχουσα χρονική στιγµή. Με A συµβολίζουµε το διάνυσµα διαθέσιµων πόρων (available resource vector). π.χ. αν και οι δύο µονάδες ταινίας έχουν εκχωρηθεί, τότε A 1 =0. Cονοµάζεται πίνακας τρέχουσας κατανοµής (current allocation matrix) και η i-γραµµή του δείχνει πόσα στιγµιότυπα κάθε κατηγορίας πόρων είναι δεσµευµένα από τη διεργασία i τη στιγµή αυτή. π.χ. C iκ είναι ο αριθµός των στιγµιότυπων του κ-πόρου που είναι δεσµευµένα από τη διεργασία i την τρέχουσα χρονική στιγµή. 20 10
6.4 ΑΝΙΧΝΕΥΣΗ ΚΑΙ ΕΠΑΝΟΡΘΩΣΗ Α ΙΕΞΟ ΟΥ (8/15) R ονοµάζεται πίνακας αιτήσεων (request matrix) και η i-γραµµή του δείχνει πόσα στιγµιότυπα κάθε κατηγορίας πόρων αιτείται η διεργασία i τη στιγµή αυτή. π.χ. R iκ είναι ο αριθµός των στιγµιότυπων του κ- πόρου που αιτείται η i την τρέχουσα χρονική στιγµή. 21 6.4 ΑΝΙΧΝΕΥΣΗ ΚΑΙ ΕΠΑΝΟΡΘΩΣΗ Α ΙΕΞΟ ΟΥ (8/15) 22 11
6.4 ΑΝΙΧΝΕΥΣΗ ΚΑΙ ΕΠΑΝΟΡΘΩΣΗ Α ΙΕΞΟ ΟΥ (10/15) 23 6.4 ΑΝΙΧΝΕΥΣΗ ΚΑΙ ΕΠΑΝΟΡΘΩΣΗ Α ΙΕΞΟ ΟΥ (10/15) 0 0 Μετά το τέλος της διεργασίας 3: A = (2 2 2 0) 2 2 0 0 24 12
6.4 ΑΝΙΧΝΕΥΣΗ ΚΑΙ ΕΠΑΝΟΡΘΩΣΗ Α ΙΕΞΟ ΟΥ (9/15) Προφανώς, τα στιγµιότυπα του κ-πόρου που έχουν εκχωρηθεί, αν προστεθούν στα στιγµιότυπα που είναι διαθέσιµα, το αποτέλεσµα δίνει τον αριθµό των υπαρχόντων στιγµιότυπων αυτής της κατηγορίας πόρων. Άρα: ν Σ ( C iκ + A κ ) = E κ i=1 25 6.4 ΑΝΙΧΝΕΥΣΗ ΚΑΙ ΕΠΑΝΟΡΘΩΣΗ Α ΙΕΞΟ ΟΥ (10/15) Όλες οι διεργασίες θεωρούνται αρχικά ασηµάδευτες. Καθώς ο αλγόριθµος εξελίσσεται σηµαδεύονται διαδοχικά όλες οι διεργασίες που µπορούν να συνεχίσουν την εκτέλεσή τους, δηλαδή αυτές που δε βρίσκονται σε αδιέξοδο. 26 13
6.4 ΑΝΙΧΝΕΥΣΗ ΚΑΙ ΕΠΑΝΟΡΘΩΣΗ Α ΙΕΞΟ ΟΥ (11/15) Οαλγόριθµος ανίχνευσης αδιεξόδου διατυπώνεται ως εξής: [1] Ψάξε για µία ασηµάδευτη διεργασία i για την οποία η i- στή γραµµή του πίνακα Α είναι µικρότερη από την i-στή γραµµή του πίνακα Θ. [2] Αν βρεθεί τέτοια διεργασία, πρόσθεσε την i-στή γραµµή του Τ στην i-στή γραµµή του Θ, σηµάδεψε τη διεργασία και πήγαινε πάλι στο πρώτο βήµα 1. [3] Αν δεν υπάρχει τέτοια διεργασία, ο αλγόριθµος τερµατίζεται. Η ολοκλήρωση του αλγορίθµου αφήνει ασηµάδευτες όλες τις διεργασίες που βρίσκονται σε αδιέξοδο. 27 6.4 ΑΝΙΧΝΕΥΣΗ ΚΑΙ ΕΠΑΝΟΡΘΩΣΗ Α ΙΕΞΟ ΟΥ (12/15) Το ερώτηµα που παραµένει είναι πότε πρέπει να γίνεται η ανίχνευση του πιθανού αδιεξόδου. Η ανίχνευση θα µπορούσε να γίνεται: κάθε φορά που γίνεται αίτηση χρήσης πόρου σε τακτά χρονικά διαστήµατα όταν η αξιοποίηση της CPU ελαττωθεί κάτω από κάποια τιµή κατωφλίου. 28 14
6.4 ΑΝΙΧΝΕΥΣΗ ΚΑΙ ΕΠΑΝΟΡΘΩΣΗ Α ΙΕΞΟ ΟΥ (13/15) 6.4.3 Επανόρθωση από αδιέξοδο Επανόρθωση µέσω προεκχώρησης Σε µερικές περιπτώσεις είναι δυνατό να αποµακρυνθεί ένας πόρος, προσωρινά, από την κατέχουσα διεργασία και να εκχωρηθεί σε άλλη. Η επανόρθωση µε αυτόν τον τρόπο είναι συχνά ανέφικτη και απαιτεί εξωτερική ανθρώπινη δραστηριότητα. 29 6.4 ΑΝΙΧΝΕΥΣΗ ΚΑΙ ΕΠΑΝΟΡΘΩΣΗ Α ΙΕΞΟ ΟΥ (14/15) Επανόρθωση µέσω οπισθοδρόµησης Αν οι σχεδιαστές γνωρίζουν ότι συµβαίνουν συχνά αδιέξοδα, τότε αξιοποιούνται περιοδικά σηµεία ελέγχου (checkpoints). 30 15
6.4 ΑΝΙΧΝΕΥΣΗ ΚΑΙ ΕΠΑΝΟΡΘΩΣΗ Α ΙΕΞΟ ΟΥ (15/15) Επανόρθωση µέσω εξάλειψης διεργασιών Ο κλασικότερος τρόπος είναι η εξάλειψη µιας ή περισσότερων διεργασιών. Η διεργασία αυτή µπορεί να είναι είτε εκτός κύκλου, είτε διεργασία του κύκλου. Σε κάθε περίπτωση προτιµούνται διεργασίες που µπορούν να επανεκτελεστούν χωρίς παρενέργειες. 31 6.5 ΑΠΟΦΥΓΗ Α ΙΕΞΟ ΟΥ (1/10) 6.5.1 Τροχιές πόρων 32 16
6.5 ΑΠΟΦΥΓΗ Α ΙΕΞΟ ΟΥ (2/10) 6.5.2 Ασφαλείς και ανασφαλείς καταστάσεις Μια κατάσταση καλείται ασφαλής, αν το σύστηµα δε βρίσκεται σε αδιέξοδο και υπάρχει τρόπος να ικανοποιηθούν όλες οι εκκρεµείς αιτήσεις µε την εκτέλεση όλων των διεργασιών µε κάποια διαδοχή. 33 6.5 ΑΠΟΦΥΓΗ Α ΙΕΞΟ ΟΥ (3/10) Μια ανασφαλής κατάσταση δεν είναι κατάσταση αδιεξόδου. Η διαφορά µεταξύ ασφαλούς και ανασφαλούς κατάστασης είναι ότι από την ασφαλή κατάσταση το σύστηµα µπορεί εγγυηµένα να εκτελέσει όλες τις διεργασίες µέχρι το τέλος τους, ενώ από την ανασφαλή κατάσταση δεν µπορεί να υπάρξει τέτοια διασφάλιση. 34 17
6.5 ΑΠΟΦΥΓΗ Α ΙΕΞΟ ΟΥ (4/10) 6.5.3 Ο Αλγόριθµος του Τραπεζίτη για πόρους ενός είδους Ο αλγόριθµος χρονοδροµολόγησηςγια την αποφυγή αδιεξόδων, είναι γνωστός ως αλγόριθµος του Dijkstra ή αλγόριθµος του τραπεζίτη. 35 6.5 ΑΠΟΦΥΓΗ Α ΙΕΞΟ ΟΥ (5/10) Οαλγόριθµος του τραπεζίτη εξετάζει κάθε αίτηση όταν εµφανίζεται και ελέγχει αν η ικανοποίησή της οδηγεί σε ασφαλή κατάσταση. Αν ναι, τότε ικανοποιείται. Αν όχι αναβάλλεται γι' αργότερα. 36 18
6.5 ΑΠΟΦΥΓΗ Α ΙΕΞΟ ΟΥ (6/10) Για να αποφασίσει αν µια κατάσταση είναι ασφαλής, ο τραπεζίτης ελέγχει αν υπάρχουν αρκετοί πόροι για την ικανοποίηση κάποιου πελάτη. Αν συµβαίνει αυτό συνεχίζει για τον έλεγχο όλων των υπόλοιπων πελατών. Αν όλα τα δάνεια µπορούν να επιστραφούν, τότε η κατάσταση είναι ασφαλής και η αρχική αίτηση ικανοποιείται. 37 6.5 ΑΠΟΦΥΓΗ Α ΙΕΞΟ ΟΥ (7/10) 6.5.4 Ο Αλγόριθµος του Τραπεζίτη για πόρους πολλών ειδών 38 19
6.5 ΑΠΟΦΥΓΗ Α ΙΕΞΟ ΟΥ (8/10) Οαλγόριθµος που ελέγχει αν µια κατάσταση είναι ασφαλής είναι ο ακόλουθος: [1] Ψάξε για µια γραµµή, Α, της οποίας οι επιπλέον απαιτήσεις σε πόρους είναι µικρότερες ή ίσες από Θ. Αν δεν υπάρχει τέτοια γραµµή, τότε το σύστηµα θα οδηγηθεί σε αδιέξοδο αφού δεν υπάρχει διεργασία που να µπορεί να εκτελεστεί µέχρι το τέλος της. 39 6.5 ΑΠΟΦΥΓΗ Α ΙΕΞΟ ΟΥ (9/10) [2] Θεώρησε ότι η διεργασία της γραµµής που βρέθηκε, ζητά όλους τους πόρους που χρειάζεται και εκτελείται µέχρι το τέλος της. Σηµάδεψε αυτή τη διεργασία ως τερµατισµένη και πρόσθεσε όλους τους πόρους της στο διάνυσµα Θ. [3] Επανάλαβε τα βήµατα 1 και 2 µέχρι να σηµαδευτούν όλες οι διεργασίες ως τερµατισµένες, περίπτωση κατά την οποία η αρχική κατάσταση θεωρείται ασφαλής, ή µέχρι να εµφανιστεί αδιέξοδο, οπότε η αρχική κατάσταση θεωρείται ανασφαλής. 40 20
6.5 ΑΠΟΦΥΓΗ Α ΙΕΞΟ ΟΥ (10/10) Οαλγόριθµος του τραπεζίτη είναι επαρκέστατος θεωρητικά για την αποφυγή αδιεξόδου. Στην πραγµατικότητα δε χρησιµοποιείται, αφού: οι διεργασίες σπανίως γνωρίζουν από πριν τις ανάγκες τους σε πόρους ο αριθµός των διεργασιών είναι µεταβαλλόµενος πόροι που θεωρούνται διαθέσιµοι µπορεί ξαφνικά να εξαλειφθούν. 41 6.6 ΠΡΟΛΗΨΗ Α ΙΕΞΟ ΟΥ (1/6) 6.6.1 Αναίρεση της συνθήκης αµοιβαίου αποκλεισµού Προφανώς δε θα έχουµε ποτέ αδιέξοδο, αν κανένας πόρος δεν εκχωρηθεί αποκλειστικά σε µία µόνο διεργασία. Το παράδειγµα όµως, του ετεροχρονιστή εκτύπωσης, µε τη µόνη διεργασία που ζητά το φυσικό εκτυπωτή να είναι ο δαίµονας του εκτυπωτή (printer daemon), δεν είναι εύκολο να ακολουθηθεί και αλλού. 42 21
6.6 ΠΡΟΛΗΨΗ Α ΙΕΞΟ ΟΥ (2/6) 6.6.2 Αναίρεση της συνθήκης δέσµευσης και αναµονής Για να αποτρέψουµε τις διεργασίες από τη δέσµευση των πόρων που κατέχουν όσο περιµένουν άλλους, θα µπορούσαµε να υποχρεώνουµε τις διεργασίες να ζητούν προκαταβολικά όλους τους πόρους που θα θελήσουν. 43 6.6 ΠΡΟΛΗΨΗ Α ΙΕΞΟ ΟΥ (3/6) Οι διεργασίες όµως δε γνωρίζουν πόσους πόρους θα χρειασθούν πριν την έναρξη της εκτέλεσής τους. Θα µπορούσαµε, βεβαίως, να υποχρεώνουµε τη διεργασία που ζητά έναν πόρο να απελευθερώνει προσωρινά όλους τους πόρους που κατέχει και να προσπαθεί να τους ξαναπάρει όλους µαζί πίσω. 44 22
6.6 ΠΡΟΛΗΨΗ Α ΙΕΞΟ ΟΥ (4/6) 6.6.3 Αναίρεση της συνθήκης µη προεκχώρησης Είναι περίπτωση συνήθως αδύνατη να υλοποιηθεί. Θεωρείστε µια διεργασία που έχει δεσµεύσει τον εκτυπωτή Είναι στο ενδιάµεσο της εκτύπωσης Τι θα προκαλέσει η αποδέσµευση του εκτυπωτή; 45 6.6 ΠΡΟΛΗΨΗ Α ΙΕΞΟ ΟΥ (5/6) 6.6.4 Αναίρεση της συνθήκης κυκλικής αναµονής Θα µπορούσαµε να πετύχουµε αναίρεση της κυκλικής αναµονής µε τους εξής τρόπους: Με την ύπαρξη κανόνα που να υποχρεώνει τις διεργασίες στη δέσµευση ενός µόνον πόρου κάθε χρονική στιγµή, οπότε αν χρειασθεί και δεύτερο θα πρέπει να αποδεσµεύει τον πρώτο. Με τη γενική απαρίθµηση όλων των πόρων. Στην περίπτωση αυτή ο κανόνας είναι: οι διεργασίες µπορούν να ζητούν πόρους όποτε επιθυµούν, αλλά όλες οι αιτήσεις πρέπει να γίνονται µε συγκεκριµένη αριθµητική σειρά. 46 23
6.6 ΠΡΟΛΗΨΗ Α ΙΕΞΟ ΟΥ (6/6) Συνοπτικά, οι προσεγγίσεις πρόληψης αδιεξόδων περιγράφεται στο ακόλουθο σχήµα Συνθήκη Αµοιβαίος Αποκλεισµός έσµευση & Αναµονή Μη προεκχώρηση Κυκλική Αναµονή Προσέγγιση Ετεροχρονισµός Αρχική ζήτηση όλων των πόρων Αποµάκρυνση των πόρων Απαρίθµηση των πόρων 47 6.7 ΑΛΛΑ ΘΕΜΑΤΑ (1/4) 6.7.1 Κλείδωµα σε δύο φάσεις Για την αποφυγή αδιεξόδων σε περιβάλλοντα που εκτελούνται πολλές διεργασίες (π.χ. κλείδωµα πολλών εγγραφών και ενηµέρωσή τους), ακολουθείται µερικές φορές το κλείδωµα σε δύο φάσεις: Στην πρώτη φάση η διεργασία προσπαθεί να κλειδώσει όλες τις εγγραφές, µία κάθε φορά. 48 24
6.7 ΑΛΛΑ ΘΕΜΑΤΑ (2/4) Ακολούθως:» Αν επιτύχει, ακολουθεί η δεύτερη φάση, όπου ενηµερώνονται και ακολούθως αποδεσµεύονται οι κλειδωµένες εγγραφές» Αν κατά τη διάρκεια της πρώτης φάσης κάποιες εγγραφές βρεθούν κλειδωµένες, τότε η διεργασία αποδεσµεύει όσες κλείδωσε και ξεκινά από την αρχή. 49 6.7 ΑΛΛΑ ΘΕΜΑΤΑ (3/4) 6.7.2 Αδιέξοδα που δεν προκαλούνται από πόρους Υπάρχει περίπτωση να συµβαίνει αδιέξοδο όταν δύο διεργασίες περιµένουν η µία την άλλη να επιτελέσει κάποιο έργο, όπως συµβαίνει µε τους σηµαφόρους. 50 25
6.7 ΑΛΛΑ ΘΕΜΑΤΑ (4/4) 6.7.3 Παρατεταµένη στέρηση πόρων Υπάρχει περίπτωση ο αλγόριθµος κατανοµής πόρων να οδηγήσει στο πρόβληµα της παρατεταµένης στέρησης πόρων (starvation) για κάποιες διεργασίες. Πολλές φορές το πρόβληµα αντιµετωπίζεται µε τον αλγόριθµο κατανοµής Πρώτη-Εισερχόµενη- Πρώτη-Εξυπηρετούµενη για τις υπάρχουσες διεργασίες. 51 26