Συνιστάται, 2024

Επιλογή Συντάκτη

Διαφορά μεταξύ του Semaphore και του Mutex

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

Η βασική διαφορά μεταξύ του semaphore και του mutex είναι ότι το σηματοφόρο είναι ένας μηχανισμός σηματοδότησης δηλ. Οι διαδικασίες εκτελούν λειτουργία wait () και signal () για να υποδείξουν εάν αποκτούν ή απελευθερώνουν τον πόρο, ενώ ο Mutex είναι μηχανισμός κλειδώματος, η διαδικασία πρέπει να αποκτήσει την κλειδαριά mutex αν θέλει να αποκτήσει τον πόρο. Υπάρχουν μερικές ακόμη διαφορές μεταξύ του σηματοφόρου και του mutex, ας τις συζητήσουμε με τη βοήθεια του πίνακα σύγκρισης που φαίνεται παρακάτω.

Συγκριτικό διάγραμμα

Βάση σύγκρισηςΣηματοφόροςMutex
ΒασικόςΤο σηματοφόρο είναι ένας μηχανισμός σηματοδότησης.Το Mutex είναι μηχανισμός κλειδώματος.
ΥπαρξηΤο σεματοφόρο είναι μια ακέραια μεταβλητή.Το Mutex είναι ένα αντικείμενο.
ΛειτουργίαΤο Semaphore επιτρέπει σε πολλά θέματα του προγράμματος να έχουν πρόσβαση σε μια πεπερασμένη παρουσία πόρων.Το Mutex επιτρέπει σε πολλά νήματα προγραμμάτων να έχουν πρόσβαση σε έναν μόνο πόρο, αλλά όχι ταυτόχρονα.
ΙδιοκτησίαΗ τιμή του Semaphore μπορεί να αλλάξει από οποιαδήποτε διαδικασία που αποκτά ή απελευθερώνει τον πόρο.Το κλείδωμα αντικειμένων Mutex απελευθερώνεται μόνο από τη διαδικασία που έχει αποκτήσει την κλειδαριά σε αυτό.
ΤαξινομώΤο σηματοφόρο μπορεί να κατηγοριοποιηθεί στην καταμέτρηση του σηματοφόρου και του δυαδικού σηματοφόρου.Το Mutex δεν κατηγοριοποιείται περαιτέρω.
ΛειτουργίαΗ τιμή Semaphore τροποποιείται με τη λειτουργία wait () και signal ().Το αντικείμενο Mutex είναι κλειδωμένο ή ξεκλειδωμένο από τη διαδικασία που ζητά ή απελευθερώνει τον πόρο.
Πόροι που καταλαμβάνονταιΕάν χρησιμοποιούνται όλοι οι πόροι, η διαδικασία που ζητάει πόρους εκτελεί λειτουργία wait () και μπλοκάρει την ίδια στιγμή μέχρι να γίνει μεγαλύτερη από μία.Εάν ένα αντικείμενο mutex είναι ήδη κλειδωμένο, η διαδικασία που ζητά πόρους περιμένει και αναμονής από το σύστημα έως ότου απελευθερωθεί το κλείδωμα.

Ορισμός του Semaphore

Το Semaphore είναι ένα εργαλείο συγχρονισμού διεργασιών. Το σηματοφόρο είναι συνήθως μια ακέραια μεταβλητή S που αρχικοποιείται στον αριθμό των πόρων που υπάρχουν στο σύστημα και η τιμή του σηματοφορέα μπορεί να τροποποιηθεί μόνο από δύο λειτουργίες wait () και σήμα () εκτός από την αρχικοποίηση.

Οι λειτουργίες wait () και signal () τροποποιούν αδιαίρετα την τιμή του semafor. Αυτό σημαίνει ότι όταν μια διαδικασία τροποποιεί την αξία του σηματοφορέα, καμία άλλη διαδικασία δεν μπορεί ταυτόχρονα να τροποποιήσει την τιμή του σηματοφόρου. Σηματοφόρος διακρίνονται από το λειτουργικό σύστημα σε δύο κατηγορίες Μετρώντας τα σηματοφόρα και το δυαδικό σηματοφόρο .

