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

Σχετικά έγγραφα
ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ Ι ΙΕΡΓΑΣΙΕΣ ΕΙΣΑΓΩΓΗ ΣΤΙΣ ΙΕΡΓΑΣΙΕΣ


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Dr. Garmpis Aristogiannis - EPDO TEI Messolonghi

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

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

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

Λειτουργικά Συστήματα 7ο εξάμηνο, Ακαδημαϊκή περίοδος

ΧΡΟΝΟΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ

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

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

ΧΡΟΝΟΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ

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

ΤρόποςΑξιολόγησης: α) Εργαστήρια (Προαιρετικάµε 20% - 35% βαρύτητα µόνοθετικά) β) Τελική Γραπτή Εξέταση

Εργαστήριο ΔΙΕΡΓΑΣΙΕΣ - ΔΙΑΧΕΙΡΙΣΗ

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

ΧΡΟΝΟΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Ανάλυση Επιδόσεων Συστημάτων Πραγματικού Χρόνου

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

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

Εισαγωγή στην Πληροφορική

Ε-85: Ειδικά Θέµατα Λογισµικού

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

Εισαγωγικά & Βασικές Έννοιες

Λειτουργικά. Τεχνολογικό Εκπαιδευτικό Ίδρυμα Δυτικής Μακεδονίας Σιώζιος Κων/νος - Πληροφορική Ι

Εισαγωγή στην Πληροφορική

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

ΛΟΓΙΣΜΙΚΟ (software)

Μάθημα 8: Επικοινωνία Συσκευών με τον Επεξεργαστή

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

Κεφάλαιο 4 Σύνδεση Μικροεπεξεργαστών και Μικροελεγκτών ΕΡΩΤΗΣΕΙΣ ΑΣΚΗΣΕΙΣ

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

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

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

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

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

Σελίδα 1 από 11. Απαντήσεις στο φυλλάδιο 57 Ερώτηση: 1 η : Οι ακροδέκτες αυτοί χρησιµοποιούνται για:

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

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

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

Ενότητα 2 (Κεφάλαιο 3) Περιγραφή και Έλεγχος Διεργασιών. Περιεχόμενα. Ανάγκη ύπαρξης διεργασιών 1

Μάθημα 3.8 Τεχνικές μεταφοράς δεδομένων Λειτουργία τακτικής σάρωσης (Polling) Λειτουργία Διακοπών DMA (Direct Memory Access)

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

Σκοπός Μαθήματος. Λειτουργικά Συστήματα Η/Υ. Γενικές Πληροφορίες. Στόχοι Μαθήματος ΚΕΦΑΛΑΙΟ 1 - ΕΙΣΑΓΩΓΗ. Θεωρία: Εργαστήριο: Κεφάλαιο 1 «Εισαγωγή»

Προβλήματα ταυτόχρονης εκτέλεσης (για νήματα με κοινή μνήμη)

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

Υποστήριξη Λ.Σ. ΜΥΥ-106 Εισαγωγή στους Η/Υ και στην Πληροφορική

ιεργασίες και νήµατα Προγραµµατισµός ΙΙΙ 1 lalis@inf.uth.gr

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

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

2. Σκοποί και Λειτουργίες των ΛΣ. Λειτουργικά Συστήματα Η/Υ. Περίληψη. Ι. Προστασία Υλικού ΚΕΦΑΛΑΙΟ 2 - ΕΞΕΛΙΞΗ ΚΑΙ ΣΚΟΠΟΙ ΛΣ

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

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

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

Ενότητα 3 - Θέματα Εφαρμοσμένης Επιστήμης Υπολογιστών. Κοντογιάννης Βασίλειος ΠΕ19

Προβλήματα ταυτόχρονης εκτέλεσης (για νήματα με κοινή μνήμη)

Εισαγωγικά & Βασικές Έννοιες

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

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

ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ. Χρονοπρογραμματισμός Εργαστηριακές Ασκήσεις

Προβλήματα ταυτόχρονης εκτέλεσης (για νήματα με κοινή μνήμη)

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

Εργαστήριο Λειτουργικών Συστημάτων 8o εξάμηνο, Ροή Υ, ΗΜΜΥ

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

Αρχιτεκτονική Υπολογιστών

Προβλήματα Συγχρονισμού (με ελεγκτή) Ταυτόχρονος Προγραμματισμός 1

Πληροφορική 2. Λειτουργικά Συστήματα

Χρονοδρομολογητής Κυκλικής Επαναφοράς

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

Transcript:

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

ΕΙΣΑΓΩΓΗ ΣΤΙΣ ΔΙΕΡΓΑΣΙΕΣ Διεργασία (Process) είναι η αφαιρετική θεώρηση ενός προγράμματος που εκτελείται. Η διεργασία δεν ταυτίζεται με ένα πρόγραμμα, αφού η διεργασία είναι η δραστηριότητα (activity) εκτέλεσης ενός προγράμματος. Περιλαμβάνει ένα πρόγραμμα Είσοδο έξοδο Βρίσκεται σε μια κατάσταση. Παράδειγμα: Μαγειρική (Συνταγή: Πρόγραμμα, Μάγειρας: CPU, Υλικά: Είσοδος) Πρώτες Βοήθειες 2

