ENOTHTA 4 A IEΞO O. Περιεχόµενα

Σχετικά έγγραφα

ΑΔΙΕΞΟΔΑ. Λειτουργικά Συστήματα Ι. Διδάσκων: Καθ. Κ. Λαμπρινουδάκης ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ Ι

09/04/2014 ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ Ι. Μάθηµα: Α ΙΕΞΟ Α. ιδάσκων: Λειτουργικά Συστήµατα Ι Αν. Καθ. Κ. Λαµπρινουδάκης Α ΙΕΞΟ Α

Λειτουργικά Συστήματα (Λ/Σ)

Λειτουργικά Συστήματα Η/Υ

Αδιέξοδα (Deadlocks)

ΑΔΙΕΞΟΔΑ (Deadlocks) Παράδειγμα 1 Θανάσιμο αγκάλιασμα (deadly embrace)

2.4 Κλασσικά Προβλήματα IPC

6. Αδιέξοδο. 1. Ορισμοί είδη πόρων. 3. Συνθήκες αδιεξόδου. 1. Πρόληψη 2. Αποφυγή 3. Ανίχνευση 5. Το πρόβλημα των συνδαιτημόνων φιλοσόφων

Λειτουργικά Συστήματα

Συγχρονισµός: Αδιέξοδο & Παρατεταµένη Στέρηση

Αδιέξοδα Ανάθεση Πόρων (Deadlocks Resource Allocation)

Αδιέξοδα Ανάθεση Πόρων (Deadlocks Resource Allocation)

Περιεχόμενα. Αδιέξοδο

ENOTHTA 5 XPONO POMOΛOΓHΣH

Αδιέξοδα Ανάθεση Πόρων (Deadlocks Resource Allocation)

Λειτουργικά Συστήματα. Ενότητα # 6: Αδιέξοδα Διδάσκων: Γεώργιος Ξυλωμένος Τμήμα: Πληροφορικής

ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ. Αδιέξοδα

ENOTHTA 8 IAXEIPIΣH KAI ΣYΣTHMATA APXEIΩN

ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ ΑΔΙΕΞΟΔΑ

Λειτουργικά Συστήματα

ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ. Αδιέξοδα

Dr. Garmpis Aristogiannis - EPDO TEI Messolonghi

ENOTHTA 9 AΣΦAΛEIA KAI ΠPOΣTAΣIA

Λειτουργικά Συστήματα

Λειτουργικά Συστήματα

Αμοιβαίος αποκλεισμός

Διεργασίες (Processes)

ENOTHTA 3 ΣYNTPEXΩN ΠPOΓPAMMATIΣMOΣ

ENOTHTA 2 IEPΓAΣIEΣ: ΠEPIΓPAΦH KAI EΛEΓXOΣ

Κεφάλαιο 3. Διδακτικοί Στόχοι

Γιατί υϖάρχει τέτοια καθολική κατάσταση;

ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ Ι. Κεφάλαιο 6ο: Αδιέξοδα

Ενότητα 6 (Κεφάλαιο 9) Χρονοδρομολόγηση

ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ

Λειτουργικά Συστήματα

Δομές Ακολουθίας- Επιλογής - Επανάληψης. Δομημένος Προγραμματισμός

Αποτίµησηκαθολικού κατηγορήµατος

Κρίσιμη Περιοχή Υπό Συνθήκη (Conditional Critical Regions) Ταυτόχρονος Προγραμματισμός 1

Λειτουργικά Συστήματα Η/Υ

επιµέλεια Θοδωρής Πιερράτος

ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ ΙΙ - UNIX. Συστήματα Αρχείων. Διδάσκoντες: Καθ. Κ. Λαμπρινουδάκης Δρ. Α. Γαλάνη

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

Σειρά Προβλημάτων 1 Λύσεις

Ενότητα 2 (Κεφάλαιο 3) Περιγραφή και Έλεγχος Διεργασιών. Περιεχόμενα. Ανάγκη ύπαρξης διεργασιών 1

Αµοιβαίοςαποκλεισµός. Κατανεµηµένα Συστήµατα 03-1

ΜΑΘΗΜΑ / ΤΑΞΗ : ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ / Γ ΕΠΑΛ ΣΕΙΡΑ: ΗΜΕΡΟΜΗΝΙΑ: 27/01/2013

Μάθημα 4 ο. Κρίσιμα Τμήματα και Αμοιβαίος Αποκλεισμός

ENOTHTA 7 IAXEIPIΣH ΣYΣKEYΩN E/E & AΠOΘHKEYΣHΣ

Καρακασίδης Αλέξανδρος Καστίδου Γεωργία Παπαφώτη Μαρία Πέτσιος Κων/νος Στέφανος Σαλτέας Καλογεράς Παναγιώτης. Threads in Java ΝΗΜΑΤΑ ΣΤΗ JAVA

Λειτουργικά Συστήματα (ΗΥ222)

Διάλεξη 10: Αλγόριθμοι Αμοιβαίου Αποκλεισμού σε περιβάλλον ανταλλαγής μηνυμάτων. ΕΠΛ 432: Κατανεμημένοι Αλγόριθμοι

Μάθημα 3 ο ΔΙΕΡΓΑΣΙΕΣ (PROCESSES)

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

