Αδιέξοδο μέσα OperaΣύστημα ting: Τι είναι, κυκλική αναμονή (Παραδείγματα)

⚡ Έξυπνη Σύνοψη

Το αδιέξοδο σε ένα λειτουργικό σύστημα εμφανίζεται όταν ένα σύνολο διεργασιών μπλοκάρεται επειδή η καθεμία κατέχει έναν πόρο και περιμένει έναν άλλο που κατέχει μια διαφορετική διεργασία, δημιουργώντας μια κυκλική αλυσίδα όπου καμία διεργασία δεν μπορεί να προχωρήσει.

  • 🔒 Ορισμός: Ένα αδιέξοδο παγώνει διεργασίες που η καθεμία κατέχει έναν πόρο ενώ περιμένουν η μία την άλλη.
  • 🧩 Τέσσερις προϋποθέσεις: Ο αμοιβαίος αποκλεισμός, η αναμονή, η μη προτίμηση και η κυκλική αναμονή πρέπει όλα να ισχύουν μαζί.
  • 🔁 Κυκλική αναμονή: Οι διεργασίες σχηματίζουν μια κλειστή αλυσίδα, όπου η καθεμία περιμένει έναν πόρο που κατέχει η επόμενη.
  • Πρόληψη: Η παραβίαση οποιασδήποτε από τις τέσσερις συνθήκες αποτρέπει τη δημιουργία αδιεξόδου.
  • 🏦 Αποφυγή: Ο αλγόριθμος του Banker ελέγχει τα αιτήματα πόρων για να διατηρεί το σύστημα σε ασφαλή κατάσταση.
  • 🤖 Γωνία Τεχνητής Νοημοσύνης: Η μηχανική μάθηση ανιχνεύει μοτίβα αδιεξόδου και το Copilot βοηθά στη σύνταξη και την αναθεώρηση κώδικα κλειδώματος.

Αδιέξοδο μέσα Operating System

Τι είναι το Deadlock;

Αδιέξοδο είναι μια κατάσταση που συμβαίνει σε ένα το λειτουργικό σύστημα όταν μια διεργασία εισέρχεται σε κατάσταση αναμονής επειδή μια άλλη διεργασία αναμονής κρατά τον ζητούμενο πόρο. Το αδιέξοδο είναι ένα συνηθισμένο πρόβλημα στην πολυεπεξεργασία, όπου πολλές διεργασίες μοιράζονται έναν συγκεκριμένο τύπο αμοιβαία αποκλειόμενου πόρου, γνωστό ως soft lock ή software lock.

Όταν προκύπτει αδιέξοδο, καμία από τις εμπλεκόμενες διεργασίες δεν μπορεί να συνεχιστεί, επομένως η επηρεαζόμενη εργασία σταματά μέχρι να παρέμβει το λειτουργικό σύστημα.

Παράδειγμα Αδιεξόδου

  • Ένα παράδειγμα από τον πραγματικό κόσμο θα ήταν η κυκλοφορία που κινείται μόνο προς μία κατεύθυνση.
  • Εδώ, μια γέφυρα θεωρείται πόρος.
  • Έτσι, όταν προκύπτει ένα αδιέξοδο, μπορεί να επιλυθεί αν ένα αυτοκίνητο κάνει όπισθεν (προλάβει τους πόρους και κάνει κύλιση προς τα πίσω).
  • Σε περίπτωση αδιεξόδου ενδέχεται να χρειαστεί να λάβετε αντίγραφα ασφαλείας για πολλά αυτοκίνητα.
  • Έτσι, η πείνα είναι πιθανή.

Παράδειγμα Αδιεξόδου

Παράδειγμα αδιεξόδου

Τι είναι η κυκλική αναμονή;

Μία διεργασία περιμένει έναν πόρο που διατηρείται από μια δεύτερη διεργασία, η οποία περιμένει επίσης έναν πόρο που διατηρείται από μια τρίτη διεργασία, και ούτω καθεξής. Αυτό συνεχίζεται μέχρι η τελευταία διεργασία να περιμένει έναν πόρο που διατηρείται από την πρώτη διεργασία. Αυτό δημιουργεί μια κυκλική αλυσίδα.

