Διεργασίες (Processes)

Σχετικά έγγραφα
Λειτουργικά Συστήματα Η/Υ

Αμοιβαίος αποκλεισμός

Dr. Garmpis Aristogiannis - EPDO TEI Messolonghi

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

Ελεγκτές/Παρακολουθητές (Monitors) Ταυτόχρονος Προγραμματισμός 1

Μάθημα 4 ο. Κρίσιμα Τμήματα και Αμοιβαίος Αποκλεισμός

Κεφάλαιο 4 Διεργασίες Β Τάξη ΕΠΑΛ

Επικοινωνία µεταξύ ιεργασιών και Σύνδροµες ιεργασίες

Ελεγκτές/Παρακολουθητές (Monitors) Ταυτόχρονος Προγραμματισμός 1

ΚΕΦΑΛΑΙΟ 9. Ταυτόχρονος προγραμματισμός και νήματα. 9.1 Εισαγωγή

ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ

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

ΑΔΙΕΞΟΔΑ (Deadlocks) Παράδειγμα 1 Θανάσιμο αγκάλιασμα (deadly embrace)

Υλοποίηση Σηματοφόρων

Αμοιβαίος αποκλεισμός με κοινή μνήμη. Ταυτόχρονος Προγραμματισμός 1

Αδιέξοδα (Deadlocks)

Το μάθημα. Λειτουργικά Συστήματα Πραγματικού Χρόνου Βασικές Έννοιες 6. Ενσωματωμένα Συστήματα (embedded systems) Παραδείγματα

Λειτουργικά Συστήματα Πραγματικού Χρόνου

Θοδωρής Ανδρόνικος Τμήμα Πληροφορικής, Ιόνιο Πανεπιστήμιο

Αμοιβαίος αποκλεισμός με κοινή μνήμη. Ταυτόχρονος Προγραμματισμός 1

Σηματοφόροι (Σηματοφορείς) Ταυτόχρονος Προγραμματισμός 1

2.4 Κλασσικά Προβλήματα IPC

Σηματοφόροι (Σηματοφορείς) Ταυτόχρονος Προγραμματισμός 1

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

Συγχρονισμός & σηματοφόροι. Προγραμματισμός II 1

Συγχρονισμός Μέρος Α : Κρίσιμο τμήμα και κλειδώματα

Αμοιβαίος αποκλεισμός με κοινή μνήμη. Ταυτόχρονος Προγραμματισμός 1

Κεφάλαιο 3. Διδακτικοί Στόχοι

Αµοιβαίοςαποκλεισµός. Κατανεµηµένα Συστήµατα 03-1

ΔΙΕΡΓΑΣΙΕΣ. Λειτουργικά Συστήματα Ι. Διδάσκων: Καθ. Κ. Λαμπρινουδάκης ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ Ι

Λιβανός Γιώργος Εξάμηνο 2017Β

Ορισµός Νήµα (thread) είναι µια ακολουθιακή ροή ελέγχου (δηλ. κάτι που έχει αρχή, ακολουθία εντολών και τέλος) σ ένα

Παράλληλη Επεξεργασία Κεφάλαιο 5 Μοίρασμα Δεδομένων

Επικοινωνία Διεργασιών (ΙnterProcess Communication, IPC)

Λειτουργικά Συστήματα (διαχείριση επεξεργαστή, μνήμης και Ε/Ε)

Τι είναι ένα λειτουργικό σύστημα (ΛΣ); Μια άλλη απεικόνιση. Το Λειτουργικό Σύστημα ως μέρος του υπολογιστή

Κρίσιμη Περιοχή Υπό Συνθήκη (Conditional Critical Regions) Ταυτόχρονος Προγραμματισμός 1

Λειτουργικά Συστήματα. Τ.Ε.Ι. Ιονίων Νήσων Σχολή Διοίκησης και Οικονομίας - Λευκάδα