Εισαγωγή στην Πληροφορική

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

ΚΕΦΑΛΑΙΟ 7 ο. Έτσι ο προγραµµατισµός µε τη ΓΛΩΣΣΑ εστιάζεται στην ανάπτυξη του αλγορίθµου και τη µετατροπή του σε σωστό πρόγραµµα.

Παράλληλη Επεξεργασία Κεφάλαιο 6 ο Σύγχρονος Παραλληλισμός

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

ιεργασίες και Επεξεργαστές στα Κατανεµηµένων Συστηµάτων

Απλοποιεί τα γεγονότα έτσι ώστε να περιγράφει τι έχει γίνει και όχι πως έχει γίνει.

Λειτουργικά. Τεχνολογικό Εκπαιδευτικό Ίδρυμα Δυτικής Μακεδονίας Σιώζιος Κων/νος - Πληροφορική Ι

ΙΑΧΕΙΡΙΣΗ ΟΣΟΛΗΨΙΩΝ Να θυµηθούµε:

Τμήμα Οικιακής Οικονομίας και Οικολογίας. Οργάνωση Υπολογιστών

Λειτουργικά Συστήματα

Ενότητα 7 (Κεφάλαιο 7) Διαχείριση Μνήμης. Περιεχόμενα. Ανάγκη για διαχείριση μνήμης. Βασικές αρχές διαχείρισης μνήμης.

Κεφάλαιο 4: Λογισμικό Συστήματος

Ορισµός Νήµα (thread) είναι µια ακολουθιακή ροή ελέγχου (δηλ. κάτι που έχει αρχή, ακολουθία εντολών και τέλος) σ ένα

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

2ο ΓΕΛ ΑΓ.ΔΗΜΗΤΡΙΟΥ ΑΕΠΠ ΘΕΟΔΟΣΙΟΥ ΔΙΟΝ ΠΡΟΣΟΧΗ ΣΤΑ ΠΑΡΑΚΑΤΩ

Ασύγχρονο Σύστηµα ιαµοιραζόµενης Μνήµης Το σύστηµα περιέχει n διεργασίες p 0,, p n-1 και m καταχωρητές R 0,, R m-1. Κάθε διεργασία µοντελοποιείται ως

Άρα, Τ ser = (A 0 +B 0 +B 0 +A 0 ) επίπεδο 0 + (A 1 +B 1 +A 1 ) επίπεδο 1 + +(B 5 ) επίπεδο 5 = 25[χρονικές µονάδες]

Λειτουργικά Συστήματα Η/Υ

Κεφάλαιο 3: Λειτουργικά Συστήµατα

Κεφάλαιο 4 Διεργασίες Β Τάξη ΕΠΑΛ

Λειτουργικά Συστήματα

1. Πότε χρησιμοποιούμε την δομή επανάληψης; Ποιες είναι οι διάφορες εντολές (μορφές) της;

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

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ Κεφάλαιο 10 : Εντολές επιλογής και αποφάσεων

Οι πράξεις της συνένωσης. Μ.Χατζόπουλος 1

Εισαγωγή στα Λειτουργικά Συστήματα

Ένα αφαιρετικό πραγματικού χρόνου μοντέλο λειτουργικού συστήματος για MPSoC

Προβλήματα Συγχρονισμού (με ελεγκτή) Ταυτόχρονος Προγραμματισμός 1

Δομή Ηλεκτρονικού υπολογιστή

Ενότητα 4 (Κεφάλαιο 5) Συντρέχων Προγραμματισμός

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ Κεφάλαιο 10 : Εντολές επιλογής και αποφάσεων

ιαφάνειες παρουσίασης #4

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

4.3. Γραµµικοί ταξινοµητές

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

Λειτουργικά Συστήματα (διαχείριση επεξεργαστή, μνήμης και Ε/Ε)

Τι είναι ένα λειτουργικό σύστημα (ΛΣ); Μια άλλη απεικόνιση. Το Λειτουργικό Σύστημα ως μέρος του υπολογιστή

Κεφάλαιο 7 ο Βασικές Έννοιες Προγραμματισμού (σελ )

Ελεγκτές/Παρακολουθητές (Monitors) Ταυτόχρονος Προγραμματισμός 1

Νήµαταστην Java. Συγχρονισµός νηµάτων Επικοινωνία νηµάτων Εκτελέσιµα αντικείµενα Νήµατα δαίµονες Οµάδες νηµάτων. Κατανεµηµένα Συστήµατα 11-1

7. Βασικά στοιχεία προγραµµατισµού.

Προγραµµατισµός Η/Υ. Μέρος2

Κατανεμημένα Συστήματα: Θεωρία και Προγραμματισμός. Ενότητα # 3: Καθολικά κατηγορήματα Διδάσκων: Γεώργιος Ξυλωμένος Τμήμα: Πληροφορικής

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

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

Transcript:

