Λειτουργικά συστήματα

Γνώση Υπολογιστών >> Λειτουργικά συστήματα >  >> Linux

Τι είναι τα σηματοφόρα του Linux;

Στο Linux, τα σηματοφόρα είναι ένα πρωτόγονο συγχρονισμού που χρησιμοποιείται για τον έλεγχο της πρόσβασης σε κοινούς πόρους με πολλαπλές διαδικασίες ή νήματα. Ουσιαστικά δρουν ως μετρητές που μπορούν να αυξηθούν (χρησιμοποιώντας `sem_post ') και να μειωθούν (χρησιμοποιώντας` sem_wait'). Αυτές οι λειτουργίες είναι ατομικές, που σημαίνει ότι είναι αδιάλειπτες, εγγυώντας τη συνέπεια.

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

* Μηχανισμός συγχρονισμού: Τα σηματοφόρα εμποδίζουν τις συνθήκες της φυλής, όπου πολλαπλές διαδικασίες που προσπαθούν να αποκτήσουν πρόσβαση και τροποποίηση του ίδιου πόρου ταυτόχρονα μπορούν να οδηγήσουν σε απρόβλεπτα και λανθασμένα αποτελέσματα. Επιβάλλουν μια ελεγχόμενη σειρά πρόσβασης.

* Τιμή Counter: Ένα σηματοφόρο διατηρεί μια μη αρνητική ακέραια τιμή. Αυτή η τιμή αντιπροσωπεύει τον αριθμό των διαθέσιμων πόρων ή αδειών.

* `sem_wait ()` (ή `sem_trywait ()`): Αυτή η λειτουργία μειώνει την αξία του σηματοφόρου. Εάν η τιμή είναι μεγαλύτερη από το μηδέν, μειώνεται και η διαδικασία συνεχίζεται. Εάν η τιμή είναι μηδενική, τα μπλοκ διαδικασίας (περιμένουν) έως ότου η τιμή του σηματοφόρου γίνει μεγαλύτερη από το μηδέν (μια άλλη διαδικασία αυξάνει τη χρήση του `sem_post '). `sem_trywait ()` είναι μια μη αποκλειστική έκδοση? Επιστρέφει ένα σφάλμα εάν η τιμή του σηματοφόρου είναι μηδενική.

* `sem_post ()`: Αυτή η λειτουργία αυξάνει την αξία του σηματοφόρου. Εάν μια διαδικασία είναι μπλοκαρισμένη περιμένοντας στο σηματοφόρο, μια από τις διαδικασίες αναμονής θα ξυπνήσει.

* Τύποι: Το Linux παρέχει τα ονομαστικά και ανώνυμη σημεία.

* Ανώνυμοι σηματοφόροι: Αυτά δημιουργούνται χρησιμοποιώντας `sem_init ()` και είναι προσβάσιμα μόνο μέσα στη διαδικασία ή την ομάδα νήματος όπου δημιουργήθηκαν. Συνήθως χρησιμοποιούνται για συγχρονισμό σε μια ενιαία διαδικασία.

* Ονομασμένα σηματοφόρα: Αυτά δημιουργούνται χρησιμοποιώντας `sem_open ()` και υπάρχουν στην κοινή μνήμη του συστήματος. Μπορούν να προσεγγιστούν με πολλαπλές διαδικασίες, επιτρέποντας την επικοινωνία μεταξύ της επεξεργασίας (IPC). Τα ονομασμένα σημεία αναγνωρίζονται από ένα μοναδικό όνομα.

* δυαδικά σημάδια: Ένα σηματοφόρο με μέγιστη τιμή 1 συχνά ονομάζεται δυαδική σηματοφόρα. Λειτουργεί σαν κλείδωμα Mutex (Mutual Exclusion), επιτρέποντας μόνο μία διαδικασία να έχει πρόσβαση στον κοινό πόρο κάθε φορά.

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

Παράδειγμα (εννοιολογική):

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

1. Αρχικοποίηση: Το σηματοφόρο αρχικοποιείται στον αριθμό των εκτυπωτών (π.χ. 3).

2. Η διαδικασία 1 θέλει να εκτυπώσει: Καλεί `sem_wait ()`. Η μείωση της σημειακής μείωσης του σηματοφόρου (3 γίνεται 2) και η διαδικασία προχωράει στην εκτύπωση.

3. Η διαδικασία 2 θέλει να εκτυπώσει: Καλεί `sem_wait ()`. Η μείωση της σημειακής τιμής (2 γίνεται 1) και η διαδικασία προχωράει στην εκτύπωση.

4. Η διαδικασία 3 θέλει να εκτυπώσει: Καλεί `sem_wait ()`. Η μείωση της σημειακής τιμής μειώνεται (1 γίνεται 0) και η διαδικασία προχωράει στην εκτύπωση.

5. Η διαδικασία 4 θέλει να εκτυπώσει: Καλεί `sem_wait ()`. Η τιμή του σηματοφόρου είναι 0, οπότε η διαδικασία μπλοκάρει μέχρι να γίνει διαθέσιμος ένας εκτυπωτής.

6. Καλεί `sem_post ()`. Η τιμή του σηματοφόρου αυξάνεται (0 γίνεται 1) και η διαδικασία 4 ξυπνά.

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

Συναφής σύστασή

Πνευματικά δικαιώματα © Γνώση Υπολογιστών Όλα τα δικαιώματα κατοχυρωμένα