Νήµαταστην Java. Συγχρονισµός νηµάτων Επικοινωνία νηµάτων Εκτελέσιµα αντικείµενα Νήµατα δαίµονες Οµάδες νηµάτων. Κατανεµηµένα Συστήµατα 11-1

3.1 Λειτουργικό Σύστηµα. Λειτουργικό Σύστηµα (2) ΚΕΦΑΛΑΙΟ 3: Λειτουργικά Συστήµατα. Ο υπολογιστής σαν σκέτο hardware έχει περιορισµένη χρησιµότητα

Παράλληλη Επεξεργασία Κεφάλαιο 6 ο Σύγχρονος Παραλληλισμός

Διάλεξη 10: Αλγόριθμοι Αμοιβαίου Αποκλεισμού σε περιβάλλον ανταλλαγής μηνυμάτων. ΕΠΛ 432: Κατανεμημένοι Αλγόριθμοι

Ενότητα 4 (Κεφάλαιο 5) Συντρέχων Προγραμματισμός

ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ ΑΔΙΕΞΟΔΑ

Λειτουργικά Συστήματα (ΗΥ222)

Αδιέξοδα Ανάθεση Πόρων (Deadlocks Resource Allocation)

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

Προσπέλαση κοινών πόρων Πρωτόκολλα ελέγχου αμοιβαίου αποκλεισμού

Τμήμα Οικιακής Οικονομίας και Οικολογίας. Οργάνωση Υπολογιστών

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

Μάθημα 3 ο ΔΙΕΡΓΑΣΙΕΣ (PROCESSES)

Ταυτόχρονος. Algorithm of Dekker. Dekker s Algorithm. Σχέδιο ιάλεξης. Πρόβληµα Αµοιβαίου Αποκλεισµού για δύο διεργασίες

ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ Ι ΙΕΡΓΑΣΙΕΣ ΕΙΣΑΓΩΓΗ ΣΤΙΣ ΙΕΡΓΑΣΙΕΣ

Κατανεμημένα Συστήματα με Java. Ενότητα # 4: Αμοιβαίος αποκλεισμός Διδάσκων: Γεώργιος Ξυλωμένος Τμήμα: Πληροφορικής

Επιτεύγµατα των Λ.Σ.

ΚΕΦΑΛΑΙΟ 3: Λειτουργικά Συστήµατα

Λειτουργικά Συστήματα. Ενότητα # 6: Αδιέξοδα Διδάσκων: Γεώργιος Ξυλωμένος Τμήμα: Πληροφορικής

Λειτουργικά Συστήματα. Ενότητα # 2: Διεργασίες και Νήματα Διδάσκων: Γεώργιος Ξυλωμένος Τμήμα: Πληροφορικής

for for for for( . */

ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ ΔΙΑΔΙΕΡΓΑΣΙΑΚΗ ΕΠΙΚΟΙΝΩΝΙΑ ΣΥΓΧΡΟΝΙΣΜΟΣ

Διεργασίες (μοντέλο μνήμης & εκτέλεσης) Προγραμματισμός II 1

ΠΑΡΑΡΤΗΜΑ: QUIZ ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ

Κατανεμημένα Συστήματα: Θεωρία και Προγραμματισμός. Ενότητα # 8: Ταυτοχρονισμός και νήματα Διδάσκων: Γεώργιος Ξυλωμένος Τμήμα: Πληροφορικής

Οντοκεντρικός Προγραμματισμός

Περιγραφή και Έλεγχος ιεργασιών

Πληροφορική 2. Αλγόριθμοι

Σειρά Προβλημάτων 1 Λύσεις

Αδιέξοδα Ανάθεση Πόρων (Deadlocks Resource Allocation)

Τύποι Δεδομένων. Κατηγορίες Τύπων Δεδομένων ΕΠΑ.Λ Αλίμου Γ Πληροφορική Δομημένος Προγραμματισμός Κων/νος Φλώρος

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

Ο βρόχος for Η εντολή for χρησιμοποιείται για τη δημιουργία επαναληπτικών βρόχων στη C

Λειτουργικά Συστήματα. Ενότητα # 2: Διεργασίες και Νήματα Διδάσκων: Γεώργιος Ξυλωμένος Τμήμα: Πληροφορικής

1. Εισαγωγή. Λειτουργικά Συστήματα Η/Υ. Διεργασίες. Ορισμός ΚΕΦΑΛΑΙΟ 3 - ΔΙΕΡΓΑΣΙΕΣ. Κεφάλαιο 3 «Διεργασίες»

Συγχρονισµός: Αδιέξοδο & Παρατεταµένη Στέρηση

Διαδικασιακός Προγραμματισμός

Λειτουργικά συστήματα πραγματικού χρόνου

Λειτουργικά Συστήματα Η/Υ

Μάθημα 5: Χαρακτηριστικά της Κ.Μ.Ε.

Εισαγωγή στα Λειτουργικά συστήματα Ι. Καθηγητής Κώστας Αναγνωστόπουλος

ENOTHTA 3 ΣYNTPEXΩN ΠPOΓPAMMATIΣMOΣ

Διάλεξη 8: Πρόβλημα Αμοιβαίου Αποκλεισμού. ΕΠΛ 432: Κατανεμημένοι Αλγόριθμοι

Ποια ιδιότητα αϖό τις δύο τελευταίες είναι ϖιο ισχυρή;

ΚΕΦΑΛΑΙΟ 8 Η ΓΛΩΣΣΑ PASCAL


Κινητά και Διάχυτα Συστήματα. Ενότητα # 3: Νήματα και ταυτοχρονισμός Διδάσκων: Γεώργιος Ξυλωμένος Τμήμα: Πληροφορικής

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

Κατανεμημένα Συστήματα

Διάλεξη 9: Αλγόριθμοι Αμοιβαίου Αποκλεισμού με τη χρήση μεταβλητών Ανάγνωσης/Εγγραφής. ΕΠΛ 432: Κατανεμημένοι Αλγόριθμοι

Παράλληλη Επεξεργασία

2.1. Εντολές Σχόλια Τύποι Δεδομένων

ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ ΙΙ ΑΝΑΓΝΩΣΤΟΠΟΥΛΟΣ ΚΩΣΤΑΣ

Ιδιοκτησία Αντικειµένου

Βασικά Στοιχεία της Java

Κεφάλαιο 3: Λειτουργικά Συστήµατα

2.3 Επικοινωνία Διεργασιών

Κεφάλαιο 13 : Τύποι Δεδοµένων

TO ΥΠΟΠΡΟΓΡΑΜΜΑ ΣΥΝΑΡΤΗΣΗ

(Μικρο)Πυρήνας. Λειτουργίες

Σκοπός. Αλγεβρικοί και Λογικοί Υπολογισμοί στη PASCAL

Λειτουργικά Συστήματα Η/Υ

Transcript:

Διεργασία (process) ή καθήκον (task) Διεργασίες (Processes) στοιχειώδης οντότητα/δραστηριότητα υπολογισμού (processing entity/activity) εκτέλεση ενός προγράμματος ένα (κύριο) νήμα (thread)/ρεύμα ελέγχου/εκτέλεσης διεργασία πρόγραμμα μία διεργασία μπορεί να περιλαμβάνει την εκτέλεση περισσοτέρων από ένα προγραμμάτων ένα πρόγραμμα που μπορεί να περιλαμβάνεται σε περισσότερες από μία διεργασίες ονομάζεται επανεισαγόμενο πρόγραμμα (reentrant program) ή αμιγής διαδικασία (pure procedure) (π.χ. αφαίρεση αντικειμένων από λίστα, υπολογισμός τετραγωνικής ρίζας κ.ά.) διεργασία = ακολουθία ενεργειών = δυναμική πρόγραμμα = ακολουθία εντολών = στατικό

Διεργασίες Ακολουθιακές διεργασίες (sequential processes) Ακολουθιακή εκτέλεση εντολών Ταυτόχρονες διεργασίες (concurrent processes) Ένα σύνολο από ακολουθιακές διεργασίες που αλληλεπιδρούν μεταξύ τους είτε (ψευδο)ταυτόχρονη εκτέλεση σ έναν επεξεργαστή είτε ταυτόχρονη εκτέλεση σε πολλούς επεξεργαστές ανήκουν στον ίδιο ή διαφορετικούς χρήστες συνεργαζόμενες (cooperating) για έναν κοινό στόχο ανταγωνιζόμενες (competing) για τους πόρους του συστήματος Σχεδιασμός λειτουργικού συστήματος ταυτόχρονες διεργασίες = (κατα)μερισμός πόρων Προβλήματα αμοιβαίος αποκλεισμός (mutual exclusion) συγχρονισμός (synchronization) αδιέξοδα (deadlocks) διαδεργασιακή επικοινωνία (interprocess communication), δηλαδή επικοινωνία μεταξύ διεργασιών

Mη (κατα)μεριζόμενοι (χρονικά) πόροι Συνθήκες αγώνων δρόμου (race conditions) Αμοιβαίος αποκλεισμός (Mutual exclusion) Αν περισσότερες από μια διεργασίες θέλουν να χρησιμοποιήσουν ένα μη (κατά)μεριζόμενο πόρο στο ίδιο χρονικό διάστημα, τότε ΜΙΑ ΜΟΝΟ διεργασία πρέπει να μπορεί να τον χρησιμοποιήσει ΟΙ ΑΛΛΕΣ πρέπει να ΠΕΡΙΜΕΝΟΥΝ, μ άλλα λόγια: Δεν πρέπει να συμπίπτει χρονικά η εκτέλεση των κρίσιμων περιοχών των διεργασιών κρίσιμο τμήμα (critical section) αυτό που προσπελάζει κάποιον μη (κατα)μεριζόμενο πόρο μη κρίσιμο τμήμα (non-critical section) αυτό που δεν προσπελάζει μη (κατα)μεριζόμενους πόρους

Αμοιβαίος αποκλεισμός ΠΡΟΒΛΗΜΑ Ν διεργασίες Δεν πρέπει να συμπίπτει χρονικά η εκτέλεση κρίσιμων περιοχών δύο διεργασιών Καμία υπόθεση για τον αριθμό και την ταχύτητα των επεξεργαστών Μία διεργασία περιμένει ΜΟΝΟ στο μη κρίσιμο τμήμα της Μία διεργασία δεν μπορεί να προκαλέσει την αναμονή άλλων διεργασιών έξω από την κρίσιμη περιοχή της ΙΔΙΟΤΗΤΕΣ ΜΙΑΣ ΚΑΛΗΣ ΛΥΣΗΣ Όχι αδιέξοδα (deadlocks): κάποια από τις διεργασίες πρέπει να κερδίσει τον πόρο Όχι υποσιτισμός (starvation): όλες οι διεργασίες πρέπει τελικά να αποκτήσουν τον πόρο Μικρή αναμονή (wait): σε περίπτωση έλλειψης ανταγωνισμού ο πόρος πρέπει να αποκτάται σε σύντομο χρονικό διάστημα.

Αμοιβαίος αποκλεισμός ΙΔΕΑ 1 Κλείδωμα μιας μεταβλητής (one locked variable) ελεύθερος: μοναδική (κατα)μεριζόμενη μεταβλητή τύπου boolean που παριστάνει αν ο πόρος είναι ελεύθερος/απασχολημένος process P1; while (true) while (!ελεύθερος) ; ελεύθερος := false; <κρίσιμη περιοχή1>; ελεύθερος := true; // P1 process P2; while (true) while (!ελεύθερος) ; ελεύθερος := false; <κρίσιμη περιοχή2>; ελεύθερος:= true; // P2 αρχικά ελεύθερος =true Η διεργασία εξετάζει τη μεταβλητή ελεύθερος αν ελεύθερος ==true εισέρχεται στην ΚΠ της, αλλιώς περιμένει

Αμοιβαίος αποκλεισμός ΙΔΕA 2 Κλείδωμα δύο μεταβλητών (two locked variables) σειράp1, σειράp2: δύο (κατα)μεριζόμενες μεταβλητές τύπου boolean που παριστάνουν αν είναι η σειρά της P1 ή η σειρά της P2 να πάρει τον πόρο process P1; while (true) while (σειράp2); σειράp1 = true; <κρίσιμη περιοχή>; σειράp1 = false; // P1 process P2; while (true) while (σειράp1) ; σειράp2= true; <κρίσιμη περιοχή>; σειράp2 = false; // P2 αρχικά σειράp1 = σειράp2 =false η P1 (P2) εξετάζει την μεταβλητή σειράp2 (σειράp1) P1: Αν σειράp2 == true τότε περιμένει, αλλιώς εισέρχεται στην ΚΠ της P2: Αν σειράp1 == true τότε περιμένει, αλλιώς εισέρχεται στην ΚΠ της το ίδιο πρόβλημα και πάλι

Αμοιβαίος αποκλεισμός ΙΔΕA 3 Αυστηρή εναλλαγή (Strict alternation) σειρά2: μία μοναδική (κατα)μεριζόμενη μεταβλητή τύπου boolean που παριστάνει ποιας διεργασίας είναι σειρά να προσπελάσει τον πόρο process P1; while (true) while (σειρά2) ; <κρίσιμη περιοχή>; σειρά2 := true; // P1 αρχικά σειρά2=true // έστω εξασφαλίζει τον αμοιβαίο αποκλεισμό! process P2; while (true) while (!σειρά2) ; <κρίσιμη περιοχή>; σειρά2 = false; // P2 ΠΡΟΒΛΗΜΑΤΑ Η χρήση του πόρου εναλλάσσεται μεταξύ των P2 και P1 (P2, P1, P2, ) Κακή ιδέα όταν η μια από τις διεργασίες είναι πολύ αργή η άλλη αποκτά τον πόρο με τη συχνότητα της βραδύτερης Απασχολούμενη σε αναμονή (busy waiting) η KME περιμένει εξετάζοντας συνεχώς τη τιμή της σειρά2

Η λύση αυτή δε λειτουργεί χωρίς ανταγωνισμό.

Αμοιβαίος αποκλεισμός Ιδέες 1, 2 Πρόβλημα: εκχώρηση τιμής μεταβλητής εξέτασης τιμής Νέοι αλγόριθμοι λύνουν αυτό το πρόβλημα 4. Αλγόριθμος Dekker Πρώτη λύση λογισμικού Πολύπλοκη λύση Βλ. Άσκη. και Απάντ. 1.1.3 βιβλίου 5. Αλγόριθμος Peterson (1981) H πρώτη ικανοποιητική λύση στο πρόβλημα Βλέπε Άσκ. και Απάντ. 1.1.5 βιβλίου ΑΛΛΑ και αυτοί είναι αλγόριθμοι απασχολούμενης αναμονής: ο χρόνος της KME σπαταλιέται σε συνεχή έλεγχο των τιμών μιας ή περισσοτέρων μεταβλητών

Προτάθηκαν από τον E. W. Dijkstra ως ένας Σηματοφορείς (Semaphores) Νέος τύπος μεταβλητών της μορφής: public class semaphore private int s; // 0 και 1 αν είναι δυαδικοί (binary/boolean) // σηματοφορείς // στην υποπεριοχή 0..Ν των ακεραίων, Ν >1 αν // είναι γενικοί (general ή counting) // πράξεις (έστω ότι εκτελούνται από τη // διεργασία A) public wait() [down / reserve / P (Prolagen)] Aν s > 0, τότε s = s 1 και η A συνεχίζει την εκτέλεσή της; Aν s == 0, τότε η A εμποδίζεται πάνω στον s; // σταματά την εκτέλεσή της και // περιμένει, χωρίς να σπαταλά το χρόνο // της σε άσκοπες ανακυκλώσεις αναμονής public signal (s) [up / release / V (Verhogen)] Αν υπάρχουν διεργασίες εμποδισμένες πάνω στον s, τότε μία από αυτές ελευθερώνεται;

Αν δεν υπάρχουν εμποδισμένες διεργασίες πάνω στον s, τότε η A συνεχίζει την εκτέλεσή της; // semaphore

Σηματοφορείς Οι πράξεις wait και signal είναι αδιαίρετες ή ατομικές πράξεις (indivisible ή atomic operations), δηλαδή: όταν μια διεργασία A αρχίσει μία από τις πράξεις wait() ή signal() πάνω σε κάποιο σηματοφορέα, καμία άλλη διεργασία δεν μπορεί να προσπελάσει το σηματοφορέα μέχρις ότου η A: είτε εκτελέσει πλήρως την πράξη είτε αναγκαστεί να περιμένει, επειδή ο σηματοφορέας έχει την τιμή 0 ΔΙΑΦΟΡΟΙ ΟΡΙΣΜΟΙ (ποια διεργασία αφυπνίζεται) Σύνολο εμποδισμένων (blocked set) διεργασιών πάνω στον s δεν προσδιορίζεται ποια διεργασία αφυπνίζεται όταν εκτελεστεί η εντολή signal() πιθανότητα να υποσιτιστεί μια διεργασία, όταν το πλήθος των διεργασιών είναι μεγαλύτερο ή ίσο του 3 Ουρά εμποδισμένων (blocked queue) διεργασιών στον s οι διεργασίες αφυπνίζονται με τη σειρά που έχουν εμποδιστεί (FIFO) στην περίπτωση αυτή είναι αδύνατο να συμβεί υποσιτισμός

Παράδειγμα υλοποίησης σε UCSD Pascal: Σηματοφορείς Προκαθορισμένος τύπος semaphore Τιμές στην περιοχή 0 ως maxint Ουρά εμποδισμένων (blocked queue) διεργασιών πάνω στον κάθε σηματοφορέα Προκαθορισμένες διαδικασίες: procedure seminit (var s:semaphore; c: integer); δίνει την αρχική τιμή c στο σηματοφορέα s δημιουργεί μία άδεια ουρά για τον s procedure wait (var s: semaphore); κάνει τη διεργασία να περιμένει πάνω στον s procedure signal (var s: semaphore); σημαίνει το σηματοφορέα s procedure attach (s: semaphore; διάνυσμα: integer); συνδέει τον s με μια εξωτερική διακοπή (external interrupt) του συστήματος Όταν συμβεί η διακοπή αυτή στο υλισμικό του υπολογιστή, τότε σημαίνεται ο σηματοφορέας s

Σηματοφορείς Αμετάβλητες ιδιότητες ή αρχές (invariants) των σηματοφορέων: αληθείς για κάθε κατάσταση κάθε δυνατής εκτέλεσης ενός παράλληλου προγράμματος s 0 s = s0 + #signal(s) - #wait(s) όπου s0 είναι η αρχική τιμή ενός σηματοφορέα s και #signal, #wait: πλήθος των εντολών signal(s)και wait(s) που έχουν εκτελεστεί πλήρως (απόδειξη: απευθείας από τον ορισμό) Επίσης, από τις παραπάνω σχέσεις προκύπτει η σχέση: #wait(s) #signal(s) + s0 Αν σ ένα πρόγραμμα δεν ισχύει μία από τις σχέσεις αυτές, τότε το πρόγραμμα είναι λανθασμένο

Δυαδικοί Σηματοφορείς Ανεξάρτητα από την υλοποίηση της πράξης signal(s) οι δυαδικοί σηματοφορείς μας επιτρέπουν την εύκολη λύση του προβλήματος του αμοιβαίου αποκλεισμού process P1; while (true) wait (s); <κρίσιμη_ περιοχή>; signal (s); // P1 process P2; while (true) wait (s); <κρίσιμη_ περιοχή>; signal (s); // P2 process P3; while (true) wait (s); <κρίσιμη_ περιοχή>; signal (s); // P3 Κύριο Πρόγραμμα: seminit (s, 1 δυαδικός σηματοφορέας);. start (P1); start (P2);... start (Pr);. // αμοιβαίος_αποκλεισμός Απόδειξη αν s0==1 => μόνο μία διεργασία μπορεί να εκτελέσει την εντολή wait(s) και να μπει στην ΚΠ της

οι άλλες διεργασίες περιμένουν την εκτέλεση μιας εντολής signal(s) μία διεργασία εμποδίζεται μόνο αν κάποια άλλη είναι στην ΚΠ της, δηλαδή αν s==0 => #wait(s) = #signal(s) + 1

Δυαδικοί Σηματοφορείς Υποθέτουμε ότι η μεταβλητή γέφυρα_ελεύθερη έχει δηλωθεί ως τύπου semaphore process Τ1; μη κρίσιμη_περιοχή ταξιδιού; wait (γέφυρα_ελεύθερη); κρίσιμη περιοχή χρήσης της γέφυρας; signal (γέφυρα_ελεύθερη); //Τ1; process Τ2; μη κρίσιμη_περιοχή ταξιδιού; wait (γέφυρα_ελεύθερη); κρίσιμη περιοχή χρήσης της γέφυρας; signal (γέφυρα_ελεύθερη); // Τ2;... process Τn; μη κρίσιμη_περιοχή ταξιδιού; wait (γέφυρα_ελεύθερη); κρίσιμη περιοχή χρήσης της γέφυρας; signal (γέφυρα_ελεύθερη); // Tn; Κύριο Πρόγραμμα:

seminit (γέφυρα_ελεύθερη, 1);... start (T1); start (T2);... start (Tn);... // προγραμματισμός_αμαξοστοιχιών

Συγχρονισμός διεργασιών (Process synchronization) συνεργαζόμενες ταυτόχρονες διεργασίες μία διεργασία περιμένει ένα γεγονός (event) από κάποια άλλη χρήση δυαδικών σηματοφορέων για να εμποδίζουμε και να ελευθερώνουμε διεργασίες κατά βούληση. Παράδειγμα Η P1 θέλει σε κάποιο σημείο της εκτέλεσής της να ελευθερώσει την P2, που πρέπει να την περιμένει σε κάποιο άλλο σημείο της δικής της εκτέλεσης: η μεταβλητή s έχει δηλωθεί ως τύπου semaphore process P1; // ξύπνα την P2 signal (s); // P1 process P2; // περίμενε wait (s); // P2 Κύριο Πρόγραμμα: seminit (s, 0); start (P2); // ξύπνημα start (P1);

Συγχρονισμός διεργασιών Απόδειξη αν s0==0 => η P2 περιμένει, μέχρις ότου η P1 εκτελέσει την εντολή signal(s) Αν η P1 εκτελέσει την signal(s) πριν η P2 εκτελέσει την wait(s), τότε η P2 δεν περιμένει καθόλου => #wait(s) #signal(s) Ασύμμετρες (asymmetric) διεργασίες η P2 ελέγχει την P1 κι όχι αντίστροφα μερική περίπτωση του προβλήματος της διαδεργασιακής επικοινωνίας