ENOTHTA 4 Περιεχόµενα 1. Aδιέξοδο 2. Eίδη πόρων 3. Συνθήκες αδιέξοδου 4. Aντιµετώπιση αδιέξοδου 5. Aγνόηση του αδιέξοδου 6. Πρόληψη του αδιέξοδου 7. Aνίχνευση και επανόρθωση αδιέξοδου 8. Aποφυγή αδιέξοδου 9. Oλοκληρωµένη πολιτική αδιέξοδου 10. Kλ ασσικά προβλήµατα ταυτοχρονίας 11. Tαυτοχρονία και αντιµετώπιση αδιέξοδου σε µερικά Λειτουργικά Συστήµατα 4-1

1. Aδιέξοδο Ένα σύνολο διεργασιών βρίσκεται σε αδιέξοδο (deadlock) αν κάθε διεργασία του συνόλου περιµένει ένα γεγονός που µόνο µία άλλη διεργασία του συνόλου µπορεί να προκαλέσει. Eπειδή όλες οι διεργασίες του συνόλου περιµένουν, καµιά δεν θα προκαλέσει ποτέ κάποιο γεγονός για να ενεργοποιηθεί κάποια άλλη, και έτσι όλες οι διεργασίες θα περιµένουν για πάντα. Mε τον όρο γεγονός συνήθως αναφερόµαστε σε δέσµευση πόρων (resources) δηλαδή µνήµη, περιφερειακές συσκευές, την KME, κλπ. O αριθµός και είδος των διεργασιών και πόρων που εµπλέκονται σε αδιέξοδο δεν έχουν µεγάλη σηµασία. Όµως οι διάφοροι τύποι πόρων αναφορικά µε τη δυνατότητα επαναχρησιµοποίησής τους και τον τρόπο δέσµευσης και αποδέσµευσής τους από τις διεργασίες επηρεάζουν τη δηµιουργία και αντιµετώπιση του αδιέξοδου. 2. Eίδη πόρων Mε βάση τον τρόπο δέσµευσης και αποδέσµευσής τους έχουµε δύο είδη πόρων, όπου µόνο στη δεύτερη κατηγορία δηµιουργείται αδιέξοδο: τους προεκχωρήσιµους (preemptable) πόρους που µπορούν να αποδεσµευθούν από µία διεργασία χωρίς παρενέργειες, λ.χ. η µνήµη τους µη προεκχωρήσιµους (nonpreemptable) πόρους που δεν µπορούν να αποδεσµευθούν από µία διεργασία χωρίς παρενέργειες, λ.χ. µία συσκευή (όπως ο εκτυπωτής κατά τη διάρκεια χρήσης του). Mε βάση τη δυνατότητα επαναχρησιµοποίησης έχουµε δύο είδη πόρων: επαναχρησιµοποιήσιµες (reusable), π.χ. µνήµη, KME, κανάλια εισ/εξ, αναλώσιµες (consumable), π.χ. µηνύµατα, διακόπτες, κλπ. Kαι για τις δύο κατηγορίες πόρων µπορεί να υπάρξει αδιέξοδο αλλά στη δεύτερη περίπτωση είναι συνήθως πιο δύσκολο να εντοπιστεί. 4-2

2. Eίδη πόρων (συνέχεια) Παράδειγµα δηµιουργίας αδιέξοδου κατά τη χρήση συσκευών: P1 repeat Request(Disk); Request(Tape); Release(Tape); Release(Disk); forever P2 repeat Request(Tape); Request(Disk); Release(Disk); Release(Tape); forever Παράδειγµα δηµιουργίας αδιέξοδου κατά τη δέσµευση µνήµης. Yποθέτουµε ότι υπάρχουν διαθέσιµα για δέσµευση 200KB: P1 P2 Request 80K; Request 70K; Request 60K; Request 80K; Παράδειγµα δηµιουργίας αδιέξοδου κατά την ανταλλαγή µηνυµάτων (θεωρούµε ότι το Receive θέτει τη διεργασία υπό αναστολή αν δεν έχει αφιχθεί το µήνυµα): P1 Receive(P2,M); Send(P2,N); P2 Receive(P1,Q); Send(P1,R); 4-3

3. Συνθήκες αδιέξοδου Oι Coffman et al. (1971) έδειξαν ότι πρέπει να ικανοποιούνται τέσσερις συνθήκες για να οδηγηθούµε σε αδιέξοδο: H συνθήκη αµοιβαίου αποκλεισµού. Kάθε πόρος είτε είναι δεσµευµένος από µία µόνο διεργασία είτε είναι διαθέσιµος. H συνθήκη δέσµευσης και αναµονής (hold and wait). ιεργασίες που δεσµεύουν πόρους που τους εκχωρήθηκαν νωρίτερα µπορούν να ζητούν και νέους. H συνθήκη της µη προεκχώρησης. Πόροι που έχουν εκχωρηθεί σε µία διεργασία µπορούν να αποµακρυνθούν από τον έλεγχό της µόνο αν τους αποδεσµεύσει αυτή. H συνθήκη της κυκλικής αναµονής (circular wait). Πρέπει να υπάρχει µία κυκλική αλυσίδα δύο ή περισσοτέρων διεργασιών, κάθε µία από τις οποίες περιµένει έναν πόρο που είναι δεσµευµένος από το επόµενο µέλος της αλυσίδας, όπως δείχνει το παρακάτω σχήµα. A P1 P2 B Σηµειωτέον ότι πρέπει να ικανοποιούνται και οι τέσσερις συνθήκες για να δηµιουργηθεί αδιέξοδο. Oι πρώτες τρεις συνθήκες είναι αναγκαίες αλλά όχι και ικανές για τη δηµιουργία αδιέξοδου. H τέταρτη συνθήκη είναι πιθανό αποτέλεσµα της ύπαρξης των τριών πρώτων. H σηµαντική διαφορά µεταξύ των τριών πρώτων και της τέταρτης συνθήκης είναι ότι οι τρεις πρώτες έχουν να κάνουν µε αποφάσεις πολιτικής στη διαχείρηση των διεργασιών ενώ η τέταρτη αποτελεί πιθανή εξέλιξη µε βάση τον τρόπο αίτησης δέσµευσης, χρήσης και αποδέσµευσης των πόρων. 4-4

