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

Τι είναι Semaphore?
Semaphore είναι απλώς μια μεταβλητή που δεν είναι αρνητική και μοιράζεται μεταξύ των νημάτων. Ένας σηματοφόρος είναι ένας μηχανισμός σηματοδότησης και ένα νήμα που περιμένει σε έναν σηματοφόρο μπορεί να σηματοδοτηθεί από ένα άλλο νήμα. Χρησιμοποιεί δύο ατομικές λειτουργίες, 1) Αναμονή και 2) Signal για τον συγχρονισμό της διαδικασίας.
Ένας σηματοφόρος είτε επιτρέπει είτε δεν επιτρέπει την πρόσβαση στον πόρο, κάτι που εξαρτάται από τον τρόπο ρύθμισης του.
Χαρακτηριστικά του Semaphore
Ακολουθούν τα χαρακτηριστικά ενός σημαφόρου:
- Είναι ένας μηχανισμός που μπορεί να χρησιμοποιηθεί για να παρέχει συγχρονισμό εργασιών.
- Είναι ένας μηχανισμός συγχρονισμού χαμηλού επιπέδου.
- Semaphore θα έχει πάντα μια μη αρνητική ακέραια τιμή.
- Semaphore μπορεί να υλοποιηθεί χρησιμοποιώντας δοκιμαστικές λειτουργίες και διακοπές, οι οποίες θα πρέπει να εκτελεστούν χρησιμοποιώντας περιγραφείς αρχείων.
Τύποι Semaphores
Τα δύο συνηθισμένα είδη σημαφόρων είναι:
- Μετρώντας σηματοφόρους
- Δυαδικοί σημαφόροι
Αρίθμηση Semaphores
Αυτό το είδος της Semaphore χρησιμοποιεί μια μέτρηση που βοηθά μια εργασία να αποκτηθεί ή να αποδεσμευτεί πολλές φορές. Εάν η αρχική μέτρηση = 0, ο σημαφόρος μέτρησης θα πρέπει να δημιουργηθεί σε μη διαθέσιμη κατάσταση.
Ωστόσο, εάν η καταμέτρηση είναι > 0, ο σηματοφόρος δημιουργείται στη διαθέσιμη κατάσταση και ο αριθμός των διακριτικών που έχει ισούται με τον αριθμό του.
Binary Semaphores
Οι δυαδικοί σημαφόροι είναι αρκετά παρόμοιοι με την καταμέτρηση σημαφόρων, αλλά η τιμή τους περιορίζεται στο 0 και το 1. Σε αυτόν τον τύπο σημαφόρου, η λειτουργία αναμονής λειτουργεί μόνο εάν σημαφόρος = 1 και η λειτουργία σήματος επιτυγχάνει όταν σημαφόρος = 0. Είναι πιο εύκολο να εφαρμοστεί από την καταμέτρηση σημαφόρων.
Παράδειγμα 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 είναι πιο επιρρεπής σε σφάλματα προγραμματιστή.
- Μπορεί να προκαλέσει αδιέξοδο ή παραβίαση αμοιβαίου αποκλεισμού λόγω σφάλματος προγραμματιστή.