Για παράδειγμα, στη Διεργασία Α εκχωρείται ο Πόρος Β ενώ ζητά τον Πόρο Α. Με τον ίδιο τρόπο, στη Διεργασία Β εκχωρείται ο Πόρος Α ενώ ζητά τον Πόρο Β. Αυτό δημιουργεί έναν κυκλικό βρόχο αναμονής.

Παράδειγμα κυκλικής αναμονής

Για παράδειγμα, ένας υπολογιστής έχει τρεις μονάδες USB και τρεις διεργασίες. Κάθε μία από τις τρεις διεργασίες διατηρεί μία από τις μονάδες USB. Έτσι, όταν κάθε διεργασία ζητά μια άλλη μονάδα δίσκου, οι τρεις διεργασίες φτάνουν σε αδιέξοδο, καθώς η καθεμία περιμένει να απελευθερωθεί μια μονάδα USB ενώ εξακολουθεί να χρησιμοποιείται. Αυτό έχει ως αποτέλεσμα μια κυκλική αλυσίδα.

Παράδειγμα κυκλικής αναμονής

Παράδειγμα κυκλικής αναμονής

Ανίχνευση αδιεξόδου στο λειτουργικό σύστημα

Ένα αδιέξοδο μπορεί να ανιχνευθεί από τον προγραμματιστή πόρων. Ένας προγραμματιστής πόρων βοηθά το λειτουργικό σύστημα να διατηρεί track όλων των πόρων που έχουν κατανεμηθεί σε διαφορετικές διεργασίες. Μόλις εντοπιστεί ένα αδιέξοδο, μπορεί να επιλυθεί με την προεκτίμηση πόρων, την επαναφορά μιας διεργασίας ή τον τερματισμό μίας ή περισσότερων από τις διεργασίες που έχουν βρεθεί σε αδιέξοδο.

Πρόληψη αδιεξόδου στο λειτουργικό σύστημα

Είναι σημαντικό να αποτρέψετε ένα αδιέξοδο προτού συμβεί. Το σύστημα ελέγχει κάθε συναλλαγή πριν εκτελεστεί για να βεβαιωθεί ότι δεν οδηγεί σε αδιέξοδο. Ακόμα και μια μικρή λειτουργία που θα μπορούσε να προκαλέσει αδιέξοδο στο μέλλον δεν επιτρέπεται ποτέ να εκτελεστεί.

Η πρόληψη αδιεξόδου είναι ένα σύνολο μεθόδων για να διασφαλιστεί ότι τουλάχιστον μία από τις τέσσερις απαραίτητες συνθήκες δεν μπορεί να ισχύει.

Χωρίς Προκατάληψη

Ένας πόρος μπορεί να απελευθερωθεί μόνο οικειοθελώς από τη διεργασία που τον κατέχει, αφού η διεργασία αυτή ολοκληρώσει την εργασία της.

  • Εάν μια διεργασία που κατέχει ορισμένους πόρους ζητήσει έναν άλλο πόρο που δεν μπορεί να της ανατεθεί άμεσα, τότε όλοι οι πόροι της απελευθερώνονται.
  • Οι προαποδεκτοί πόροι προστίθενται στη λίστα των πόρων για τους οποίους περιμένει η διεργασία.
  • Η διαδικασία επανεκκινείται μόνο όταν μπορεί να ανακτήσει τους παλιούς πόρους της καθώς και τους νέους που ζητά.

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

Ο αμοιβαίος αποκλεισμός είναι η πλήρης μορφή του Mutex. Είναι ένας ειδικός τύπος δυαδικού κώδικα. σηματοφόρος που χρησιμοποιείται για τον έλεγχο της πρόσβασης σε έναν κοινόχρηστο πόρο. Περιλαμβάνει έναν μηχανισμό κληρονομικότητας προτεραιότητας για την αποφυγή εκτεταμένων προβλημάτων αντιστροφής προτεραιότητας και διατηρεί τις εργασίες υψηλότερης προτεραιότητας αποκλεισμένες για το συντομότερο δυνατό χρονικό διάστημα.

Οι κοινόχρηστοι πόροι, όπως τα αρχεία μόνο για ανάγνωση, δεν οδηγούν ποτέ σε αδιέξοδα, αλλά πόροι όπως οι εκτυπωτές και οι μονάδες ταινίας χρειάζονται αποκλειστική πρόσβαση από μία μόνο διεργασία.