ΤΟ ΜΟΝΤΕΛΟ ΤΩΝ ΔΙΕΡΓΑΣΙΩΝ Από Εννοιολογική άποψη κάθε διεργασία έχει τη δική της (εικονική) CPU (β) Για την επίτευξη ψευδοπαραλληλισμού (pseudoparallelism) το εκτελέσιμο λογισμικό στον υπολογιστή, οργανώνεται σε διεργασίες (processes). Η ταχύτατη εναλλαγή από διεργασία σε διεργασία ονομάζεται πολυπρογραμματισμός (α). Μόνο μια διεργασία είναι ενεργή σε μια συγκεκριμένη χρονική στιγμή (γ) 3

Η ΔΗΜΙΟΥΡΓΙΑ ΤΩΝ ΔΙΕΡΓΑΣΙΩΝ Στα απλά συστήματα όλες οι απαιτούμενες διεργασίες μπορούν να εκτελούνται αμέσως μετά την εκκίνηση του συστήματος. Στα συστήματα γενικής χρήσης απαιτείται κάποιος μηχανισμός δημιουργίας / τερματισμού των διεργασιών: 1. Αρχικοποίηση Συστήματος Κάποιες εκτελούνται στο προσκήνιο και εξυπηρετούν χρήστες Κάποιες εκτελούνται στο παρασκήνιο (γνωστές ως «Δαίμονες»). 2. Εκτέλεση μίας κλήσης συστήματος (System Call) από μια διεργασία που εκτελείται και έχει σαν αποτέλεσμα τη δημιουργία μίας άλλης Δημιουργία νέων (βοηθητικών) διεργασιών Ιδιαίτερα χρήσιμο σε περιπτώσεις που μια εργασία μπορεί να επιμεριστεί σε πολλές επιμέρους διεργασίες 3. Η αίτηση κάποιου χρήστη για τη δημιουργία μιας νέας διεργασίας Double-click σε περιβάλλον windows... 4. Το ξεκίνημα μιας εργασίας δέσμης Δημιουργία διεργασίας για την εκτέλεση της επόμενης εργασίας στην ουρά εισόδου 4

Η ΔΗΜΙΟΥΡΓΙΑ ΤΩΝ ΔΙΕΡΓΑΣΙΩΝ Σε όλες τις περιπτώσεις, μια ήδη υπάρχουσα διεργασία (που μπορεί να είναι μια εκτελούμενη διεργασία χρήστη, διεργασία συστήματος ή διεργασία του διαχειριστή δέσμης) εκτελεί μια κλήση συστήματος με αποτέλεσμα τη δημιουργία μιας νέας διεργασίας. Η κλήση συστήματος fork είναι ο μοναδικός τρόπος δημιουργίας μιας διεργασίας στο UNIX H CreateProcess χειρίζεται τη δημιουργία μιας νέας διεργασίας στα Windows. 5

ΤΕΡΜΑΤΙΣΜΟΣ ΤΩΝ ΔΙΕΡΓΑΣΙΩΝ Ο τερματισμός μιας διεργασίας γίνεται για κάποια από τις παρακάτω συνθήκες: Κανονική έξοδος Τερματίζεται οικειοθελώς αφού ολοκλήρωσε την εργασία της (exit στο UNIX, ExitProcess στα Windows) Έξοδος που προκλήθηκε από σφάλμα Η διεργασία ανακαλύπτει ένα μοιραίο σφάλμα (π.χ. Μη ύπαρξη κάποιου αρχείου) και τερματίζει τη λειτουργία της οικειοθελώς. Μοιραίο Σφάλμα Σφάλμα στο κώδικα που προκαλεί ανοικειοθελή τερματισμό της λειτουργίας Τερματισμός από ενέργεια άλλης διεργασίας. Αποτέλεσμα άλλης διεργασίας η οποία προτείνει στο λειτουργικό να σκοτώσει μια άλλη διεργασία (Kill, TerminateProcess) 6

ΙΕΡΑΡΧΙΕΣ ΔΙΕΡΓΑΣΙΩΝ Όταν μια διεργασία δημιουργεί μια άλλη, η μητρική διεργασία σχετίζεται με την θυγατρική με συγκεκριμένους τρόπους. Η θυγατρική με τη σειρά της δημιουργεί άλλες διεργασίες και έτσι δημιουργούνται ιεραρχίες διεργασιών. Στο UNIX μια διεργασία μαζί με τα παιδιά της σχηματίζει μια Ομάδα. Όταν υπάρξει κάποιο σήμα, το σήμα διανέμεται σε όλα τα μέλη της ομάδας που είναι ενεργά και κάθε ένα μπορεί να το επεξεργαστεί με τον τρόπο του ή να το αγνοήσει. Το UNIX παίρνει αρχικές ρυθμίσεις κατά την εκκίνηση του από μια διεργασία init, στη συνέχεια δημιουργεί μια διεργασία για κάθε τερματικό, στη συνέχεια δημιουργείται ένα κέλυφος για κάποιο χρήστη που συνδέθηκε σε κάποιο τερματικό κ.ο.κ. Συνεπώς όλες οι διεργασίες ανήκουν σ ένα δέντρο με ρίζα την init. Στα Windows όλες οι διεργασίες είναι ισοδύναμες και δεν υπάρχει η έννοια της ιεραρχίας. Μια διεργασία έχει τη δυνατότητα να μεταβιβάσει μια θυγατρική διεργασία της σε κάποια άλλη διεργασία (παρακάμπτοντας την ιεραρχία). 7