4. Aντιµετώπιση αδιέξοδου Σε γενικές γραµµές υπάρχουν τέσσερις στρατηγικές αντιµετώπισης του προβλήµατος του αδιέξοδου: Aπλή αγνόηση του προβλήµατος. Πρόληψη (prevention), µε συστηµατική αναίρεση µίας από τις τέσσερις αναγκαίες συνθήκες. Aνίχνευση (detection) ύπαρξης αδιέξοδου και επανόρθωσης (recovery). υναµική αποφυγή (avoidance) µε προσεκτική κατανοµή πόρων. 5. Aγνόηση του αδιέξοδου Ή άλλως ο αλγόριθµος της στρουθοκαµήλου. Aπλά δεν κάνουµε τίποτα. Όχι και τόσο λανθασµένη προσέγγιση όσο φαίνεται εκ πρώτης όψης. H λογική εδώ είναι ότι συνήθως το αδιέξοδο παρουσιάζεται τόσο σπάνια που είναι πιθανότερο µέσα σε µία συγκεκριµένη χρονική περίοδο το σύστηµα να καταρρεύσει (crash) από ένα µηχανικό λάθος παρά από τη δηµιουργία ενός αδιέξοδου. Oι περιορισµοί που πρέπει να επιβληθούν για την αντιµετώπιση του αδιέξοδου µε κάποιον από τους άλλους τρεις τρόπους είναι τόσο σοβαροί και αρκετοί που οι περισσότεροι χρήστες θα προτιµούσαν να αντιµετώπιζαν µία µικρή πιθανότητα δηµιουργίας αδιέξοδου µία φορά κάθε τόσο παρά να είναι υποχρεωµένοι να ακολουθούν συνεχώς περιοριστικούς κανόνες του τύπου µόνο ένα αρχείο ανοικτό ή µία διεργασία ενεργός ανά πάσα στιγµή. Tο δίληµµα µεταξύ απουσίας περιορισµών και ορθότητας από τη µία πλευρά και επιβολής αυστηρών περιορισµών από την άλλη δεν είναι εύκολο να επιλυθεί και δεν είναι τυχαίο ότι µοντέρνα λειτουργικά συστήµατα όπως το Unix έχουν οϊοθετήσει αυτή την πολιτική της αγνόησης του προβλήµατος. 4-5

6. Πρόληψη του αδιέξοδου H λογική εδώ είναι να εξασφαλίσουµε ότι τουλάχιστον µία από τις τέσσερις συνθήκες δηµιουργίας αδιέξοδου δεν µπορεί να ικανοποιηθεί. Στη γενική περίπτωση η συνθήκη του αµοιβαίου αποκλεισµού δεν µπορεί να αναιρεθεί διότι πολλοί πόροι (π.χ. KME, εκτυπωτές) απαιτούν αποκλειστική χρήση τους από µία διεργασία. H συνθήκη της δέσµευσης και αναµονής µπορεί να αναιρεθεί µε την εφαρµογή του περιορισµού ότι όλοι οι πόροι που χρειάζεται µία διεργασία θα πρέπει να ζητηθούν πριν αρχίσει η εκτέλεσή της. Aν οι πόροι είναι διαθέσιµοι, η διεργασία τούς δεσµεύει και εκτελείται, αλλιώς αν ένας ή περισσότεροι δεν είναι διαθέσιµοι, η διεργασία δεν δεσµεύει κανένα και περιµένει για µία χρονική περίοδο πριν ξαναδοκιµάσει. H µέθοδος αυτή έχει τα εξής προβλήµατα: εν είναι απαραίτητο µία διεργασία να γνωρίζει από την αρχή όλες τις ανάγκες της σε πόρους. Oι πόροι που εκχωρούνται σε µία διεργασία µένουν δεσµευµένοι από αυτήν περισσότερο χρόνο από όσο πραγµατικά τους χρειάζεται και έτσι δεν είναι διαθέσιµοι στις υπόλοιπες διεργασίες. Aν και θα µπορούσε να εκτελεσθεί ένα µέρος µίας διεργασίας µε λιγότερους πόρους, εν τούτοις παραµένει ανενεργό περιµένοντας τη δέσµευση όλων των πόρων που θα χρειασθεί συνολικά η διεργασία. H συνθήκη της µη προεκχώρησης είναι επίσης µάλλον αδύνατο να αναιρεθεί στη γενική περίπτωση (π.χ. την ώρα που τυπώνεται ένα αρχείο, ο εκτυπωτής δίνεται σε άλλη διεργασία!). Mπορεί να εφαρµοσθεί µόνο για πόρους όπου είναι εύκολη η αποθήκευση/αλλαγή καταστάσεων (π.χ. KME). H συνθήκη της κυκλικής αναµονής µπορεί να αναιρεθεί µε την απαρίθµηση όλων των πόρων και την επιβολή του περιορισµού ότι οι πόροι εκχωρούνται στις διεργασίες µε αριθµητική σειρά (ας πούµε από µικρότερο σε µεγαλύτερο). Eίναι αδύνατο εποµένως η διεργασία P1 να ζητάει κατά σειρά τους πόρους R3 και R4 και η διεργασία P2 τους πόρους R4 και R3, διότι δεν µπορούµε να έχουµε R4>R3. Έτσι αποφεύγονται κύκλοι. 4-6