Κρατήστε και περιμένετε

Σε αυτήν την περίπτωση, οι διεργασίες πρέπει να σταματήσουν να διατηρούν έναν ή περισσότερους πόρους ενώ ταυτόχρονα περιμένουν έναν ή περισσότερους άλλους.

Κυκλική Αναμονή

Αυτή η μέθοδος επιβάλλει μια συνολική ταξινόμηση όλων των τύπων πόρων. Η πρόληψη της κυκλικής αναμονής απαιτεί επίσης κάθε διεργασία να ζητά πόρους με αυξανόμενη σειρά απαρίθμησης.

Αποφυγή αδιεξόδου Algorithms

Είναι καλύτερο να αποφεύγετε ένα αδιέξοδο αντί να αναλαμβάνετε δράση αφού έχει προκύψει το αδιέξοδο. Η αποφυγή απαιτεί πρόσθετες πληροφορίες, όπως τον τρόπο με τον οποίο θα χρησιμοποιηθούν οι πόροι. Η αποφυγή αδιεξόδου είναι ένα χρήσιμο μοντέλο στο οποίο κάθε διεργασία δηλώνει τον μέγιστο αριθμό πόρων κάθε τύπου που μπορεί να χρειαστεί.

Αποφυγή Algorithms

Ο αλγόριθμος αποφυγής αδιεξόδου αξιολογεί δυναμικά την κατάσταση κατανομής πόρων, έτσι ώστε να μην μπορεί ποτέ να προκύψει μια κατάσταση κυκλικής αναμονής.

Για μία μόνο παρουσία ενός τύπου πόρου:

  • Χρησιμοποιήστε ένα γράφημα κατανομής πόρων.
  • Ένας κύκλος στο γράφημα είναι απαραίτητος και επαρκής για ένα αδιέξοδο.

Για πολλαπλές παρουσίες ενός τύπου πόρου:

Διαφορά μεταξύ λιμοκτονίας και αδιεξόδου

Ακολουθούν ορισμένες σημαντικές διαφορές μεταξύ αδιεξόδου και λιμοκτονίας:

Αδιέξοδο Η λιμοκτονία
Η κατάσταση αδιεξόδου προκύπτει όταν μία από τις διεργασίες μπλοκαριστεί. Η λιμοκτονία είναι μια κατάσταση όπου όλες οι διεργασίες χαμηλής προτεραιότητας μπλοκάρονται ενώ εκτελούνται οι διεργασίες υψηλής προτεραιότητας.
Το αδιέξοδο είναι μια άπειρη διαδικασία. Η πείνα είναι μια μακρά αναμονή, αλλά όχι μια ατελείωτη διαδικασία.
Κάθε αδιέξοδο έχει πάντα πείνα. Κάθε λιμοκτονία δεν έχει απαραίτητα ένα αδιέξοδο.
Το αδιέξοδο συμβαίνει λόγω αμοιβαίου αποκλεισμού, αναμονής και αναμονής, μη προτίμησης και κυκλικής αναμονής που συμβαίνουν ταυτόχρονα. Αυτό συμβαίνει λόγω ανεξέλεγκτης προτεραιότητας και κακής διαχείρισης πόρων.

Πλεονεκτήματα του Deadlock

Ακολουθούν τα πλεονεκτήματα της χρήσης της μεθόδου χειρισμού αδιεξόδων:

  • Αυτή η κατάσταση λειτουργεί καλά για διεργασίες που εκτελούν μία μόνο ριπή δραστηριότητας.
  • Δεν απαιτείται προτίμηση για αδιέξοδο.
  • Είναι μια βολική μέθοδος όταν εφαρμόζεται σε πόρους των οποίων η κατάσταση μπορεί να αποθηκευτεί και να αποκατασταθεί εύκολα.
  • Είναι εφικτό να επιβληθεί μέσω ελέγχων κατά τη μεταγλώττιση.
  • Δεν χρειάζεται υπολογισμό κατά τον χρόνο εκτέλεσης, καθώς το πρόβλημα λύνεται στο σχεδιασμό του συστήματος.

Μειονεκτήματα του Deadlock