ΚΑΤΑΣΤΑΣΕΙΣ ΔΙΕΡΓΑΣΙΩΝ Η αλληλεπίδραση μεταξύ διεργασιών οδηγεί στην αναγκαιότητα ύπαρξης διαφόρων καταστάσεων στις οποίες μπορούν να βρεθούν οι διάφορες διεργασίες, π.χ. cat chapter1 chapter2 grep tree Μια διεργασία μπορεί να πρέπει να μπλοκαριστεί επειδή: Περιμένει κάποια δεδομένα εισόδου που δεν είναι διαθέσιμα Δεν έχει χρόνο η CPU 8

ΚΑΤΑΣΤΑΣΕΙΣ ΔΙΕΡΓΑΣΙΩΝ Οι τρεις δυνατές καταστάσεις στις οποίες μπορεί να βρεθεί μια διεργασία είναι: εκτελούμενη (running) έτοιμη προς εκτέλεση ή εκτελέσιμη (ready or runnable) υπό αναστολή (blocked). 9

ΚΑΤΑΣΤΑΣΕΙΣ ΔΙΕΡΓΑΣΙΩΝ Οι δυνατές μεταβάσεις μεταξύ καταστάσεων διεργασιών είναι: [1] εκτελούμενη υπό αναστολή Η διεργασία αναμένει δεδομένα εισόδου [2] εκτελούμενη εκτελέσιμη Ο χρονοπρογραμματιστής επιλέγει άλλη διεργασία [3] εκτελέσιμη εκτελούμενη Ο χρονοπρογραμματιστής επιλέγει τη συγκεκριμένη διεργασία [4] υπό αναστολή εκτελέσιμη Τα δεδομένα εισόδου είναι διαθέσιμα 10

ΚΑΤΑΣΤΑΣΕΙΣ ΔΙΕΡΓΑΣΙΩΝ Το χαμηλότερο επίπεδο ενός λειτουργικού συστήματος, το οποίο είναι δομημένο με βάση τις διεργασίες αναλαμβάνει το χειρισμό των διακοπών και το χρονοπρογραμματισμό. Πάνω από το επίπεδο αυτό βρίσκονται σειριακές διεργασίες. 11

ΥΛΟΠΟΙΗΣΗ ΔΙΕΡΓΑΣΙΩΝ Για την υλοποίηση του μοντέλου διεργασιών, το Λ.Σ. οικοδομεί μία δομή από όμοιες εγγραφές, τον πίνακα διεργασιών (process table). Για κάθε διεργασία τηρείται μία εγγραφή, η οποία περιλαμβάνει στοιχεία τα οποία αφορούν: στη διαχείριση διεργασιών (process management) στη διαχείριση μνήμης (memory management) στη διαχείριση αρχείων (file management). 12

ΥΛΟΠΟΙΗΣΗ ΔΙΕΡΓΑΣΙΩΝ Λεπτομερέστερα, τα στοιχεία μπορεί να περιλαμβάνουν: την κατάσταση της διεργασίας (process status) τον απαριθμητή προγράμματος (program counter) το δείκτη στοίβας (stack pointer) την κατανομή μνήμης (memory allocation) την κατάσταση των ανοιχτών αρχείων πληροφορίες λογιστικού χαρακτήρα (accounting) πληροφορίες χρονοπρογραμματισμού 13

ΥΛΟΠΟΙΗΣΗ ΔΙΕΡΓΑΣΙΩΝ 14

ΥΛΟΠΟΙΗΣΗ ΔΙΕΡΓΑΣΙΩΝ Εργασίες ενός Λ.Σ. κατά την εμφάνιση σήματος διακοπής Σε κάθε ομάδα ομοειδών συσκευών (π.χ. δισκέτας, σκληρού δίσκου, χρονομετρητή κ.α.) αντιστοιχεί μια θέση μνήμης που καλείται διάνυσμα διακοπής (interrupt vector). Η θέση αυτή περιλαμβάνει τη διεύθυνση της διαδικασίας εξυπηρέτησης διακοπής (interrupt service procedure). Σε περίπτωση εμφάνισης σήματος διακοπής ακολουθείται συγκεκριμένη διαδοχή ενεργειών από την πλευρά του συστήματος. 15

ΥΛΟΠΟΙΗΣΗ ΔΙΕΡΓΑΣΙΩΝ Παράδειγμα Κατά την εκτέλεση της διεργασίας 3 φθάνει σήμα διακοπής από το δίσκο Αποθηκεύονται στη στοίβα όλες οι απαραίτητες πληροφορίες οι σχετικές με τη διεργασία 3 από ρουτίνα χαμηλού επιπέδου (assembly) Ο έλεγχος μεταφέρεται στη διεύθυνση που ορίζεται από το διάνυσμα διακοπής Η διαδικασία εξυπηρέτησης ξεκινά φυλάσσοντας όλες τις τιμές των καταχωρητών της τρέχουσας διεργασίας στον πίνακα διεργασιών Η διεργασία που υπέβαλε το αίτημα και έχει ανασταλεί γίνεται έτοιμη προς εκτέλεση Ο χρονοπρογραμματιστής επιλέγει την έτοιμη διεργασία για εκτέλεση 16

