Τι είναι Semaphore? Καταμέτρηση, Δυαδικοί τύποι με Παράδειγμα

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

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

  • 🔢 Ορισμός: Ένας σημαφόρος είναι μια μη αρνητική ακέραια μεταβλητή που σηματοδοτεί εάν ένας κοινόχρηστος πόρος είναι διαθέσιμος σε ανταγωνιστικά νήματα.
  • ⚙️ Δύο Operations: Η λειτουργία αναμονής (P) ζητά έναν πόρο και μειώνει τον αριθμό, ενώ η λειτουργία σήματος (V) τον απελευθερώνει και αυξάνει τον αριθμό.
  • 🔁 Τύπος μέτρησης: Ένας σημαφόρος καταμέτρησης επιτρέπει σε έναν καθορισμένο αριθμό νημάτων να χρησιμοποιούν πανομοιότυπους πόρους ταυτόχρονα.
  • 🔒 Δυαδικός τύπος: Ένας δυαδικός σημαφόρος περιορίζεται σε τιμές 0 και 1, επομένως συμπεριφέρεται σαν ένα απλό κλείδωμα για αμοιβαίο αποκλεισμό.
  • ⚠️ Ανταλλαγές: SemaphoreΤα s είναι ανεξάρτητα από μηχανές και ευέλικτα, ωστόσο διατρέχουν κίνδυνο αντιστροφής προτεραιότητας και αδιεξόδου όταν χρησιμοποιούνται εσφαλμένα.
  • 🤖 AI Assist: Οι βοηθοί μηχανικής μάθησης και κωδικοποίησης τεχνητής νοημοσύνης μπορούν να μοντελοποιήσουν την ταυτόχρονη λειτουργία και να δημιουργήσουν σωστές ακολουθίες αναμονής και σήματος.

Semaphore in Operating System

Τι είναι Semaphore?

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

Ένας σηματοφόρος είτε επιτρέπει είτε δεν επιτρέπει την πρόσβαση στον πόρο, κάτι που εξαρτάται από τον τρόπο ρύθμισης του.

Χαρακτηριστικά του Semaphore

Ακολουθούν τα χαρακτηριστικά ενός σημαφόρου:

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

Τύποι Semaphores

Τα δύο συνηθισμένα είδη σημαφόρων είναι:

  • Μετρώντας σηματοφόρους
  • Δυαδικοί σημαφόροι

Αρίθμηση Semaphores

Αυτό το είδος της Semaphore χρησιμοποιεί μια μέτρηση που βοηθά μια εργασία να αποκτηθεί ή να αποδεσμευτεί πολλές φορές. Εάν η αρχική μέτρηση = 0, ο σημαφόρος μέτρησης θα πρέπει να δημιουργηθεί σε μη διαθέσιμη κατάσταση.

Αρίθμηση Semaphores

Ωστόσο, εάν η καταμέτρηση είναι > 0, ο σηματοφόρος δημιουργείται στη διαθέσιμη κατάσταση και ο αριθμός των διακριτικών που έχει ισούται με τον αριθμό του.

Binary Semaphores

Οι δυαδικοί σημαφόροι είναι αρκετά παρόμοιοι με την καταμέτρηση σημαφόρων, αλλά η τιμή τους περιορίζεται στο 0 και το 1. Σε αυτόν τον τύπο σημαφόρου, η λειτουργία αναμονής λειτουργεί μόνο εάν σημαφόρος = 1 και η λειτουργία σήματος επιτυγχάνει όταν σημαφόρος = 0. Είναι πιο εύκολο να εφαρμοστεί από την καταμέτρηση σημαφόρων.

Binary Semaphores

Παράδειγμα Semaphore

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

Shared var mutex: semaphore = 1;
Process i
    begin
    .
    .
    P(mutex);
    execute CS;
    V(mutex);
    .
    .
    End;

Περίμενε και Signal Operaθέσεις σε Semaphores

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

Περίμενε για Operaσμού

Αυτός ο τύπος λειτουργίας σηματοφόρου σάς βοηθά να ελέγξετε την είσοδο μιας εργασίας στο κρίσιμο τμήμα. Ωστόσο, εάν η τιμή της αναμονής είναι θετική, τότε η τιμή του ορίσματος αναμονής X μειώνεται. Σε περίπτωση αρνητικής ή μηδενικής τιμής, δεν εκτελείται καμία πράξη. Ονομάζεται επίσης λειτουργία P(S).

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

P(S)
{
    while (S<=0);
    S--;
}

Signal λειτουργία

Αυτό το είδος της Semaphore η λειτουργία χρησιμοποιείται για τον έλεγχο της εξόδου μιας εργασίας από ένα κρίσιμο τμήμα. Βοηθά στην αύξηση της τιμής του ορίσματος κατά 1, το οποίο συμβολίζεται ως V(S).

P(S)
{
    while (S>=0);
    S++;
}

Αρίθμηση Semaphore έναντι δυαδικού Semaphore

Εδώ, είναι μερικές σημαντικές διαφορές μεταξύ μέτρησης και δυαδικού σηματοφόρου:

Αρίθμηση Semaphore Binary Semaphore
Κανένας αμοιβαίος αποκλεισμός Αμοιβαίος αποκλεισμός
Οποιαδήποτε ακέραια τιμή Τιμή μόνο 0 και 1
Περισσότερες από μία θέσεις Μόνο μια υποδοχή
Παρέχετε ένα σύνολο Διαδικασιών Διαθέτει μηχανισμό αμοιβαίου αποκλεισμού.