7. Aνίχνευση και επανόρθωση αδιέξοδου Oι στρατηγικές πρόληψης του αδιέξοδου είναι πολύ συντηρητικές διότι επιβάλλουν περιορισµούς στον αριθµό και τρόπο εκχώρησης πόρων σε διεργασίες. Oι στρατηγικές της ανίχνευσης και επανόρθωσης δεν επιβάλλουν περιορισµούς αλλά περιοδικά ανιχνεύουν το σύστηµα για να εντοπίσουν αδιέξοδο και αν χρειασθεί να κάνουν επανόρθωση. H ανίχνευση µπορεί να γίνεται κάθε φορά που µία διεργασία ζητεί κάποιον πόρο αλλά σηµειωτέον ότι η ανίχνευση σπαταλά χρόνο της KME. H ανίχνευση γίνεται βασικά µέσω της υλοποίησης κάποιου από τους αλγόριθµους για εύρεση κύκλων σε κατευθυνόµενους γράφους (directed graphs) και αυτό γιατί η κυκλική αναµονή δηµιουργεί κύκλους στα γραφήµατα που αναπαριστούν την εκχώρηση των πόρων σε διεργασίες (όπως αυτό της παραγράφου 3). H επανόρθωση του αδιέξοδου µπορεί να γίνει µε τους εξής τρόπους: Aπλά, εξάλειψη όλων των διεργασιών εµπλεκόµενων σε αδιέξοδο. Oπισθοδρόµηση σε κάποιο παλαιότερο σηµείο όπου δεν υπήρχε αδιέξοδο και επανέναρξη εκτέλεσης των διεργασιών από εκείνο το σηµείο. Aπαιτεί την περιοδική αποθήκευση της κατάστασης του συστήµατος σε κάποια σηµεία ελέγχου (checkpoints). H πιθανότητα επανεµφάνισης του αδιέξοδου υπάρχει αλλά ελαχιστοποιείται λόγω της µη προκαθορισµένης συµπεριφοράς των συντρέχουσων διεργασιών. Σταδιακή εξάλειψη των διεργασιών που εµπλέκονται σε αδιέξοδο. H σειρά εξάλειψης καθορίζεται από τη λογική της ελαχιστοποίησης του κόστους επανεκτέλεσης µίας διεργασίας. Mετά την εξάλειψη µίας διεργασίας ο αλγόριθµος ανίχνευσης εκτελείται ξανά για να διαπιστωθεί αν το αδιέξοδο έχει εκλείψει. Σταδιακή προεκχώρηση πόρων σε διεργασίες που βρίσκονται σε αδιέξοδο µε την αποµάκρυνσή τους από άλλες διεργασίες. H διεργασία που έχασε ένα πόρο πρέπει να επιστρέψει στην κατάσταση που ήταν πριν τη δέσµευση του πόρου αυτού. Kαι εδώ πρέπει να ορισθούν τα κριτήρια µε βάση τα οποία επιλέγεται η διεργασία που θα χάσει ή θα πάρει πόρους. 4-7

7. Aνίχνευση και επανόρθωση αδιέξοδου (συνέχεια) Για τους δύο τελευταίους τρόπους επανόρθωσης του αδιέξοδου, η ιδανική διεργασία που πρέπει να επιλεγεί για να της αφαιρεθούν πόροι ή ακόµα και για να τερµατισθεί η εκτέλεσή της πρέπει να έχει: καταναλώσει τον λιγότερο χρόνο σε χρήση της KME, τον περισσότερο χρόνο για αποπεράτωσή της, παραγάγει τη λιγότερη ποσότητα αποτελεσµάτων, δεσµεύσει τους λιγότερους σε αριθµό πόρους, τη µικρότερη προτεραιότητα. 8. Aποφυγή αδιέξοδου H διαφορά µεταξύ πρόληψης και αποφυγής αδιέξοδου είναι ότι στην πρώτη περίπτωση ο στόχος είναι η παρεµπόδιση ικανοποίησης µίας τουλάχιστον από τις συνθήκες που το προκαλούν µέσω της επιβολής περιορισµών στις εκχωρήσεις πόρων ενώ στη δεύτερη περίπτωση επιτρέπεται η ικανοποίηση των πρώτων τριών συνθηκών αλλά εφ όσον δεν οδηγούν στην ικανοποίηση της τέταρτης. O έλεγχος γίνεται δυναµικά, κάθε φορά που εκχωρείται ένας νέος πόρος, αντίθετα µε τις µεθόδους στην περίπτωση της πρόληψης που είναι στατικοί. Yπάρχουν δύο προσεγγίσεις στο πρόβληµα της αποφυγής αδιέξοδου: Aποφυγή έναρξης εκτέλεσης µίας διεργασίας που µπορεί να προκαλέσει αδιέξοδο. Aποφυγή εκχώρησης ενός πόρου σε κάποια διεργασία αν αυτή η εκχώρηση µπορεί να προκαλέσει αδιέξοδο. H στρατηγική στην πρώτη προσέγγιση είναι ότι επιτρέπεται η έναρξη εκτέλεσης µίας διεργασίας αν το σύνολο των αναγκών της διεργασίας σε πόρους σε συνδυασµό και µε τις ανάγκες των υπάρχουσων διεργασιών δεν µπορεί να προκαλέσει αδιέξοδο. H στρατηγική αυτή κάθε άλλο παρά είναι βέλτιστη διότι υποθέτει ότι όλες οι εν ενεργεία διεργασίες θα ζητήσουν ταυτόχρονα όλους τους πόρους που χρειάζονται. 4-8

8. Aποφυγή αδιέξοδου (συνέχεια) H δεύτερη προσέγγιση, γνωστή και σαν αλγόριθµος του τραπεζίτη (banker s algorithm), προτάθηκε από τον Dijkstra το 1965. O αλγόριθµος του τραπεζίτη εξετάζει κάθε αίτηση για εκχώρηση ενός πόρου σε κάποια διεργασία και την ικανοποιεί µόνο αν αυτό οδηγεί σε ασφαλή κατάσταση. Mία κατάσταση είναι ασφαλής αν το σύστηµα δεν βρίσκεται σε αδιέξοδο και υπάρχει τρόπος να ικανοποιηθούν όλες οι εκκρεµείς αιτήσεις µε την εκτέλεση όλων των διεργασιών σε κάποια σειρά. Στην αντίθετη περίπτωση η κατάσταση είναι ανασφαλής. Πρέπει να τονισθεί ότι µία ανασφαλής κατάσταση δεν αποτελεί αδιέξοδο per se αλλά απλά υποδεικνύει ότι µπορεί να οδηγήσει σε αδιέξοδο και εποµένως πρέπει να αποφευχθεί. Aν θεωρήσουµε την απλούστερη περίπτωση µίας οµάδας διεργασιών που προσπαθούν να δεσµεύσουν ένα αριθµό πόρων του ιδίου τύπου, τότε η ακόλουθη κατάσταση είναι ασφαλής: Kωδικός Ποσότητα πόρων Mέγιστη ποσότητα πόρων διεργασίας που έχουν δεσµευθεί που µπορεί να δεσµευθούν 1 1 4 2 4 6 3 5 8 ιαθέσιµοι πόροι: 2 Aν και οι δύο διαθέσιµοι πόροι δοθούν στη διεργασία 2, αυτή µπορεί να ολοκληρώσει την εκτέλεσή της, να αποδεσµεύσει τους 6 πόρους οι οποίοι µπορούν µετά να εκχωρηθούν στις διεργασίες 1 και 3. Έτσι όλες οι διεργασίες θα καταφέρουν τελικά να τερµατίσουν. 4-9

8. Aποφυγή αδιέξοδου (συνέχεια) Aντίθετα η ακόλουθη κατάσταση είναι ανασφαλής: Kωδικός Ποσότητα πόρων Mέγιστη ποσότητα πόρων διεργασίας που έχουν δεσµευθεί που µπορεί να δεσµευθούν 1 8 10 2 2 5 3 1 3 ιαθέσιµοι πόροι: 1 Σε αυτή την περίπτωση όποια διεργασία και να δεσµεύσει τον τελευταίο διαθέσιµο πόρο θα µπορούσε να προκαλέσει αδιέξοδο αν µία από αυτές θα ήθελε κατόπιν και άλλους πόρους. Mία κατάσταση µπορεί από ασφαλής να µετατραπεί σε ανασφαλής. Aν στην περίπτωση της πρώτης κατάστασης, ένας από τους δύο διαθέσιµους πόρους δοθεί στην τρίτη διεργασία, η κατάσταση που προκύπτει είναι ανασφαλής: Kωδικός Ποσότητα πόρων Mέγιστη ποσότητα πόρων διεργασίας που έχουν δεσµευθεί που µπορεί να δεσµευθούν 1 1 4 2 4 6 3 6 8 ιαθέσιµοι πόροι: 1 O λόγος που η νέα κατάσταση είναι ανασφαλής είναι διότι χρειάζονται πλέον τουλάχιστον δύο πόροι για να µπορέσει µία από τις διεργασίες 2 ή 3 να τελειώσει την εκτέλεσή της, οι οποίοι πόροι δεν υπάρχουν. O αλγόριθµος του τραπεζίτη µπορεί εύκολα να γενικευθεί για πόρους πολλών ειδών µε χρήση πινάκων δύο διαστάσεων που απεικονίζουν τη σχέση µεταξύ των διεργασιών, των αναγκών τους σε κάθε είδος πόρου και του διαθέσιµου αριθµού πόρων από κάθε είδος. 4-10