Είναι προφανής η αναγκαιότητα ύπαρξης μηχανισμού διαδιεργασιακής επικοινωνίας (InterProcess Communication). Τα βασικά ζητήματα που τίθενται είναι: Με ποιο τρόπο μπορεί μια διεργασία να μεταβιβάσει πληροφορίες σε μια άλλη Πώς μπορεί να εξασφαλιστεί ότι δύο ή περισσότερες διεργασίες δεν εμποδίζουν η μία την άλλη όταν εκτελούν κρίσιμες ενέργειες Ποια είναι η κατάλληλη αλληλουχία ενεργειών όταν υπάρχουν εξαρτήσεις 17

Συνθήκες ανταγωνισμού Συνθήκες ανταγωνισμού (race conditions) μεταξύ διεργασιών εμφανίζονται όταν δύο ή περισσότερες διεργασίες διαμοιράζονται την ίδια περιοχή μνήμης και το τελικό αποτέλεσμα εξαρτάται από τη σειρά και το χρόνο εκτέλεσής τους. Χαρακτηριστικό παράδειγμα αυτού του print spooler και printer daemon 18

Κρίσιμα τμήματα Στις περιπτώσεις διαμοιρασμού πόρων, απαιτείται πρόβλεψη και αποτροπή χρήσής τους από περισσότερες της μιας διεργασίας την ίδια χρονική στιγμή. Ουσιαστικά απαιτείται αμοιβαίος αποκλεισμός (mutual exclusion) μεταξύ δύο διεργασιών. Υπό την οπτική περισσότερο αφαιρετικής προσέγγισης, είναι επιθυμητό να διασφαλίσουμε ότι δε θα συμβεί ταυτόχρονη χρήση τμημάτων προγραμμάτων που περιέχουν προσπελάσεις σε μη διαμοιραζόμενους πόρους. Τα τμήματα αυτά των προγραμμάτων καλούνται κρίσιμα τμήματα (critical sections). 19

Για την επίτευξη αποδοτικής συνεργασίας παραλλήλων διεργασιών, απαιτείται να πληρούνται οι κάτωθι προϋποθέσεις: Δύο διεργασίες δε βρίσκονται ποτέ ταυτόχρονα στα κρίσιμα τμήματά τους Δεν επιτρέπονται υποθέσεις σε ότι αφορά την ταχύτητα ή το πλήθος των επεξεργαστών Διεργασία που δε βρίσκεται σε κρίσιμο τμήμα δεν επιτρέπεται να αναστείλει άλλες διεργασίες Δεν επιτρέπεται η έπ' αόριστο αναμονή μιας διεργασίας, για να εισέλθει στο κρίσιμο τμήμα της. 20

H A εισέρχεται στη κρίσιμη περιοχή H A εξέρχεται από κρίσιμη περιοχή Διεργασία Α H Β προσπαθεί να εισέλθει στη κρίσιμη περιοχή H Β εισέρχεται στη κρίσιμη περιοχή H Β εξέρχεται από τη κρίσιμη περιοχή Διεργασία Β H Β αναστέλλεται Χρόνος 21

Αμοιβαίος αποκλεισμός και ενεργός αναμονή Θα μελετήσουμε τρόπους για την επίτευξη αμοιβαίου αποκλεισμού, έτσι ώστε όταν μια διεργασία μεταβάλει τα περιεχόμενα διαμοιραζόμενης περιοχής μνήμης, καμία άλλη δεν εισέρχεται στο κρίσιμο τμήμα της. 22

Απενεργοποιώντας διακοπές Η προφανέστερη λύση για την επίτευξη αμοιβαίου αποκλεισμού θα ήταν η διαδικασία, σύμφωνα με την οποία: η απενεργοποίηση όλων των διακοπών από μια διεργασία που εισέρχεται στο κρίσιμο τμήμα της η άρση της απενεργοποίησης αμέσως μετά την έξοδο από αυτό. Η λύση αυτή εκτιμάται ως μη ελκυστική, αφού: δεν είναι επιθυμητό να ανατίθεται σε διεργασίες του χρήστη το δικαίωμα απαγόρευσης διακοπών δεν είναι αποτελεσματική επιλογή, σε περίπτωση που υπάρχουν περισσότερες από μία CPU. H συγκεκριμένη λύση μπορεί όμως να χρησιμοποιηθεί σε πολλές περιπτώσεις από τον πυρήνα (όταν για παράδειγμα ενημερώνει λίστες...) 23

Μεταβλητές κλειδώματος Η λύση με χρήση απλών διαμοιραζόμενων μεταβλητών κλειδώματος (lock variables) θα περιελάμβανε: όταν μια διεργασία επιθυμεί να εισέλθει στο κρίσιμο τμήμα της ελέγχει την τιμή της μεταβλητής κλειδώματος αν αυτή έχει τιμή 0, τότε τη θέτει 1 και εισέρχεται αν αυτή έχει τιμή 1, τότε περιμένει μέχρι να γίνει 0 και τότε τη θέτει 1 και εισέρχεται. Η επιλογή, όμως, αυτή δεν είναι αποτελεσματική αφού μπορεί να παρουσιαστεί παρεμβολή σε τέτοιο χρόνο, ώστε να υπάρξει αναποτελεσματικός έλεγχος. 24

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

