Αδιέξοδο μέσα OperaΣύστημα ting: Τι είναι, κυκλική αναμονή (Παραδείγματα)
⚡ Έξυπνη Σύνοψη
Το αδιέξοδο σε ένα λειτουργικό σύστημα εμφανίζεται όταν ένα σύνολο διεργασιών μπλοκάρεται επειδή η καθεμία κατέχει έναν πόρο και περιμένει έναν άλλο που κατέχει μια διαφορετική διεργασία, δημιουργώντας μια κυκλική αλυσίδα όπου καμία διεργασία δεν μπορεί να προχωρήσει.

Τι είναι το Deadlock;
Αδιέξοδο είναι μια κατάσταση που συμβαίνει σε ένα το λειτουργικό σύστημα όταν μια διεργασία εισέρχεται σε κατάσταση αναμονής επειδή μια άλλη διεργασία αναμονής κρατά τον ζητούμενο πόρο. Το αδιέξοδο είναι ένα συνηθισμένο πρόβλημα στην πολυεπεξεργασία, όπου πολλές διεργασίες μοιράζονται έναν συγκεκριμένο τύπο αμοιβαία αποκλειόμενου πόρου, γνωστό ως soft lock ή software lock.
Όταν προκύπτει αδιέξοδο, καμία από τις εμπλεκόμενες διεργασίες δεν μπορεί να συνεχιστεί, επομένως η επηρεαζόμενη εργασία σταματά μέχρι να παρέμβει το λειτουργικό σύστημα.
Παράδειγμα Αδιεξόδου
- Ένα παράδειγμα από τον πραγματικό κόσμο θα ήταν η κυκλοφορία που κινείται μόνο προς μία κατεύθυνση.
- Εδώ, μια γέφυρα θεωρείται πόρος.
- Έτσι, όταν προκύπτει ένα αδιέξοδο, μπορεί να επιλυθεί αν ένα αυτοκίνητο κάνει όπισθεν (προλάβει τους πόρους και κάνει κύλιση προς τα πίσω).
- Σε περίπτωση αδιεξόδου ενδέχεται να χρειαστεί να λάβετε αντίγραφα ασφαλείας για πολλά αυτοκίνητα.
- Έτσι, η πείνα είναι πιθανή.
Παράδειγμα αδιεξόδου
Τι είναι η κυκλική αναμονή;
Μία διεργασία περιμένει έναν πόρο που διατηρείται από μια δεύτερη διεργασία, η οποία περιμένει επίσης έναν πόρο που διατηρείται από μια τρίτη διεργασία, και ούτω καθεξής. Αυτό συνεχίζεται μέχρι η τελευταία διεργασία να περιμένει έναν πόρο που διατηρείται από την πρώτη διεργασία. Αυτό δημιουργεί μια κυκλική αλυσίδα.
Για παράδειγμα, στη Διεργασία Α εκχωρείται ο Πόρος Β ενώ ζητά τον Πόρο Α. Με τον ίδιο τρόπο, στη Διεργασία Β εκχωρείται ο Πόρος Α ενώ ζητά τον Πόρο Β. Αυτό δημιουργεί έναν κυκλικό βρόχο αναμονής.
Παράδειγμα κυκλικής αναμονής
Για παράδειγμα, ένας υπολογιστής έχει τρεις μονάδες USB και τρεις διεργασίες. Κάθε μία από τις τρεις διεργασίες διατηρεί μία από τις μονάδες USB. Έτσι, όταν κάθε διεργασία ζητά μια άλλη μονάδα δίσκου, οι τρεις διεργασίες φτάνουν σε αδιέξοδο, καθώς η καθεμία περιμένει να απελευθερωθεί μια μονάδα USB ενώ εξακολουθεί να χρησιμοποιείται. Αυτό έχει ως αποτέλεσμα μια κυκλική αλυσίδα.
Παράδειγμα κυκλικής αναμονής
Ανίχνευση αδιεξόδου στο λειτουργικό σύστημα
Ένα αδιέξοδο μπορεί να ανιχνευθεί από τον προγραμματιστή πόρων. Ένας προγραμματιστής πόρων βοηθά το λειτουργικό σύστημα να διατηρεί track όλων των πόρων που έχουν κατανεμηθεί σε διαφορετικές διεργασίες. Μόλις εντοπιστεί ένα αδιέξοδο, μπορεί να επιλυθεί με την προεκτίμηση πόρων, την επαναφορά μιας διεργασίας ή τον τερματισμό μίας ή περισσότερων από τις διεργασίες που έχουν βρεθεί σε αδιέξοδο.
Πρόληψη αδιεξόδου στο λειτουργικό σύστημα
Είναι σημαντικό να αποτρέψετε ένα αδιέξοδο προτού συμβεί. Το σύστημα ελέγχει κάθε συναλλαγή πριν εκτελεστεί για να βεβαιωθεί ότι δεν οδηγεί σε αδιέξοδο. Ακόμα και μια μικρή λειτουργία που θα μπορούσε να προκαλέσει αδιέξοδο στο μέλλον δεν επιτρέπεται ποτέ να εκτελεστεί.
Η πρόληψη αδιεξόδου είναι ένα σύνολο μεθόδων για να διασφαλιστεί ότι τουλάχιστον μία από τις τέσσερις απαραίτητες συνθήκες δεν μπορεί να ισχύει.
Χωρίς Προκατάληψη
Ένας πόρος μπορεί να απελευθερωθεί μόνο οικειοθελώς από τη διεργασία που τον κατέχει, αφού η διεργασία αυτή ολοκληρώσει την εργασία της.
- Εάν μια διεργασία που κατέχει ορισμένους πόρους ζητήσει έναν άλλο πόρο που δεν μπορεί να της ανατεθεί άμεσα, τότε όλοι οι πόροι της απελευθερώνονται.
- Οι προαποδεκτοί πόροι προστίθενται στη λίστα των πόρων για τους οποίους περιμένει η διεργασία.
- Η διαδικασία επανεκκινείται μόνο όταν μπορεί να ανακτήσει τους παλιούς πόρους της καθώς και τους νέους που ζητά.
Αμοιβαίος αποκλεισμός
Ο αμοιβαίος αποκλεισμός είναι η πλήρης μορφή του Mutex. Είναι ένας ειδικός τύπος δυαδικού κώδικα. σηματοφόρος που χρησιμοποιείται για τον έλεγχο της πρόσβασης σε έναν κοινόχρηστο πόρο. Περιλαμβάνει έναν μηχανισμό κληρονομικότητας προτεραιότητας για την αποφυγή εκτεταμένων προβλημάτων αντιστροφής προτεραιότητας και διατηρεί τις εργασίες υψηλότερης προτεραιότητας αποκλεισμένες για το συντομότερο δυνατό χρονικό διάστημα.
Οι κοινόχρηστοι πόροι, όπως τα αρχεία μόνο για ανάγνωση, δεν οδηγούν ποτέ σε αδιέξοδα, αλλά πόροι όπως οι εκτυπωτές και οι μονάδες ταινίας χρειάζονται αποκλειστική πρόσβαση από μία μόνο διεργασία.
Κρατήστε και περιμένετε
Σε αυτήν την περίπτωση, οι διεργασίες πρέπει να σταματήσουν να διατηρούν έναν ή περισσότερους πόρους ενώ ταυτόχρονα περιμένουν έναν ή περισσότερους άλλους.
Κυκλική Αναμονή
Αυτή η μέθοδος επιβάλλει μια συνολική ταξινόμηση όλων των τύπων πόρων. Η πρόληψη της κυκλικής αναμονής απαιτεί επίσης κάθε διεργασία να ζητά πόρους με αυξανόμενη σειρά απαρίθμησης.
Αποφυγή αδιεξόδου Algorithms
Είναι καλύτερο να αποφεύγετε ένα αδιέξοδο αντί να αναλαμβάνετε δράση αφού έχει προκύψει το αδιέξοδο. Η αποφυγή απαιτεί πρόσθετες πληροφορίες, όπως τον τρόπο με τον οποίο θα χρησιμοποιηθούν οι πόροι. Η αποφυγή αδιεξόδου είναι ένα χρήσιμο μοντέλο στο οποίο κάθε διεργασία δηλώνει τον μέγιστο αριθμό πόρων κάθε τύπου που μπορεί να χρειαστεί.
Αποφυγή Algorithms
Ο αλγόριθμος αποφυγής αδιεξόδου αξιολογεί δυναμικά την κατάσταση κατανομής πόρων, έτσι ώστε να μην μπορεί ποτέ να προκύψει μια κατάσταση κυκλικής αναμονής.
Για μία μόνο παρουσία ενός τύπου πόρου:
- Χρησιμοποιήστε ένα γράφημα κατανομής πόρων.
- Ένας κύκλος στο γράφημα είναι απαραίτητος και επαρκής για ένα αδιέξοδο.
Για πολλαπλές παρουσίες ενός τύπου πόρου:
- Ένας κύκλος είναι απαραίτητος αλλά όχι επαρκής για ένα αδιέξοδο.
- Χρησιμοποιήστε το Αλγόριθμος του τραπεζίτη.
Διαφορά μεταξύ λιμοκτονίας και αδιεξόδου
Ακολουθούν ορισμένες σημαντικές διαφορές μεταξύ αδιεξόδου και λιμοκτονίας:
| Αδιέξοδο | Η λιμοκτονία |
|---|---|
| Η κατάσταση αδιεξόδου προκύπτει όταν μία από τις διεργασίες μπλοκαριστεί. | Η λιμοκτονία είναι μια κατάσταση όπου όλες οι διεργασίες χαμηλής προτεραιότητας μπλοκάρονται ενώ εκτελούνται οι διεργασίες υψηλής προτεραιότητας. |
| Το αδιέξοδο είναι μια άπειρη διαδικασία. | Η πείνα είναι μια μακρά αναμονή, αλλά όχι μια ατελείωτη διαδικασία. |
| Κάθε αδιέξοδο έχει πάντα πείνα. | Κάθε λιμοκτονία δεν έχει απαραίτητα ένα αδιέξοδο. |
| Το αδιέξοδο συμβαίνει λόγω αμοιβαίου αποκλεισμού, αναμονής και αναμονής, μη προτίμησης και κυκλικής αναμονής που συμβαίνουν ταυτόχρονα. | Αυτό συμβαίνει λόγω ανεξέλεγκτης προτεραιότητας και κακής διαχείρισης πόρων. |
Πλεονεκτήματα του Deadlock
Ακολουθούν τα πλεονεκτήματα της χρήσης της μεθόδου χειρισμού αδιεξόδων:
- Αυτή η κατάσταση λειτουργεί καλά για διεργασίες που εκτελούν μία μόνο ριπή δραστηριότητας.
- Δεν απαιτείται προτίμηση για αδιέξοδο.
- Είναι μια βολική μέθοδος όταν εφαρμόζεται σε πόρους των οποίων η κατάσταση μπορεί να αποθηκευτεί και να αποκατασταθεί εύκολα.
- Είναι εφικτό να επιβληθεί μέσω ελέγχων κατά τη μεταγλώττιση.
- Δεν χρειάζεται υπολογισμό κατά τον χρόνο εκτέλεσης, καθώς το πρόβλημα λύνεται στο σχεδιασμό του συστήματος.
Μειονεκτήματα του Deadlock
Ακολουθούν τα μειονεκτήματα της χρήσης της μεθόδου χειρισμού αδιεξόδων:
- Καθυστερεί την έναρξη της διαδικασίας.
- Οι διεργασίες πρέπει να γνωρίζουν εκ των προτέρων τις μελλοντικές τους ανάγκες σε πόρους.
- Προλαμβάνει περισσότερες φορές από όσο χρειάζεται.
- Δεν επιτρέπει τα αυξητικά αιτήματα πόρων.
- Έχει εγγενείς απώλειες προτίμησης.