Ακολουθούν τα μειονεκτήματα της χρήσης της μεθόδου χειρισμού αδιεξόδων:

  • Καθυστερεί την έναρξη της διαδικασίας.
  • Οι διεργασίες πρέπει να γνωρίζουν εκ των προτέρων τις μελλοντικές τους ανάγκες σε πόρους.
  • Προλαμβάνει περισσότερες φορές από όσο χρειάζεται.
  • Δεν επιτρέπει τα αυξητικά αιτήματα πόρων.
  • Έχει εγγενείς απώλειες προτίμησης.

Συχνές Ερωτήσεις

Ένα αδιέξοδο χρειάζεται να ισχύει ταυτόχρονα τέσσερις συνθήκες Coffman: αμοιβαίος αποκλεισμός, διατήρηση και αναμονή, μηδενική προτίμηση και κυκλική αναμονή. Η αφαίρεση οποιασδήποτε από αυτές τις συνθήκες αποτρέπει τη δημιουργία αδιεξόδου.

Η πρόληψη καταργεί μία από τις τέσσερις συνθήκες εκ των προτέρων, επομένως δεν μπορεί ποτέ να δημιουργηθεί αδιέξοδο. Η αποφυγή επιτρέπει τις συνθήκες αλλά χρησιμοποιεί ελέγχους κατά τον χρόνο εκτέλεσης, όπως το Αλγόριθμος του τραπεζίτη, για να διατηρείται το σύστημα σε ασφαλή κατάσταση.

Σε ένα αδιέξοδο, οι μπλοκαρισμένες διεργασίες σταματούν εντελώς και δεν αλλάζουν ποτέ κατάσταση. livelock, οι διεργασίες αλλάζουν συνεχώς κατάσταση και χρησιμοποιούν την CPU, αλλά εξακολουθούν να μην σημειώνουν πρόοδο. Το Livelock είναι μια ειδική περίπτωση έλλειψης πόρων.

Τα περισσότερα συστήματα γενικής χρήσης, συμπεριλαμβανομένων Windows και Linux, χρησιμοποιήστε τον αλγόριθμο στρουθοκαμήλου και απλώς αγνοήστε τα σπάνια αδιέξοδα, επειδή η πρόληψη είναι δαπανηρή. Οι βάσεις δεδομένων και τα συστήματα πραγματικού χρόνου εκτελούν αντ' αυτού ενεργές ρουτίνες ανίχνευσης και ανάκτησης.

Ένα γράφημα κατανομής πόρων αντιστοιχίζει διεργασίες και πόρους ως κόμβους που συνδέονται μέσω ακμών αιτήματος και ανάθεσης. Ένας κύκλος στο γράφημα σηματοδοτεί ένα πιθανό αδιέξοδο. Με τους πόρους μίας μόνο παρουσίας, ένας κύκλος σημαίνει πάντα ότι υπάρχει αδιέξοδο.

Όχι. Ένα πραγματικό αδιέξοδο είναι μόνιμο, επειδή οι αποκλεισμένες διεργασίες δεν απελευθερώνουν ποτέ τους πόρους τους από μόνες τους. Το λειτουργικό σύστημα πρέπει να το λύσει προκαταλαμβάνοντας έναν πόρο, επαναφέροντας ή τερματίζοντας μία από τις διεργασίες.

Τα μοντέλα μηχανικής μάθησης μαθαίνουν μοτίβα αιτημάτων πόρων για να προβλέπουν και να επισημαίνουν αδιέξοδα πριν αυτά συμβούν. Οι προγραμματιστές τεχνητής νοημοσύνης μπορούν να αναδιατάξουν τα αιτήματα ή να ρυθμίσουν τις πολιτικές κλειδώματος, κάτι που είναι χρήσιμο σε βάσεις δεδομένων, πλατφόρμες cloud και κατανεμημένα συστήματα.

Ναι. Το GitHub Copilot μπορεί να εντοπίσει επικίνδυνη σειρά κλειδαριών, να προτείνει συνεπή λήψη κλειδαριών και να δημιουργήσει δοκιμές που αποκαλύπτουν αδιέξοδα. Αντιμετωπίστε την έξοδό του ως πρώτο πέρασμα και εξακολουθήστε να επαληθεύετε τη λογική ταυτόχρονης λειτουργίας με τα κατάλληλα εργαλεία ανάλυσης.

Συνοψίστε αυτήν την ανάρτηση με: