Διαδικασία SyncΧρονισμός: Πρόβλημα κρίσιμου τμήματος στο ΛΣ

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

Διαδικασία SyncΗ χρονοποίηση είναι το έργο του συντονισμού της εκτέλεσης των διεργασιών, έτσι ώστε να μην έχουν πρόσβαση δύο διεργασίες στα ίδια κοινόχρηστα δεδομένα ή πόρους ταυτόχρονα. Αποτρέπει την ασυνέπεια δεδομένων σε συστήματα πολλαπλών διεργασιών ελέγχοντας την είσοδο στο κρίσιμο τμήμα.

  • 🔗 Ορισμός: SyncΗ χρονοποίηση συντονίζει τις διαδικασίες έτσι ώστε να μην έχουν πρόσβαση σε κοινόχρηστα δεδομένα ταυτόχρονα.
  • ⚠️ Γιατί χρειάζεται: Η μη συντονισμένη πρόσβαση στην κοινόχρηστη μνήμη οδηγεί σε ασυνεπή, εσφαλμένα δεδομένα.
  • 🧩 Κρίσιμο τμήμα: Τα τμήματα εισόδου, κρίσιμης, εξόδου και υπόλοιπης δομής δομούν την ασφαλή πρόσβαση σε κοινόχρηστες μεταβλητές.
  • 📏 Τρεις κανόνες: Μια έγκυρη λύση πρέπει να ικανοποιεί τον αμοιβαίο αποκλεισμό, την πρόοδο και την οριοθετημένη αναμονή.
  • Λύσεις: Ο αλγόριθμος του Peterson, το υλικό συγχρονισμού, τα κλειδώματα mutex και οι σημαφόροι λύνουν το πρόβλημα.
  • 🚦 Semaphore: Μια κοινόχρηστη μη αρνητική μεταβλητή που σηματοδοτείται χρησιμοποιώντας τις λειτουργίες atomic wait() και signal().

Διαδικασία Syncχρονισμός

Τι είναι Διαδικασία Syncχρονισμός;

Διαδικασία Syncχρονισμός είναι το καθήκον του συντονισμού της εκτέλεσης των διαδικασιών με τρόπο που καμία διεργασία δεν μπορεί να έχει πρόσβαση στα ίδια κοινά δεδομένα και πόρους.

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

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

Πώς Διαδικασία SyncΧρονισμός Έργα;

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

Διαδικασία SyncΧρονισμός Έργα

Ενότητες ενός Προγράμματος

Ακολουθούν τέσσερα βασικά στοιχεία του κρίσιμου τμήματος:

  • Ενότητα εισόδου: Είναι μέρος της διαδικασίας που αποφασίζει την είσοδο μιας συγκεκριμένης διαδικασίας.
  • Κρίσιμο τμήμα: Αυτό το τμήμα επιτρέπει σε μία διεργασία να εισάγει και να τροποποιεί την κοινόχρηστη μεταβλητή.
  • Ενότητα εξόδου: Η ενότητα Έξοδος επιτρέπει στις άλλες διεργασίες που περιμένουν στην Ενότητα Εισόδου να εισέλθουν στην Κρίσιμη Ενότητα. Ελέγχει επίσης ότι μια διεργασία που ολοκλήρωσε την εκτέλεσή της θα πρέπει να αφαιρεθεί μέσω αυτής της Ενότητας.
  • Υπόλοιπο τμήμα: Όλα τα άλλα μέρη του Code, τα οποία δεν βρίσκονται στην Κρίσιμη Ενότητα, την Ενότητα Εισόδου και την Ενότητα Εξόδου, είναι γνωστά ως Ενότητα Υπόλοιπου.

Τι είναι το πρόβλημα της κρίσιμης τομής;

Μια κρίσιμη ενότητα είναι ένα τμήμα κώδικα στο οποίο μπορεί να έχει πρόσβαση μια μεμονωμένη διεργασία σε μια συγκεκριμένη χρονική στιγμή. Η ενότητα αποτελείται από κοινόχρηστους πόρους δεδομένων στους οποίους απαιτείται πρόσβαση από άλλες διεργασίες.

  • Η καταχώρηση στο κρίσιμο τμήμα αντιμετωπίζεται από τη συνάρτηση wait() και αναπαρίσταται ως P().
  • Η έξοδος από ένα κρίσιμο τμήμα ελέγχεται από τη συνάρτηση signal(), που αναπαρίσταται ως V().

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

Κανόνες για το κρίσιμο τμήμα

Η κρίσιμη ενότητα πρέπει να επιβάλλει και τους τρεις κανόνες:

  • Αμοιβαίος αποκλεισμός: Ο αμοιβαίος αποκλεισμός είναι ένας ειδικός τύπος δυαδικού σηματοφόρου που χρησιμοποιείται για τον έλεγχο της πρόσβασης στον κοινόχρηστο πόρο. Περιλαμβάνει έναν μηχανισμό κληρονομικότητας προτεραιότητας για την αποφυγή προβλημάτων αντιστροφής εκτεταμένης προτεραιότητας. Δεν μπορούν να εκτελεστούν περισσότερες από μία διεργασίες στο κρίσιμο τμήμα της ταυτόχρονα.
  • Πρόοδος: Αυτή η λύση χρησιμοποιείται όταν κανείς δεν βρίσκεται στο κρίσιμο τμήμα και κάποιος θέλει να εισέλθει. Στη συνέχεια, οι διεργασίες που δεν βρίσκονται στο υπόλοιπο τμήμα τους θα πρέπει να αποφασίσουν ποιος πρέπει να εισέλθει, σε πεπερασμένο χρόνο.
  • Δεσμευμένη αναμονή: Όταν μια διεργασία υποβάλλει αίτημα για είσοδο στο κρίσιμο τμήμα, υπάρχει ένα συγκεκριμένο όριο στον αριθμό των διεργασιών που μπορούν να εισέλθουν στο κρίσιμο τμήμα τους. Έτσι, όταν επιτευχθεί το όριο, το σύστημα πρέπει να επιτρέψει στο αίτημα προς τη διεργασία να εισέλθει στο κρίσιμο τμήμα της.

Λύσεις στο κρίσιμο τμήμα

Σε εξέλιξη Syncχρονικοποίηση, το κρίσιμο τμήμα παίζει τον κύριο ρόλο, επομένως το πρόβλημα πρέπει να λυθεί.

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

Λύση Peterson

Η λύση του Peterson είναι μια ευρέως χρησιμοποιούμενη λύση σε προβλήματα κρίσιμων τομών. Αυτός ο αλγόριθμος αναπτύχθηκε από έναν επιστήμονα υπολογιστών ονόματι Peterson, γι' αυτό και ονομάζεται λύση Peterson.

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

Παράδειγμα

Λύσεις στο κρίσιμο τμήμα

PROCESS Pi
FLAG[i] = true
while( (turn != i) AND (CS is !free) ){ wait;
}
CRITICAL SECTION FLAG[i] = false
turn = j; //choose another process to go to CS
  • Υποθέστε ότι υπάρχουν N διεργασίες (P1, P2, … PN) και κάθε διεργασία σε κάποια χρονική στιγμή απαιτεί να εισέλθει στο Κρίσιμο Τμήμα.
  • Διατηρείται ένας πίνακας FLAG[] μεγέθους N, ο οποίος από προεπιλογή είναι false. Έτσι, κάθε φορά που μια διεργασία απαιτεί να εισέλθει στην κρίσιμη ενότητα, πρέπει να ορίσει τη σημαία της ως true. Για παράδειγμα, εάν η Pi θέλει να εισέλθει, θα ορίσει FLAG[i]=TRUE.
  • Μια άλλη μεταβλητή που ονομάζεται TURN υποδεικνύει τον αριθμό διεργασίας που περιμένει αυτήν τη στιγμή να εισέλθει στο CS.
  • Η διαδικασία που εισέρχεται στο κρίσιμο τμήμα κατά την έξοδο θα άλλαζε το TURN σε έναν άλλο αριθμό από τη λίστα των έτοιμων διεργασιών.
  • Παράδειγμα: ο γύρος είναι 2, τότε ο P2 εισέρχεται στο Κρίσιμο τμήμα και κατά την έξοδο από τον γύρο = 3 και επομένως ο P3 βγαίνει από τον βρόχο αναμονής.

SyncΧρονισμός Υλικό

Μερικές φορές τα προβλήματα του Κρίσιμου Τμήματος επιλύονται και μέσω υλικού. Ορισμένα λειτουργικά συστήματα προσφέρουν μια λειτουργία κλειδώματος όπου μια Διεργασία αποκτά ένα κλείδωμα όταν εισέρχεται στο Κρίσιμο τμήμα και το απελευθερώνει αφού το εγκαταλείψει.

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

Κλειδαριές Mutex

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

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

Semaphore Λύση

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

Χρησιμοποιεί δύο ατομικές λειτουργίες: 1) αναμονή και 2) σήμα για τον συγχρονισμό της διεργασίας.

Παράδειγμα

WAIT ( S ):
while ( S <= 0 );
S = S - 1;
SIGNAL ( S ):
S = S + 1;

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

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

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

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

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

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

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