Διαφορά μεταξύ Semaphore εναντίον Mutex

Ο παρακάτω πίνακας συγκρίνει ένα σημαφόρος με mutex σε διάφορες παραμέτρους:

Παράμετροι Semaphore Mutex
Μηχανισμός Είναι ένας τύπος μηχανισμού σηματοδότησης. Είναι μηχανισμός κλειδώματος.
Τύπος δεδομένων Semaphore είναι μια ακέραια μεταβλητή. Το Mutex είναι απλώς ένα αντικείμενο.
Τροποποίηση Οι λειτουργίες αναμονής και σήματος μπορούν να τροποποιήσουν έναν σηματοφόρο. Τροποποιείται μόνο από τη διαδικασία που μπορεί να ζητήσει ή να αποδεσμεύσει έναν πόρο.
Διαχείριση πόρων Εάν κανένας πόρος δεν είναι ελεύθερος, τότε η διαδικασία απαιτεί έναν πόρο που θα πρέπει να εκτελέσει τη λειτουργία αναμονής. Θα πρέπει να περιμένει έως ότου η καταμέτρηση του σηματοφόρου είναι μεγαλύτερη από 0. Εάν είναι κλειδωμένο, η διαδικασία πρέπει να περιμένει. Η διαδικασία πρέπει να κρατηθεί σε ουρά. Αυτό χρειάζεται πρόσβαση μόνο όταν το mutex είναι ξεκλείδωτο.
Νήμα Μπορείτε να έχετε πολλά νήματα προγράμματος. Μπορείτε να έχετε πολλά νήματα προγράμματος στο mutex αλλά όχι ταυτόχρονα.
Ιδιοκτησία Η τιμή μπορεί να αλλάξει με οποιαδήποτε διαδικασία που απελευθερώνει ή αποκτά τον πόρο. Το κλείδωμα αντικειμένου απελευθερώνεται μόνο από τη διαδικασία, η οποία έχει αποκτήσει το κλείδωμα σε αυτό.
Τύποι Τύποι Semaphore μετρούν σηματοφόρο και δυαδικό σηματοφόρο. Το Mutex δεν έχει υποτύπους.
Operaσμού Semaphore Η τιμή τροποποιείται χρησιμοποιώντας τη λειτουργία αναμονής () και σήματος (). Το αντικείμενο Mutex είναι κλειδωμένο ή ξεκλείδωτο.
Κατάληψη πόρων Είναι κατειλημμένο εάν χρησιμοποιούνται όλοι οι πόροι και η διαδικασία που ζητά πόρο εκτελεί τη λειτουργία αναμονής () και μπλοκάρεται έως ότου ο αριθμός σηματοφόρων γίνει >1. Σε περίπτωση που το αντικείμενο είναι ήδη κλειδωμένο, η διαδικασία που ζητά πόρους περιμένει και βρίσκεται σε ουρά από το σύστημα πριν απελευθερωθεί το κλείδωμα.

Πλεονεκτήματα της Semaphores

Εδώ, είναι τα πλεονεκτήματα/πλεονεκτήματα της χρήσης Semaphore:

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

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

Εδώ, είναι τα μειονεκτήματα/μειονεκτήματα του σηματοφορέα:

  • Ένας από τους μεγαλύτερους περιορισμούς ενός σηματοφόρου είναι η αντιστροφή προτεραιότητας.
  • Το λειτουργικό σύστημα πρέπει να διατηρεί track όλων των κλήσεων για αναμονή και σηματοδότηση σηματοδότη.
  • Η χρήση τους δεν επιβάλλεται ποτέ, αλλά γίνεται μόνο με σύμβαση.
  • Προκειμένου να αποφευχθούν αδιέξοδα στο σηματοφόρο, το Wait και Signal οι λειτουργίες πρέπει να εκτελούνται με τη σωστή σειρά.
  • Semaphore Ο προγραμματισμός είναι περίπλοκος, επομένως υπάρχουν πιθανότητες να μην επιτευχθεί αμοιβαίος αποκλεισμός.
  • Δεν είναι επίσης μια πρακτική μέθοδος για χρήση σε μεγάλη κλίμακα καθώς η χρήση τους οδηγεί σε απώλεια της αρθρωτής ικανότητας.
  • Semaphore είναι πιο επιρρεπής σε σφάλματα προγραμματιστή.
  • Μπορεί να προκαλέσει αδιέξοδο ή παραβίαση αμοιβαίου αποκλεισμού λόγω σφάλματος προγραμματιστή.

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

Ο Edsger Dijkstra εισήγαγε τους σημαφόρους το 1965. Οι λειτουργίες αναμονής και σήματος ονομάζονται επίσης P και V, από τις ολλανδικές λέξεις proberen (δοκιμή) και verhogen (αύξηση).

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

Semaphores συντονίζουν κλασικά προβλήματα ταυτοχρονισμού όπως ο παραγωγός-καταναλωτής (περιορισμένος-buffer) και ο αναγνώστης-συγγραφέας. Ελέγχουν την πρόσβαση σε μια περιορισμένη ομάδα πανομοιότυπων πόρων, προστατεύοντας τα κοινόχρηστα δεδομένα.

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

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

Οι περισσότερες σύγχρονες πλατφόρμες διαθέτουν σημαφόρους: POSIX sem_t σε C, το Semaphore τάξη μέσα Javaκαι σπειροτόμηση.Semaphore in PythonΟι προγραμματιστές σπάνια κατασκευάζουν ένα από την αρχή.

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

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

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