Διδακτικά Βιβλία του Παιδαγωγικού Ινστιτούτου

Αναζήτηση

Βρες
Εμφάνιση

Τι θα μάθεις;

Όταν ολοκληρώσεις το μάθημα αυτό, θα μπορείς: - Να ορίζεις τι είναι σηματοφορέας και οι λειτουργίες Ρ και V - Να περιγράφεις πώς λύνουν οι σηματοφορείς το πρόβλημα του κρίσιμου τμήματος - Να απαριθμείς τις λίστες διεργασιών που κρατά το ΛΣ - Να εξηγείς πώς λύνουμε απλά προβλήματα με σηματοφορείς

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

1. Προσθέτει πολλές μεταβλητές και επιπλέον εντολές στον κώδικα της διεργασίας κάνοντας τον πολύπλοκο χωρίς λόγο. Από τις 8 γραμμές κώδικα της κάθε διεργασίας που δόθηκαν στο προηγούμενο μάθημα, οι 3 μόνο είναι το πραγματικό πρόγραμμα, ενώ οι υπόλοιπες 5 είναι πρόσθετες.

2. Δεν επεκτείνεται εύκολα για περισσότερες από δυο διεργασίες, όπου είναι ακόμα πιο πολύπλοκη.

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

Αν η χρήση του ανελκυστήρα γινόταν με τον τρόπο που περιγράψαμε στο προηγούμενο μάθημα, θα γινόταν μια πολύπλοκη διαδικασία: όποιος ήθελε να τον χρησιμοποιήσει θα δήλωνε αυτή του την πρόθεση, και ο ανελκυστήρας θα εξυπηρετούσε έναν-έναν όλους τους ενοίκους που τον χρειάζονται, σε κάθε όροφο με τη σειρά. Θα υπήρχαν κουμπιά για την εκδήλωση της ανάγκης χρήσης του ανελκυστήρα, για την επιλογή αυτού που έχει την προτεραιότητα, για την ελευθέρωση του ανελκυστήρα κλπ. Με αυτά θα γινόταν η συνεννόηση μεταξύ των ενοίκων κάθε φορά για το ποιος έχει προτεραιότητα, ποιος είναι επόμενος στη σειρά για να εξυπηρετηθεί και ποιος τελικά θα χρησιμοποιήσει τον ανελκυστήρα. Με μια τόσο πολύπλοκη και αργή διαδικασία μάλλον οι περισσότεροι θα χρησιμοποιούσαν το κλιμακοστάσιο!

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

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

Η ιδέα της φωτεινής ένδειξης, που ενεργοποιείται με το πάτημα ενός κουμπιού, μπορεί να μεταφερθεί και στο πρόβλημα του κρίσιμου τμήματος, με τους σηματοφορείς (semaphores). Ο σηματοφορέας, που είναι ένας μετρητής με ακέραιες τιμές, αντιστοιχεί στη φωτεινή ένδειξη. Όταν έχει την τιμή 0, τότε η ένδειξη είναι αναμμένη, ενώ όταν έχει την τιμή 1 η ένδειξη είναι σβηστή. Το πάτημα του κουμπιού και η κλήση του ανελκυστήρα προκαλούν μείωση της μεταβλητής κατά 1, ενώ το σβήσιμο της φωτεινής ένδειξης αντιστοιχεί σε αύξηση της μεταβλητής κατά 1.

Οι σηματοφορείς και οι δυο λειτουργίες τους, με τα ονόματα Ρ και V, παρουσιάστηκαν από το Dijkstra το 1965. Οι δυο λειτουργίες εκτελούνται αδιαίρετα, δηλαδή όταν στη λειτουργία Ρ τελειώσει ο βρόχος «while s = Ο do_nothing», η επόμενη εντολή θα εκτελεστεί αμέσως χωρίς διακοπή από άλλη διεργασία. Αν δυο διεργασίες επιχειρήσουν ταυτόχρονα να εκτελέσουν τη λειτουργία Ρ, τότε θα εκτελεστούν με τυχαία σειρά.

Το πρόβλημα των αναλήψεων λύνεται τώρα με ένα σηματοφορέα, με όνομα π.χ. «sema», όπως φαίνεται στο σχήμα.