Τι είναι 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).
Αφού μειωθεί η τιμή του σηματοφόρου, η οποία γίνεται αρνητική, η εντολή διατηρείται μέχρι να ικανοποιηθούν οι απαιτούμενες συνθήκες.
Copy CodeP(S) { while (S<=0); S--; }
Signal λειτουργία
Αυτό το είδος της Semaphore η λειτουργία χρησιμοποιείται για τον έλεγχο της εξόδου μιας εργασίας από ένα κρίσιμο τμήμα. Βοηθά στην αύξηση της τιμής του ορίσματος κατά 1, το οποίο συμβολίζεται ως V(S).
Copy CodeP(S) { while (S>=0); S++; }
Αρίθμηση Semaphore έναντι δυαδικού Semaphore
Εδώ, είναι μερικές σημαντικές διαφορές μεταξύ μέτρησης και δυαδικού σηματοφόρου:
Αρίθμηση Semaphore | Binary Semaphore |
---|---|
Κανένας αμοιβαίος αποκλεισμός | Αμοιβαίος αποκλεισμός |
Οποιαδήποτε ακέραια τιμή | Τιμή μόνο 0 και 1 |
Περισσότερες από μία θέσεις | Μόνο μια υποδοχή |
Παρέχετε ένα σύνολο Διαδικασιών | Διαθέτει μηχανισμό αμοιβαίου αποκλεισμού. |
Διαφορά μεταξύ Semaphore εναντίον Mutex
παράμετροι | Semaphore | Mutex |
---|---|---|
Μηχανισμός | Είναι ένας τύπος μηχανισμού σηματοδότησης. | Είναι μηχανισμός κλειδώματος. |
Τύπος δεδομένων | Semaphore είναι μια ακέραια μεταβλητή. | Το Mutex είναι απλώς ένα αντικείμενο. |
Τροποποίηση | Οι λειτουργίες αναμονής και σήματος μπορούν να τροποποιήσουν έναν σηματοφόρο. | Τροποποιείται μόνο από τη διαδικασία που μπορεί να ζητήσει ή να αποδεσμεύσει έναν πόρο. |
Διαχείριση πόρων | Εάν κανένας πόρος δεν είναι ελεύθερος, τότε η διαδικασία απαιτεί έναν πόρο που θα πρέπει να εκτελέσει τη λειτουργία αναμονής. Θα πρέπει να περιμένει έως ότου η καταμέτρηση του σηματοφόρου είναι μεγαλύτερη από 0. | Εάν είναι κλειδωμένο, η διαδικασία πρέπει να περιμένει. Η διαδικασία πρέπει να κρατηθεί σε ουρά. Αυτό χρειάζεται πρόσβαση μόνο όταν το mutex είναι ξεκλείδωτο. |
Νήμα | Μπορείτε να έχετε πολλά νήματα προγράμματος. | Μπορείτε να έχετε πολλά νήματα προγράμματος στο mutex αλλά όχι ταυτόχρονα. |
Ιδιοκτησία | Η τιμή μπορεί να αλλάξει με οποιαδήποτε διαδικασία που απελευθερώνει ή αποκτά τον πόρο. | Το κλείδωμα αντικειμένου απελευθερώνεται μόνο από τη διαδικασία, η οποία έχει αποκτήσει το κλείδωμα σε αυτό. |
Τύποι | Τύποι Semaphore μετρούν σηματοφόρο και δυαδικό σηματοφόρο και | Το Mutex δεν έχει υποτύπους. |
Operaσμού | Semaphore Η τιμή τροποποιείται χρησιμοποιώντας τη λειτουργία αναμονής () και σήματος (). | Το αντικείμενο Mutex είναι κλειδωμένο ή ξεκλείδωτο. |
Κατάληψη πόρων | Είναι κατειλημμένο εάν χρησιμοποιούνται όλοι οι πόροι και η διαδικασία που ζητά πόρο εκτελεί τη λειτουργία αναμονής () και μπλοκάρεται έως ότου ο αριθμός σηματοφόρων γίνει >1. | Σε περίπτωση που το αντικείμενο είναι ήδη κλειδωμένο, η διαδικασία που ζητά πόρους περιμένει και βρίσκεται σε ουρά από το σύστημα πριν απελευθερωθεί το κλείδωμα. |
Πλεονεκτήματα της Semaphores
Εδώ, είναι τα πλεονεκτήματα/πλεονεκτήματα της χρήσης Semaphore:
- Επιτρέπει σε περισσότερα από ένα νήμα την πρόσβαση στο κρίσιμο τμήμα
- Semaphoreείναι ανεξάρτητα από μηχανή.
- Semaphores υλοποιούνται στον ανεξάρτητο από μηχανή κώδικα του μικροπυρήνα.
- Δεν επιτρέπουν την είσοδο πολλαπλών διεργασιών στο κρίσιμο τμήμα.
- Καθώς υπάρχει πολυάσχολη αναμονή στο σηματοφόρο, δεν γίνεται ποτέ σπατάλη χρόνου και πόρων της διαδικασίας.
- Είναι ανεξάρτητα από μηχανή, τα οποία θα πρέπει να εκτελούνται στον ανεξάρτητο από μηχανή κώδικα του μικροπυρήνα.
- Επιτρέπουν την ευέλικτη διαχείριση των πόρων.
Μειονέκτημα των σηματοφόρων
Εδώ, είναι τα μειονεκτήματα/μειονεκτήματα του σηματοφόρου
- Ένας από τους μεγαλύτερους περιορισμούς ενός σηματοφόρου είναι η αντιστροφή προτεραιότητας.
- Το λειτουργικό σύστημα πρέπει να παρακολουθεί όλες τις κλήσεις για αναμονή και σηματοδότηση σηματοφόρου.
- Η χρήση τους δεν επιβάλλεται ποτέ, αλλά γίνεται μόνο με σύμβαση.
- Προκειμένου να αποφευχθούν αδιέξοδα στο σηματοφόρο, το Wait και Signal οι λειτουργίες πρέπει να εκτελούνται με τη σωστή σειρά.
- Semaphore Ο προγραμματισμός είναι περίπλοκος, επομένως υπάρχουν πιθανότητες να μην επιτευχθεί αμοιβαίος αποκλεισμός.
- Δεν είναι επίσης μια πρακτική μέθοδος για χρήση σε μεγάλη κλίμακα καθώς η χρήση τους οδηγεί σε απώλεια της αρθρωτής ικανότητας.
- Semaphore είναι πιο επιρρεπής σε σφάλματα προγραμματιστή.
- Μπορεί να προκαλέσει αδιέξοδο ή παραβίαση αμοιβαίου αποκλεισμού λόγω σφάλματος προγραμματιστή.
Σύνοψη
- Semaphore ορίζεται ως μια μεταβλητή που δεν είναι αρνητική και μοιράζεται μεταξύ των νημάτων.
- Είναι ένας μηχανισμός που μπορεί να χρησιμοποιηθεί για να παρέχει συγχρονισμό εργασιών.
- Ο σηματοφόρος μέτρησης χρησιμοποιεί μια καταμέτρηση που βοηθά την εργασία να αποκτηθεί ή να απελευθερωθεί πολλές φορές.
- Οι δυαδικοί σηματοφόροι είναι αρκετά παρόμοιοι με τους σηματοφόρους μέτρησης, αλλά η τιμή τους περιορίζεται στο 0 και στο 1.
- Η λειτουργία αναμονής σάς βοηθά να ελέγξετε την είσοδο μιας εργασίας στο κρίσιμο τμήμα
- Signal Η λειτουργία σηματοφόρου χρησιμοποιείται για τον έλεγχο της εξόδου μιας εργασίας από ένα κρίσιμο τμήμα
- Αρίθμηση Semaphore δεν έχει αμοιβαίο αποκλεισμό ενώ το Binary Semaphore έχει αμοιβαίο αποκλεισμό
- Semaphore σημαίνει μηχανισμός σηματοδότησης ενώ το Mutex είναι μηχανισμός κλειδώματος
- Semaphore επιτρέπει σε περισσότερα από ένα νήματα να έχουν πρόσβαση στο κρίσιμο τμήμα
- Ένας από τους μεγαλύτερους περιορισμούς ενός σηματοφόρου είναι η αντιστροφή προτεραιότητας.