8. Aποφυγή αδιέξοδου (συνέχεια) O αλγόριθµος του τραπεζίτη είναι λιγότερο περιοριστικός από τις µεθόδους πρόληψης (δεν χρειάζεται καταφυγή σε αφαίρεση πόρων από µία διεργασία ή ακόµα και πρόωρο τερµατισµό της) αλλά έχει και αυτός µειονεκτήµατα: O µέγιστος αριθµός πόρων που µία διεργασία τυχόν θα χρειασθεί πρέπει να είναι γνωστός από την αρχή. O αριθµός των διαθέσιµων πόρων που υπάρχουν στο σύστηµα πρέπει να είναι σταθερός. Oι διεργασίες πρέπει να είναι ανεξάρτητες µεταξύ τους, ώστε η σειρά εκτέλεσής τους να µην δηµιουργεί προβλήµατα συγχρονισµού. Σε µοντέρνα λειτουργικά συστήµατα οι περιορισµοί αυτοί είναι πολύ αυστηροί και έτσι ελάχιστα συστήµατα χρησιµοποιούν αυτήν τη µέθοδο. 9. Oλοκληρωµένη πολιτική αδιέξοδου Mια και όλες οι προσεγγίσεις αντιµετώπισης του αδιέξοδου έχουν σοβαρά µειονεκτήµατα, ίσως το καλύτερο που µπορεί να γίνει είναι να οϊοθετούνται διαφορετικές στρατηγικές για διαφορετικές καταστάσεις. Συγκεκριµένα, οι Silberschatz, Peterson, και Galvin πρότειναν τα εξής: Oµαδοποίηση των πόρων σε κατηγορίες. Xρήση απαρίθµησης µεταξύ των κατηγοριών για πρόληψη αδιέξοδου. Xρήση της καλύτερης προσέγγισης για κάθε κατηγορία πόρων. Oι κατηγορίες πόρων που µπορούν να υπάρξουν (µε την αντίστοιχη καλύτερη προσέγγιση) είναι οι εξής: Περιφερειακή µνήµη (πρόληψη υπό την προϋπόθεση ότι το µέγιστο ποσό µνήµης που θα χρειασθεί είναι γνωστό). Aρχεία, συσκευές ανάγνωσης ταινιών και άλλα είδη πόρων των οποίων η χρήση µπορεί να είναι γνωστή εκ των προτέρων (αποφυγή). Kύρια µνήµη (πρόληψη µε τη µέθοδο της προεκχώρησης). Kανάλια E/E (πρόληψη µε τη µέθοδο της απαρίθµησης). 4-11

10. Kλασσικά προβλήµατα ταυτοχρονίας Tο πρόβληµα του παραγωγού-καταναλωτή είναι ένα κλασσικό πρόβληµα ταυτοχρονίας που δείχνει µερικά από τα προβλήµατα που πρέπει να αντιµετωπισθούν στο συντρέχοντα προγραµµατισµό. ύο άλλα κλασσικά προβλήµατα είναι των αναγνωστών και εγγραφέων (readers-writers) και των συνδαιτηµόνων φιλοσόφων (dining philosophers). Tο πρόβληµα των αναγνωστών και εγγραφέων µοντελοποιεί την πρόσβαση σε µία βάση δεδοµένων. Yπάρχει µία οµάδα από διεργασίες που προσπαθούν να διαβάσουν ταυτόχρονα µία περιοχή µνήµης και µία οµάδα από διεργασίες που προσπαθούν να γράψουν ταυτόχρονα στην περιοχή αυτή. Mόνο µία διεργασία µπορεί ανά πάσα στιγµή να γράφει αλλά πολλές να διαβάζουν. Tην ώρα που µία διεργασία γράφει καµµία άλλη δεν µπορεί να διαβάζει. Oι λύσεις που έχουν προταθεί για το συντονισµό των αναγνωστών και εγγραφέων είναι δύο ανάλογα µε το αν δίνουν προτεραιότητα στους µεν ή στους δε. H πιο απλή λύση είναι αυτή που δίνει προτεραιότητα στους αναγνώστες: όσο υπάρχουν αναγνώστες που διαβάζουν τα περιεχόµενα του χώρου µνήµης, όλες οι διεργασίες που θέλουν να γράψουν πρέπει να περιµένουν. Aυτό µπορεί να οδηγήσει σε παρατεταµένη στέρηση για τις διεργασίες που θέλουν να γράψουν. H δεύτερη λύση δίνει προτεραιότητα στους εγγραφείς: αν ένας εγγραφέας έχει ζητήσει να γράψει τότε δεν ικανοποιούνται καινούργιες αιτήσεις για διάβασµα µέχρι να ικανοποιηθεί το αίτηµά του. H λύση αυτή είναι πιο πολύπλοκη γιατί κάνει χρήση περισσότερων δοµών ελέγχου ταυτοχρονίας, αλλά είναι και πιο αποδοτική. Aκολουθεί η υλοποίηση των δύο λύσεων. 4-12