Στην καταμέτρηση του Semaphore, η τιμή S του semafor αρχικοποιείται στον αριθμό των πόρων s που υπάρχουν στο σύστημα. Κάθε φορά που μια διαδικασία θέλει να έχει πρόσβαση στον πόρο, εκτελεί λειτουργία wait () στο ημερολόγιο και μειώνει την τιμή του σηματοφόρου κατά ένα. Όταν απελευθερώνει τον πόρο, εκτελεί λειτουργία σήματος () στο σηματοφόρο και αυξάνει την τιμή του σηματοφόρου κατά ένα. Όταν ο αριθμός των σημαιών φτάσει στο 0, σημαίνει ότι όλοι οι πόροι καταλαμβάνονται από τις διαδικασίες. Εάν μια διαδικασία χρειάζεται να χρησιμοποιήσει έναν πόρο όταν ο αριθμός του σηματοφόρου είναι 0, εκτελεί wait () και μπλοκάρεται έως ότου η τιμή του σηματοφόρου γίνει μεγαλύτερη από 0.

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

Ορισμός του Mutex

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

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

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

Βασικές διαφορές μεταξύ του Semaphore και του Mutex

  1. Το Semaphore είναι ένας μηχανισμός σηματοδοσίας, καθώς η λειτουργία wait () και signal () που εκτελείται σε μεταβλητή σηματοφόρου υποδεικνύει εάν μια διαδικασία αποκτά τον πόρο ή απελευθερώνει τον πόρο. Από τα άλλα χέρια, ο mutex είναι ένας μηχανισμός κλειδώματος, για να αποκτήσει έναν πόρο, μια διαδικασία πρέπει να κλειδώσει το αντικείμενο mutex και ενώ απελευθερώνει μια διαδικασία πόρων πρέπει να ξεκλειδώσει το αντικείμενο mutex.
  2. Το σεμάφος είναι συνήθως μια ακέραια μεταβλητή ενώ το mutex είναι ένα αντικείμενο .
  3. Το Semaphore επιτρέπει σε πολλαπλά νήματα προγράμματος να έχουν πρόσβαση στην πεπερασμένη παρουσία πόρων . Από τα άλλα χέρια, το Mutex επιτρέπει σε πολλαπλά νήματα προγράμματος να έχουν πρόσβαση σε έναν κοινόχρηστο πόρο, αλλά ένα κάθε φορά.
  4. Η μεταβλητή τιμή του σεματοφόρου μπορεί να τροποποιηθεί από οποιαδήποτε διαδικασία που αποκτά ή απελευθερώνει πόρους με την εκτέλεση λειτουργίας wait () και signal (). Από τα άλλα χέρια, το κλείδωμα που αποκτήθηκε στο αντικείμενο mutex μπορεί να απελευθερωθεί μόνο από τη διαδικασία που έχει αποκτήσει το κλείδωμα στο αντικείμενο mutex.
  5. Το Semaphore είναι δύο τύπων που μετρώνουν το σηματοφόρο και το δυαδικό σηματοφόρο που είναι αρκετά παρόμοιο με το mutex.
  6. Η μεταβλητή τιμή του σηματοφόρου τροποποιείται από την λειτουργία wait () και signal () εκτός από την αρχικοποίηση. Ωστόσο, το αντικείμενο σίγασης είναι κλειδωμένο ή ξεκλειδωμένο από τη διαδικασία που αποκτά ή απελευθερώνει τον πόρο.
  7. Εάν η διαδικασία αποκτά όλους τους πόρους και ο πόρος δεν είναι ελεύθερος τότε η διαδικασία που επιθυμεί να αποκτήσει τον πόρο εκτελεί λειτουργία wait () σε μεταβλητή σηματοφόρου και μπλοκάρει μέχρις ότου η καταμέτρηση του σηματοφόρου γίνει μεγαλύτερη από 0. Αν όμως ένα αντικείμενο mutex είναι ήδη κλειδώθηκε τότε η διαδικασία που επιθυμεί να αποκτήσει πόρους περιμένει και να πάρει ουρά από το σύστημα έως ότου απελευθερωθεί ο πόρος και το αντικείμενο mutex ξεκλειδώνεται.

Συμπέρασμα:

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

Top