Τα μειονεκτήματα της μεθόδου είναι: περιλαμβάνεται ενεργός αναμονή (busy waiting), οπότε δαπανάται χρόνος CPU δεν ενδείκνυται όταν η μία εκ των εμπλεκομένων διεργασιών είναι πολύ βραδύτερη της άλλης απαιτεί αυστηρή εναλλαγή διεργασιών. Μπορεί να παραβιαστεί ένας από τους κανόνες που είχαμε θέσει (αν η πρώτη διεργασία ολοκληρώσει το κρίσιμο τμήμα της και ζητήσει εκ νέου να εισέλθει σε αυτό, πριν η άλλη διεργασία εισέλθει στο δικό της κρίσιμο τμήμα..) Διεργασία που δε βρίσκεται σε κρίσιμο τμήμα δεν επιτρέπεται να αναστείλει άλλες διεργασίες 26

Λύση του Peterson Σύμφωνα με τη λύση του Peterson: πριν την είσοδο σε κρίσιμο τμήμα κάποια διεργασία, έστω process=0, καλεί την enter_region με παράμετρο τον αριθμό της 0 ακολούθως δηλώνει το ενδιαφέρον της γι' αυτό το κρίσιμο τμήμα, θέτοντας interested[process=0]=true και θέτει τη μεταβλητή turn=0 περιμένει μέχρι να εξασφαλιστεί η είσοδος στο κρίσιμο τμήμα κατά την έξοδο από το κρίσιμο τμήμα η διεργασία καλεί την leave_region ώστε να απελευθερωθεί η κρίσιμη περιοχή, θέτοντας interested[process=0]=false. Το βασικό μειονέκτημα και της μεθόδου του Peterson είναι ότι: περιλαμβάνεται ενεργός αναμονή (busy waiting) στην περίπτωση που προσπαθήσει μια διεργασία να εισέλθει ανεπιτυχώς στο κρίσιμο τμήμα. 27

TSL εντολή Η εντολή TSL (Test and Set Lock) είναι εντολή που χρησιμοποιείται σε υπολογιστές πολλαπλών επεξεργαστών και εξασφαλίζει το αδιαίρετο (indivisible) των πράξεων ανάγνωσης και αποθήκευσης. TSL RX, LOCK: Διαβάζει τα περιεχόμενα της λέξης μνήμης lock, τα τοποθετεί στον καταχωρητή RX και αποθηκεύει μια μη μηδενική τιμή στη διεύθυνση μνήμης lock. Κανένας επεξεργαστής δεν μπορεί να προσπελάσει τη λέξη αυτή μέχρι την ολοκλήρωση της εντολής. 28

Όταν LOCK=0 οποιαδήποτε διεργασία: μπορεί να θέσει LOCK =1 με εντολή TSL ακολούθως να αναγνώσει ή εγγράψει στη διαμοιραζόμενη μνήμη μετά το πέρας να επαναθέσει LOCK =0. 29

Συνεπώς: μια διεργασία που επιθυμεί να εισέλθει στο κρίσιμο τμήμα καλεί την enter_region η enter_region διεκπεραιώνει την ενεργό αναμονή, θέτει το κλείδωμα και επιστρέφει μετά το πέρας του κρίσιμου τμήματος, η διεργασία καλεί την leave_region η οποία αίρει το κλείδωμα. Το βασικό μειονέκτημα και της μεθόδου του TSL είναι ότι: περιλαμβάνεται ενεργός αναμονή (busy waiting) στην περίπτωση που προσπαθήσει μια διεργασία να εισέλθει ανεπιτυχώς στο κρίσιμο τμήμα. 30

Απενεργοποίηση και αφύπνιση Το βασικότερο μειονέκτημα των λύσεων Peterson και χρήσης TSL εντολής ήταν η ύπαρξη ενεργού αναμονής. Το πρόβλημα της ύπαρξης ενεργού αναμονής μπορεί να οδηγήσει και σε άλλες ανεπιθύμητες καταστάσεις, όπως την αντιστροφή προτεραιοτήτων (priority inversion problem) μεταξύ διεργασιών. Για 2 διεργασίες Χ (Χαμηλή προτεραιότητα) και Υ (Υψηλή Προτεραιότητα) Η Χ σε κρίσιμη περιοχή Εκκίνηση της Υ με προτεραιότητα Αναστολή της Χ Η Υ αναμένει (επ άπειρο) να εισέλθει στην κρίσιμη περιοχή με ενεργό αναμονή 31

Για την αποτροπή της ενεργού αναμονής αξιοποιείται ζεύγος κλήσεων συστήματος: SLEEP (απενεργοποίηση): αναστέλλει την καλούσα διεργασία μέχρι να αφυπνισθεί εκ νέου από άλλη διεργασία WAKEUP (αφύπνιση): αφυπνίζει τη διεργασία που καθορίζεται από την παράμετρο της κλήσης. 32

Το πρόβλημα παραγωγού-καταναλωτή Το πρόβλημα παραγωγού-καταναλωτή (producer-consumer) αποτελεί κλασικό πρόβλημα συγχρονισμού και εμφανίζεται όταν: η διεργασία-παραγωγός επιθυμεί να τοποθετήσει νέα δεδομένα σε γεμάτη ενδιάμεση μνήμη η διεργασία-καταναλωτής επιθυμεί να αποσύρει δεδομένα από άδεια ενδιάμεση μνήμη. Αιτία του προβλήματος είναι η δυνατότητα ταυτόχρονης πρόσβασης στο κρίσιμο τμήμα, δηλαδή στη μεταβλητή που απαριθμεί το πλήθος των δεδομένων στην ενδιάμεση μνήμη 33