10. Kλασσικά προβλήµατα ταυτοχρονίας (συνέχεια) program Readers_Writers1; int readcount; semaphore x, wsem; procedure Reader; while true do wait(x); readcount:=readcount+1; if readcount=1 then wait(wsem); signal(x); < διάβασε κοινή περιοχή µνήµης > wait(x); readcount:=readcount-1; if readcount=0 then signal(wsem); signal(x); end end; procedure Writer; while true do wait(wsem); < γράψε στην κοινή περιοχή µνήµης > signal(wsem); end end; readcount:=0; x:=1; wsem:=1; par Reader; Writer; parend end. 4-13

10. Kλασσικά προβλήµατα ταυτοχρονίας (συνέχεια) program Readers_Writers2; int readcount, writecount; semaphore x, y, z, rsem, wsem; procedure Reader; while true do end; wait(z); wait(rsem); wait(x); readcount:=readcount+1; if readcount=1 then wait(wsem); signal(x); signal(rsem); signal(z); < διάβασε κοινή περιοχή µνήµης > wait(x); readcount:=readcount-1; if readcount=0 then signal(wsem); signal(x); end procedure Writer; while true do end; wait(y); writecount:=writecount+1; if writecount=1 then wait(rsem); signal(y); wait(wsem); < γράψε στην κοινή περιοχή µνήµης > signal(wsem); wait(y); writecount:=writecount-1; if writecount=0 then signal(rsem); signal(y); end readcount:=0; writecount:=0; x:=1; y:=1; z:=1; rsem:=1; wsem:=1; par Reader; Writer; parend end. 4-14

10. Kλασσικά προβλήµατα ταυτοχρονίας (συνέχεια) Tο πρόβληµα των συνδαιτηµόνων φιλοσόφων αποτελεί κλασσική περίπτωση συγχρονισµού και αποφυγής αδιέξοδου. Προτάθηκε και επιλύθηκε από τον Dijkstra το 1965. H ακόλουθη λύση είναι τόσο λανθασµένη όσο και η σωστότητά της είναι προφανής: program Dining_Philosophers1; [0:4] semaphore fork; int i, j; procedure Philosopher(int i); while true do think(); wait(fork[i]); wait(fork[(i+1) mod 5]); eat(); signal(fork[(i+1) mod 5]); signal(fork[i]); end end; for j:=0 to 4 do fork[j]:=1; par Philosopher(0); Philosopher(1); Philosopher(2); Philosopher(3); Philosopher(4); parend end. 4-15

10. Kλασσικά προβλήµατα ταυτοχρονίας (συνέχεια) Tο πρόβληµα µε την προηγούµενη λύση είναι ότι αν πεινάσουν ταυτόχρονα και οι 5 φιλόσοφοι και πιάσουν το αριστερό τους πηρούνι τότε στην προσπάθειά τους να πιάσουν και το δεξί δηµιουργείται αδιέξοδο. H ακόλουθη λύση δεν δηµιουργεί αδιέξοδο γιατί επιτρέποντας µόνο σε 4 φιλόσοφους ταυτόχρονα να γευµατίσουν επιτρέπει σε τουλάχιστον ένα να έχει 2 πηρούνια. program Dining_Philosophers2; [0:4] semaphore fork; semaphore room; /* όχι δυαδικός σηµαφόρος */ int i, j; procedure Philosopher(int i); while true do think(); wait(room); wait(fork[i]); wait(fork[(i+1) mod 5]); eat(); signal(fork[(i+1) mod 5]); signal(fork[i]); signal(room); end end; for j:=0 to 4 do fork[j]:=1; room:=4; par Philosopher(0); Philosopher(1); Philosopher(2); Philosopher(3); Philosopher(4); parend end. 4-16

11. Tαυτοχρονία και αντιµετώπιση αδιέξοδου σε µερικά Λ.Σ. Tο Unix παρέχει αρκετούς µηχανισµούς για συγχρονισµό διεργασιών και διαδιεργασιακή επικοινωνία (διοχετεύσεις, µηνύµατα, σηµαφόρους, κλπ.). O πιο καινοτοµικός είναι οι διοχετεύσεις (pipes) που αποτελούν ουσιαστικά υλοποίηση του µοντέλου του παραγωγού-καταναλωτή σε συνδυασµό µε µία επέκταση της ιδέας των συρρουτινών. Tο OS/2 επίσης παρέχει αρκετούς µηχανισµούς για συγχρονισµό διεργασιών και διαδιεργασιακή επικοινωνία παρεµφερείς µε αυτών του Unix. Στην περίπτωση των σηµαφόρων, το OS/2 επιτρέπει την αναστολή µίας διεργασίας µε τρόπο που να την ενεργοποιήσει όταν συµβεί κάποιο από µία σειρά γεγονότων. Eπίσης διαχωρίζονται οι σηµαφόροι κύριας µνήµης από τους κοινούς σηµαφόρους: οι πρώτοι είναι πιο γρήγοροι αλλά παρέχουν µόνο ένα µέρος της λειτουργικότητας των δεύτερων. Tο MVS υλοποιεί τον αµοιβαίο αποκλεισµό µε χρήση κλειδωµάτων (locks) και χρήση απαρίθµησης για αποφυγή αδιέξοδου. 4-17