34

Η λειτουργία των διεργασιών παραγωγού και καταναλωτή περιλαμβάνει: Η διεργασία-παραγωγός απενεργοποιείται (SLEEP) όποτε η ενδιάμεση μνήμη είναι πλήρης. Η διεργασία-παραγωγός αφυπνίζεται (WAKEUP) από τη διεργασία-καταναλωτή, όταν αυτή καταναλώσει ένα ή περισσότερα δεδομένα. Η διεργασία-καταναλωτής απενεργοποιείται (SLEEP) όποτε η ενδιάμεση μνήμη είναι άδεια. Η διεργασία-καταναλωτής αφυπνίζεται (WAKEUP) από τη διεργασία-παραγωγό, όταν αυτή τοποθετήσει ένα ή περισσότερα δεδομένα. 35

Σενάριο δημιουργίας συνθήκης ανταγωνισμού, λόγω ανεξέλεγκτης πρόσβασης στη μεταβλητή count: Η διεργασία-καταναλωτής ελέγχει και βρίσκει τη μεταβλητή count=0. Πριν η διεργασία-καταναλωτής προλάβει να εκτελέσει SLEEP, ο χρονοδρομολογητής τη διακόπτει και εκτελεί τη διεργασία-παραγωγό. Η διεργασία-παραγωγός τοποθετεί ένα δεδομένο στην ενδιάμεση μνήμη, εκτελεί count=count+1 και αφυπνίζει τη διεργασία-καταναλωτή. Όμως η διεργασία-καταναλωτής δεν είναι απενεργοποιημένη, συνεπώς το σήμα αφύπνισης χάνεται. Όταν επανεκτελεστεί η διεργασία-καταναλωτής, έχει ως τιμή count=0 και απενεργοποιείται. Η διεργασία-παραγωγός θα συνεχίσει να παράγει δεδομένα μέχρι να γεμίσει η ενδιάμεση μνήμη, οπότε και θα απενεργοποιηθεί. Συνεπώς, τόσο η διεργασία-παραγωγός, όσο και η διεργασίακαταναλωτής θα παραμείνουν διαρκώς απενεργοποιημένες. 36

Αιτία της δημιουργίας συνθήκης ανταγωνισμού, ήταν η αποστολή σήματος αφύπνισης σε μη απενεργοποιημένη διεργασία. Επίλυση του προβλήματος θα μπορούσε να επιτευχθεί με χρήση ψηφίου αναμένουσας αφύπνισης (wakeup waiting bit). Το ψηφίο αναμένουσας αφύπνισης γίνεται 1, όταν το αντίστοιχο σήμα αποστέλλεται, ενώ η διεργασία δεν είναι απενεργοποιημένη. Όταν αργότερα η διεργασία επιχειρήσει να απενεργοποιηθεί, το ψηφίο θα λάβει τιμή 0 αλλά η διεργασία δε θα απενεργοποιηθεί. Το πρόβλημα παραμένει αν υπάρξουν περισσότερες από μία διεργασίες που αποστέλλουν σήματα αφύπνισης. 37

Σηματοφόροι Οι σηματοφόροι επιλύουν το πρόβλημα της χαμένης αφύπνισης. Ο Dijkstra πρότεινε τη χρήση: μιας ακέραιας μεταβλητής, του σηματοφόρου (semaphore) για την καταμέτρηση των σημάτων αφύπνισης δύο θεμελιωδών αδιαίρετων λειτουργιών DOWN και UP που επιδρούν στο σηματοφόρο. 38

Η τιμή του σηματοφόρου μπορεί να είναι: είτε μηδενική, αν δεν έχουν αποσταλεί σήματα αφύπνισης είτε θετική, ίση με το πλήθος των σημάτων αφύπνισης. Όταν αρχίζει μία λειτουργία σε σηματοφόρο, αυτή διεξάγεται ως ατομική ή αδιαίρετη ενέργεια (atomicity), δηλαδή καμία άλλη διεργασία δε μπορεί να έχει πρόσβαση σε αυτόν, μέχρι την ολοκλήρωση ή την αναστολή της λειτουργίας. 39

Η DOWN ελέγχει: αν sem>0, τότε μειώνει την τιμή κατά ένα και συνεχίζει αν sem=0, τότε η καλούσα διεργασία απενεργοποιείται. Ατομική ή αδιαίρετη ενέργεια θεωρούνται: ο έλεγχος, η μεταβολή της τιμής η πιθανή απενεργοποίηση. 40

Η UP αυξάνει κατά 1 την τιμή του σηματοφόρου. Ατομική ή αδιαίρετη ενέργεια θεωρούνται: η λειτουργία αύξησης του σηματοφόρου η ενεργοποίηση μιας διεργασίας. Μετά την UP, αν μία ή περισσότερες διεργασίες είχαν απενεργοποιηθεί μέσω του σηματοφόρου, τότε επιλέγεται κάποια από το σύστημα ώστε να ολοκληρώσει τη DOWN λειτουργία της. 41

Συνεπώς μετά την UP λειτουργία: ο σηματοφόρος θα συνεχίσει να έχει τιμή 0 οι εξαρτώμενες από αυτόν απενεργοποιημένες διεργασίες θα είναι κατά μία λιγότερες. 42

Υλοποίηση των DOWN και UP Οι DOWN και UP υλοποιούνται ως κλήσεις συστήματος, ενώ το λειτουργικό σύστημα απενεργοποιεί τις διακοπές για όσο διάστημα ελέγχει ή ενημερώνει το σηματοφόρο και θέτει τη διεργασία σε λήθαργο αν χρειάζεται. Σε περίπτωση πολλαπλών CPUs απαιτείται η διασφάλιση ότι μία μόνο CPU τη φορά έχει πρόσβαση στο sem. Συνεπώς κάθε sem πρέπει να προστατεύεται από μεταβλητή κλειδώματος, με χρήση εντολής TSL 43

Χρήση σηματοφόρων στη λύση του προβλήματος παραγωγού-καταναλωτή Οι σηματοφόροι επιλύουν το πρόβλημα της χαμένης αφύπνισης. Το αδιαίρετο της υλοποίησης των σηματοφόρων επιτυγχάνεται με την υλοποίηση των λειτουργιών UP και DOWN ως κλήσεων συστήματος. 44

Χρήση σηματοφόρων στη λύση του προβλήματος παραγωγού-καταναλωτή 45

Να τονιστεί ότι για τη λύση του προβλήματος παραγωγού-καταναλωτή αξιοποιούμε ουσιαστικά δύο τύπους σηματοφόρων: Αυτούς που αξιοποιούνται για την επίτευξη του αμοιβαίου αποκλεισμού (mutex) --- οι σηματοφόροι που χρησιμοποιούνται για τον σκοπό αυτό ονομάζονται δυαδικοί σηματοφόροι, και Αυτούς που αποσκοπούν σε συγχρονισμό (full και empty), δηλαδή στην εξασφάλιση συγκεκριμένης ακολουθίας γεγονότων. 46

Όταν η ικανότητα των σηματοφόρων να καταμετρούν (συγχρονίζουν), προτιμάμε μια απλοποιημένη έκδοση τους που ονομάζεται mutex. Τα mutex είναι μεταβλητές που μπορούν να βρίσκονται μόνο σε δύο καταστάσεις: ξεκλείδωτες ή κλειδωμένες. Υπάρχουν δύο διαδικασίες που σχετίζονται με τα mutex Η mutex_lock και η mutex_unlock Ας κάνουμε μια σύγκριση με την enter_region που είχαμε δεί Συγκεκριμένα ας εξετάσουμε πως παρακάμπτουμε το πρόβλημα της «αναμονής με απασχόληση» Να τονίσουμε ότι όταν χρησιμοποιούνται «νήματα» δεν υπάρχει «χρονόμετρο» να τα σταματάει ακόμα και αν εκτελούνται για πολύ ώρα. Συνεπώς αν υπήρχε κάποιο νήμα το οποίο προσπαθεί να αποκτήσει τον έλεγχο ενός κλειδώματος με τη μέθοδο της αναμονής με απασχόληση, θα εκτελεί διαρκώς το βρόχο ανακύκλωσης χωρίς να φτάνει ποτέ στο στόχο του 47

48

Σφάλματα Προγραμματισμού σε Σηματοφόρους Αν στο πρόβλημα του παραγωγού καταναλωτή οι εντολές down στους σημαφόρους empty και mutex αντιστραφούν Η περιοχή είναι πλήρης empty = 0 down (&empty) απενεργοποίηση του producer Όμως mutex = 0 Αν η consumer προσπαθήσει να εισέλθει στο κρίσιμο τμήμα της, δηλαδή προσπαθήσει να εκτελέσει down(mutex) απενεργοποίηση του consumer Και οι δύο διεργασίες για πάντα υπό αναστολή 49

Παρακολουθητές (Ελεγκτές - Monitors) Παρακολουθητής (monitor) είναι μία αρχή συγχρονισμού υψηλότερου επιπέδου. Αποτελεί μια συλλογή από διαδικασίες, μεταβλητές και δομές δεδομένων, που ομαδοποιούνται σε έναν ειδικό τύπο ενότητας ή πακέτου. Οι διεργασίες μπορούν να καλούν τις διαδικασίες ενός παρακολουθητή, αλλά δε μπορούν να προσπελάσουν άμεσα τις εσωτερικές δομές δεδομένων ενός παρακολουθητή, από διαδικασίες που ορίστηκαν εκτός αυτού. 50

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

52

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

Βασικό πλεονέκτημα των παρακολουθητών: Οι παρακολουθητές αυτοματοποιούν τη διαδικασία αμοιβαίου αποκλεισμού των κρισίμων τμημάτων, συνεπώς επιτρέπουν παράλληλο προγραμματισμό με λιγότερα σφάλματα. Βασικό μειονέκτημα των παρακολουθητών: Οι παρακολουθητές είναι στοιχείο (concept) της ίδιας της γλώσσας προγραμματισμού, αφού ο μεταγλωττιστής πρέπει να τους αναγνωρίζει και να προγραμματίζει τον αμοιβαίο αποκλεισμό. Συνεπώς πρέπει να ενσωματωθούν στοιχεία σε μεταγλωττιστές, ώστε αυτοί να γνωρίζουν ποιες διαδικασίες είναι του παρακολουθητή και ποιες όχι. 54

Όμως...πέραν του αμοιβαίου αποκλεισμού...χρειαζόμαστε και ένα τρόπο...για συγχρονισμό... Αξιοποιούνται οι μεταβλητές συνθήκης καθώς και δύο λειτουργίες που τις συνοδεύουν: wait και signal H διαδικασία που καλεί τη signal υποχρεώνεται να βγεί αμέσως από τον ελεγκτή (συνεπώς η signal μπορεί να εμφανίζεται μόνο ως τελευταία εντολή μια διαδικασίας ελεγκτή)...ώστε να αποφύγουμε πιθανή συνύπαρξη δύο διεργασιών στον ελεγκτή. 55

56

Μεταβίβαση Μηνύματος Η μέθοδος μεταβίβασης μηνύματος (message passing) υλοποιεί διαδιεργασιακή επικοινωνία με χρήση των SEND και RECEIVE. Οι κλήσεις αυτές συστήματος μπορούν εύκολα να ενσωματωθούν σε διαδικασίες βιβλιοθήκης, όπως: send (destination, &message) receive (source, &message) Αν δεν υπάρχει διαθέσιμο μήνυμα...ο παραλήπτης αναστέλλει τη λειτουργία του... 57

Ζητήματα σχεδίασης σε συστήματα μεταβίβασης μηνύματος Ζήτημα 1: Σε περίπτωση που ανταλλάσσονται μηνύματα στο δίκτυο, πρέπει να επιλυθεί το πρόβλημα που μπορεί να ανακύψει: είτε από την απώλεια ενός μηνύματος είτε από την απώλεια του μηνύματος επιβεβαίωσης λήψης ενός μηνύματος (acknowledgement message) Ζήτημα 2: Πρέπει να επιλυθεί το πρόβλημα της ονοματοδοσίας των διεργασιών. Τα συνήθη προτεινόμενα σχήματα είναι: process@machine process@machine:domain. Ζήτημα 3: Απαιτείται η αμοιβαία επιβεβαίωση της ταυτότητας των επικοινωνούντων σ ένα σύστημα. 58

Το πρόβλημα παραγωγού-καταναλωτή με μεταβίβαση μηνύματος Ο καταναλωτής αποστέλλει Ν άδεια μηνύματα ίδιου μεγέθους προς τον παραγωγό. Όποτε ο παραγωγός έχει έτοιμο ένα δεδομένο, παίρνει άδειο μήνυμα και το στέλνει πίσω γεμάτο. Υπάρχει περίπτωση να αναστείλει τη λειτουργία του είτε ο καταναλωτής, είτε ο παραγωγός, π.χ. Αν ο παραγωγός εργάζεται γρηγορότερα από τον καταναλωτή κάποια στιγμή ο παραγωγός δε θα έχει άδειο μήνυμα και θα ανασταλεί. 59

60

Φράγματα (α) Διεργασίες που πλησιάζουν το φράγμα (β) Όλες οι διεργασίες εκτός από μία έχουν ανασταλεί στο φράγμα (έχουν χρησιμοποιήσει τη κλήση barrier) (γ) φθάνει και η τελευταία διεργασία... και απελευθερώνονται όλες 61

ΠΡΟΒΛΗΜΑΤΑ ΔΙΑΔΕΡΓΑΣΙΑΚΗΣ ΕΠΙΚΟΙΝΩΝΙΑΣ Το πρόβλημα των Συνδαιτυμόνων Φιλοσόφων Οι φιλόσοφοι είτε τρώνε είτε σκέφτονται Χρειάζονται 2 πιρούνια Σηκώνουν ένα πιρούνι τη φορά Πως θα αποφευχθεί το αδιέξοδο ; 62

ΠΡΟΒΛΗΜΑΤΑ ΔΙΑΔΕΡΓΑΣΙΑΚΗΣ ΕΠΙΚΟΙΝΩΝΙΑΣ Το πρόβλημα των Συνδαιτυμόνων Φιλοσόφων Η διαδικασία take_fork αναμένει μέχρι να γίνει διαθέσιμο το συγκεκριμένο πιρούνι...όμως αν όλοι μαζί σηκώσουν το αριστερό πιρούνι...τότε θα έχουμε λιμοκτονία (starvation) Θα μπορούσαμε να ελέγχουμε αν είναι διαθέσιμο το δεξί πιρούνι και αν δεν είναι διαθέσιμο να αφήνει πίσω το αριστερό να περιμένει για λίγο και να ξαναπροσπαθεί... Μήπως να χρησιμοποιήσουμε ένα mutex?? 63

ΠΡΟΒΛΗΜΑΤΑ ΔΙΑΔΕΡΓΑΣΙΑΚΗΣ ΕΠΙΚΟΙΝΩΝΙΑΣ Λύση στο πρόβλημα των Συνδαιτυμόνων Φιλοσόφων 64

ΠΡΟΒΛΗΜΑΤΑ ΔΙΑΔΕΡΓΑΣΙΑΚΗΣ ΕΠΙΚΟΙΝΩΝΙΑΣ Λύση στο πρόβλημα των Συνδαιτυμόνων Φιλοσόφων 65