1 / 110

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

5 . Αμοιβαίος αποκλεισμός. Εισαγωγή Κρίσιμα τμήματα ( Critical Sections) Υλοποίηση του αμοιβαίου αποκλεισμού Προσεγγίσεις λογισμικού Υποστήριξη εκ μέρους του υλικού Σηματοφορείς Κλασσικά προβλήματα συγχρονισμού. 1. Εισαγωγή.

dysis
Download Presentation

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

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 5. Αμοιβαίος αποκλεισμός Εισαγωγή Κρίσιμα τμήματα (Critical Sections) Υλοποίηση του αμοιβαίου αποκλεισμού Προσεγγίσεις λογισμικού Υποστήριξη εκ μέρους του υλικού Σηματοφορείς Κλασσικά προβλήματα συγχρονισμού ΤΕΙΘ-ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ : ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ Ι / 05

  2. 1. Εισαγωγή • Ο αμοιβαίος αποκλεισμός είναι ο αποκλεισμός μιας διεργασίας από μια ενέργεια που επιτελεί ταυτοχρόνως κάποια άλλη διεργασία. • Απαιτεί μόνο μία διεργασία να πραγματοποιεί λειτουργίες σε κοινούς πόρους. Αν δύο διεργασίες προσπαθήσουν να αποκτήσουν ένα κοινό πόρο, τότε η μία θα πρέπει να αναμένει. • Για την αποφυγή των παρενεργειών λόγω ανταγωνισμού είναι ζωτικής σημασίας η πρόβλεψη και η αποτροπή χρήσης διαμοιραζόμενων πόρων από περισσότερες από μια διεργασίες την ίδια χρονική στιγμή. • Είναι απαραίτητος για την προστασία των κρισίμων τμημάτων των διεργασιών. ΤΕΙΘ-ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ : ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ Ι / 05

  3. Η επιλογή των κατάλληλων λειτουργιών για την επίτευξη του αμοιβαίου αποκλεισμού είναι σημαντικό θέμα κατά το σχεδιασμό των Λ.Σ. • Η διαχείριση του αμοιβαίου αποκλεισμού γίνεται μέσω : • Προστασίας πρόσβασης σε πόρους μέσω μηχανισμών συγχρονισμού • Ενδεχόμενου συγχρονισμού (σε πολλές περιπτώσεις) μέσω των κλήσεων συστήματος, χωρίς η μέθοδος αυτή να είναι πάντοτε αποτελεσματική επειδή πολλές κλήσεις συστήματος είναι επανεισαγόμενες (reentrant). • Όταν δύο ή περισσότερες διεργασίες είναι πιθανό να ζητήσουν και να εκτελέσουν συγχρόνως μια κοινή διαδικασία ο κώδικας της διαδικασίας χαρακτηρίζεται ως επανεισαγόμενος. Τέτοιες διαδικασίες πρέπει να χρησιμοποιούν επανεισαγόμενο κώδικα για να αποθηκεύουν τα συγκεκριμένα δεδομένα κάθε διεργασίας σε θέσεις μνήμης που είναι τοπικές στην κάθε διεργασία. ΤΕΙΘ-ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ : ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ Ι / 05

  4. Κατάθεση 100 € Ανάγνωση τρέχοντος υπολοίπου = 500 € Νέο υπόλοιπο= 500 + 100 = 600 Εγγραφή νέου υπολοίπου στο δίσκο = 600 € Απαίτηση ανάληψης 100 € Ανάγνωση τρέχοντος υπολοίπου = 500 € Νέο υπόλοιπο= 500 - 100 = 400 Εγγραφή νέου υπολοίπου στο δίσκο = 400 € Παράδειγμα - 1 Χρονική καθυστέρηση Χρονική καθυστέρηση ΤΕΙΘ-ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ : ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ Ι / 05

  5. Κατάθεση 100 € Απαίτηση για δέσμευση του λογαριασμού Ανάγνωση υπολοίπου από το δίσκο = 500 € υπόλοιπο = 500 + 100 = 600 Εγγραφή νέου υπολοίπου στο δίσκο = 600 € Απελευθέρωση λογαριασμού Απαίτηση ανάληψης 100 € Απαίτηση για κλείδωμα του λογαριασμού Αναμονή Δέσμευση λογαριασμού Ανάγνωση υπολοίπου = 600 Νέο υπόλοιπο = 600 - 100 = 500 Εγγραφή νέου υπολοίπου στο δίσκο = 500 € Παράδειγμα – 1 (συνέχεια) ΤΕΙΘ-ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ : ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ Ι / 05

  6. Άσκηση - 7 Υποθέστε ότι δύο διεργασίες A & B ενημερώνουν έναν κοινό τραπεζικό λογαριασμό (A ανάληψη και B κατάθεση). Αρχικό υπόλοιπολογαριασμού (balance) = 100 € Process AProcess B 1. load R1, balance1. load R3, balance 2. load R2, 502. load R4, 50 3. sub R1, R23. add R3, R4 4. store R1, balance4. store R3, balance Να βρεθούν όλες οι πιθανές τιμές για το υπόλοιπο ΤΕΙΘ-ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ : ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ Ι / 05

  7. Υποθέστε ότι έχουμε τον ακόλουθο κώδικα για τις κινήσεις ενός τραπεζικού λογαριασμού authenticate user open account load R1, balance load R2, amount (- for withdrawal) add R1, R2 store R1, balance close account display account info ΤΕΙΘ-ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ : ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ Ι / 05

  8. Υποθέστε ότι έχουμε τον ακόλουθο κώδικα για τις κινήσεις ενός τραπεζικού λογαριασμού authenticate user open account load R1, balance load R2, amount (- for withdrawal) add R1, R2 store R1, balance close account display account info Critical section ΤΕΙΘ-ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ : ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ Ι / 05

  9. 2. Κρίσιμα τμήματα (Critical Sections) • Μια ακολουθία εντολών μιας διεργασίας που πρέπει να εκτελείται αδιαίρετα, ονομάζεταικρίσιμο τμήμα. • Η εκτέλεση του κρισίμου τμήματος θα πρέπει να είναι “όλα ή τίποτα” • Δεν θα πρέπει να διακόπτεται στο μέσον • Η αποτελεσματικότητα της πολυεπεξεργασίας εξαρτάται από το μήκος του κρίσιμου τμήματος κάθε ανταγωνιστικής διεργασίας και πρέπει να είναι όσο το δυνατόν μικρότερο. • Το πλέον αναποτελεσματικό σενάριο • Όλο το πρόγραμμα είναι ένα κρίσιμο τμήμα – δεν υπάρχει πολυπρογραμματισμός! ΤΕΙΘ-ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ : ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ Ι / 05

  10. Όταν μια διεργασία εκτελεί το κρίσιμο τμήμα της (ΚΤ), σε καμιά άλλη δεν μπορεί να επιτραπεί να εκτελεί το δικό της κρίσιμο τμήμα. • Αν μπορούσε να διασφαλισθεί ότι ποτέ δύο ή περισσότερες διεργασίες δεν θα βρίσκονται ταυτόχρονα σε κρίσιμα τμήματα, τότε θα είχε επιτευχθεί η αποφυγή των συνθηκών ανταγωνισμού. • Ωστόσο αυτό δεν είναι αρκετό για τη σωστή και αποδοτική συνεργασία δύο ή περισσοτέρων παράλληλων διεργασιών. • Μια καλή λύση προϋποθέτει τις παρακάτω συνθήκες : ΤΕΙΘ-ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ : ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ Ι / 05

  11. Συνθήκες για το πρόβλημα του αμοιβαίου αποκλεισμού • Κάθε διεργασία μπορεί να διαιρεθεί σε δύο ακολουθίες (τμήματα ή περιοχές εντολών) : το κρίσιμο τμήμα, δηλ. αυτό που προσπελάζει τον κοινό πόρο και δεν πρέπει να καταμεριστεί και το μη κρίσιμο τμήμα. • Δυο διεργασίες δεν μπορούν να βρίσκονται ταυτόχρονα στα κρίσιμα τμήματά τους. • Μια διεργασία μπορεί να σταματήσει μόνον μέσα στο μη κρίσιμο τμήμα της, χωρίς να επηρεάσει (να αναστείλει) άλλες διεργασίες. • Δεν επιτρέπονται υποθέσεις σε ότι αφορά την ταχύτητα ή το πλήθος των επεξεργαστών. • Όταν μια διεργασία δεν εκτελεί το κρίσιμο τμήμα της δεν μπορεί να αναστείλει την εκτέλεση άλλης διεργασίας. ΤΕΙΘ-ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ : ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ Ι / 05

  12. Το πρόγραμμα δεν επιτρέπεται να καταλήξει σε αδιέξοδο. Αν περισσότερες της μιας διεργασίες προσπαθήσουν να εισέλθουν ταυτόχρονα στις κρίσιμες περιοχές τους, τότε μόνο μια πρέπει να επιτύχει. • Δεν επιτρέπεται η επ’ αόριστον αναμονή μιας διεργασίας, μέχρι να εισέλθει στο κρίσιμο τμήμα της. • Στην περίπτωση έλλειψης συναγωνισμού για ταυτόχρονη είσοδο σε κρίσιμες περιοχές, μια διεργασία που επιθυμεί να εισέλθει στην κρίσιμη περιοχή της θα πρέπει να το επιτύχει με την ελάχιστη δυνατή επιβάρυνση. • Μια διεργασία παραμένει μέσα στο κρίσιμο τμήμα της για ορισμένο χρονικό διάστημα. ΤΕΙΘ-ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ : ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ Ι / 05

  13. Αμοιβαίος αποκλεισμός χρησιμοποιώντας κρίσιμα τμήματα ΤΕΙΘ-ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ : ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ Ι / 05

  14. Κίνδυνοι λόγω του αμοιβαίου αποκλεισμού • Οι λανθασμένες ή ελλιπείς λύσεις στο πρόβλημα του αμοιβαίου αποκλεισμού μπορούν να οδηγήσουν σε • Παρατεταμένη στέρηση (starvation) • Αδιέξοδο (deadlock) • Ανεπάρκεια του συστήματος ΤΕΙΘ-ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ : ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ Ι / 05

  15. 3. Υλοποίηση του αμοιβαίου αποκλεισμού • Προσεγγίσεις λογισμικού με παραχώρηση της ευθύνης στις διεργασίες χωρίς υποστήριξη από τη γλώσσα προγραμματισμού ή το Λ.Σ. (αλγόριθμοι Dekker και Peterson) • Υποστήριξη εκ μέρους του υλικούμε χρήση εντολών μηχανής ειδικού σκοπού (ατομικές λειτουργίες test και set) • Παροχή κάποιου επιπέδου υποστήριξης από το Λ.Σ. ή τη γλώσσα προγραμματισμού : • σηματοφορείς (semaphores), • παρακολουθητές(monitors), • μεταβίβαση μηνυμάτων Όλες οι λύσεις περιλαμβάνουν συνήθως κρίσιμα τμήματα ΤΕΙΘ-ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ : ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ Ι / 05

  16. I. Προσεγγίσεις λογισμικού • Υλοποιούνται για ταυτόχρονες διεργασίες που εκτελούνται σε έναν ή πολλαπλούς επεξεργαστές με διαμοιραζόμενη κύρια μνήμη. • Οι ταυτόχρονες προσβάσεις (ανάγνωσης ή εγγραφής) στην ίδια περιοχή της μνήμης διατάσσονται σειριακά, με κάποιο τρόπο διαχείρισης. Η παραχώρηση της πρόσβασης δεν είναι εκ των προτέρων καθορισμένη. • Δεν υπάρχει υποστήριξη σε επίπεδο υλικού, λειτουργικού συστήματος ή γλώσσας προγραμματισμού. ΤΕΙΘ-ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ : ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ Ι / 05

  17. Ο αλγόριθμος του Dekker • Κάθε προσπάθεια για αμοιβαίο αποκλεισμό πρέπει να στηρίζεται σε βασικούς μηχανισμούς απαγορεύσεων σε επίπεδο υλικού. • Ο πλέον συνήθης : • Σε μια περιοχή (θέση) μνήμης επιτρέπεται μια πρόσβαση κάθε φορά. • Υλοποίηση του αλγορίθμου Dekker με προσπάθειες αυξανόμενης δυσκολίας, όχι πάντοτε ορθές, για την ανίχνευση των λαθών. ΤΕΙΘ-ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ : ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ Ι / 05

  18. Process 0: while (turn != 0) do nothing; <critical section> turn = 1; 1η προσπάθεια var turn: 0..1; /* shared */ Process 1: while (turn != 1) do nothing; <critical section> turn = 0; ΤΕΙΘ-ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ : ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ Ι / 05

  19. Υλοποιείται ο αμοιβαίος αποκλεισμός • Μειονεκτήματα : • Καταναλώνει χρόνο του επεξεργαστή (ενεργός αναμονή) • Αυστηρή εναλλαγή των διεργασιών κατά την εκτέλεση των κρίσιμων τμημάτων τους • Ο ρυθμός εκτέλεσης καθορίζεται από την πιο αργή διεργασία • Αν μια διεργασία αποτύχει η άλλη αναστέλλεται για πάντα, είτε αυτή βρίσκεται στο κρίσιμο τμήμα της, είτε όχι. • Κάθε διεργασία θα πρέπει να έχει το δικό της κλειδί για το κρίσιμο τμήμα έτσι ώστε αν μια διεργασία αποτύχει, η άλλη να μπορεί να έχει πρόσβαση στο κρίσιμο τμήμα της. ΤΕΙΘ-ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ : ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ Ι / 05

  20. Process 0: while (flag[1]) do nothing; flag[0] = true; <critical section> flag[0] = false; 2η προσπάθεια var flag: array[0..1] of Boolean; /* initialize both to false */ /* shared */ Process 1: while (flag[0]) do nothing; flag[1] = true; <critical section> flag[1] = false; ΤΕΙΘ-ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ : ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ Ι / 05

  21. Μια διεργασία μπορεί να μεταβάλλει την κατάστασή της αφού έχει ελεγχθεί από την άλλη, αλλά πριν η άλλη διεργασία εισέλθει στο κρίσιμο τμήμα της. • Παρατηρήσεις : • Αν μια διεργασία αποτύχει στο μη κρίσιμο τμήμα της η άλλη διεργασία δεν αναστέλλεται • Αν μια διεργασία αποτύχει ενώ βρίσκεται στο κρίσιμο τμήμα της, η άλλη διεργασία αναστέλλεται. • Εξασφαλίζεται ο αμοιβαίος αποκλεισμός; ΤΕΙΘ-ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ : ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ Ι / 05

  22. Θεωρείστε την παρακάτω ακολουθία : • Η Process 0 εκτελεί την εντολή while και βρίσκει την τιμή της flag[1] = false • Η Process 1 εκτελεί την εντολή while και βρίσκει την τιμή της flag[0] = false • Η Process 0 θέτει flag[0]=true και εισέρχεται στο κρίσιμο τμήμα της • Η Process 1θέτει flag[1]=true και εισέρχεται στο κρίσιμο τμήμα της • ΚΑΙ ΟΙ ΔΥΟ ΔΙΕΡΓΑΣΙΕΣ ΒΡΙΣΚΟΝΤΑΙ ΣΤΟ ΚΡΙΣΙΜΟ ΤΜΗΜΑ ΤΟΥΣ!!! ΤΕΙΘ-ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ : ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ Ι / 05

  23. Process 0: flag[0] = true; while (flag[1]) do nothing; <critical section> flag[0] = false; 3η προσπάθεια var flag: array[0..1] of Boolean; /* initialize both to false */ /* shared */ Process 1: flag[1] = true; while (flag[0]) do nothing; <critical section> flag[1] = false; ΤΕΙΘ-ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ : ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ Ι / 05

  24. Παρατηρήσεις : • Αν μια διεργασία αποτύχει ενώ βρίσκεται στο κρίσιμο τμήμα της τότε η άλλη διεργασία αναστέλλεται • Μια διεργασία ρυθμίζει την κατάστασή της χωρίς να γνωρίζει την κατάσταση της άλλης διεργασίας. • Εξασφαλίζεται ο αμοιβαίος αποκλεισμός; • Μπορεί να δημιουργηθεί αδιέξοδο; • Αν και οι δύο διεργασίες θέσουν την τιμή TRUE στην flag πριν οποιαδήποτε από τις δύο εκτελέσει την εντολή while τότε η κάθε μια θα θεωρεί ότι η άλλη έχει εισέλθει στο κρίσιμο τμήμα της και έτσι θα προκληθεί ΑΔΙΕΞΟΔΟ ΤΕΙΘ-ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ : ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ Ι / 05

  25. Process 0: flag[0] = true; while (flag[1]) do { flag[0] = false; <delay for short time> flag[0] = true; } <critical section> flag[0] = false; 4η προσπάθεια var flag: array[0..1] of Boolean; /* initialize both to false */ /* shared */ Process 1: flag[1] = true; while (flag[0]) do { flag[1] = false; <delay for short time> flag[1] = true; } <critical section> flag[1] = false; ΤΕΙΘ-ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ : ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ Ι / 05

  26. Παρατηρήσεις : • Κάθε διεργασία είναι έτοιμη να υποχωρήσει στην άλλη διεργασία • Εξασφαλίζεται ο αμοιβαίος αποκλεισμός; • Μπορεί να δημιουργηθεί αδιέξοδο; • Κατάσταση livelock (υπάρχουν πιθανές ακολουθίες εκτέλεσης των διεργασιών που είναι επιτυχείς) ΤΕΙΘ-ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ : ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ Ι / 05

  27. Οι 4 προσπάθειες του αλγορίθμου του Dekker ΤΕΙΘ-ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ : ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ Ι / 05

  28. boolean flag [2]; /* ΑΛΓΟΡΙΘΜΟΣ DEKKER */ int turn; void P0() { while (true) { flag [0] = true; while (flag [1]) if (turn == 1) { flag [0] = false; while (turn == 1) /* do nothing */; flag [0] = true; } /* critical section */; turn = 1; flag [0] = false; /* remainder */; } } ΤΕΙΘ-ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ : ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ Ι / 05

  29. void P1( ) { while (true) { flag [1] = true; while (flag [0]) if (turn == 0) { flag [1] = false; while (turn == 0) /* do nothing */; flag [1] = true; } /* critical section */; turn = 0; flag [1] = false; /* remainder */; } } ΤΕΙΘ-ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ : ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ Ι / 05

  30. void main () { flag [0] = false; flag [1] = false; turn = 1; parbegin (P0, P1); } ΤΕΙΘ-ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ : ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ Ι / 05

  31. parbegin - parend : Οι εντολές parbegin (parallel begin) και parend (parallel end) είναι εντολές υψηλού επιπέδου για την περιγραφή του ταυτοχρονισμού και προτάθηκαν από τον Dijkstra (1965). • Η δήλωση parbegin(P1,P2,..Pn) εκτελεί τα ακόλουθα : • Ανέστειλε την εκτέλεση του κυρίως προγράμματος • Αρχικοποίησε την ταυτόχρονη εκτέλεση όλων των διεργασιών P1,P2,…,Pn. • Όταν ολοκληρωθούν όλες οι διεργασίες P1,P2,…, Pnσυνέχισε το κυρίως πρόγραμμα. ΤΕΙΘ-ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ : ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ Ι / 05

  32. Ο αλγόριθμος του Peterson ΤΕΙΘ-ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ : ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ Ι / 05

  33. ΙΙ. Υποστήριξη εκ μέρους του υλικού • Προβλήματα με τις προσεγγίσεις λογισμικού: • Ενεργός αναμονή (busy waiting) • είναι ο επαναλαμβανόμενος έλεγχος μιας μεταβλητής με αποτέλεσμα να δαπανάται χρόνος της CPU • πρέπει να αποφεύγεται • Σύνθετοι αλγόριθμοι • Και οι δύο αλγόριθμοι (Dekker, Peterson) είναι ορθοί αλλά δουλεύουν μόνον με 2 διεργασίες. Μπορούν να επεκταθούν και σε nδιεργασίες αλλά: • Το πλήθος nπρέπει να είναι εξ αρχής γνωστό • Οι αλγόριθμοι γίνονται ακόμη πιο σύνθετοι • Η εφαρμογή ενός μηχανισμού αμοιβαίου αποκλεισμού είναι ΔΥΣΚΟΛΗ! ΤΕΙΘ-ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ : ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ Ι / 05

  34. Μπορεί το υλικό (hardware) να βοηθήσει; • Μπορεί να κάνει τη λύση περισσότερο αποτελεσματική; • Η λύση θα μπορεί να εφαρμοστεί σε περισσότερες από δύο διεργασίες; • Το υλικό που απαιτείται για να υποστηρίξει κρίσιμα τμήματα πρέπει κατ’ ελάχιστονα έχει: • Αδιαίρετεςεντολές • Ατομικές (atomic) εντολές load, store, test. • Αν δύο ατομικές εντολές εκτελεστούν ταυτόχρονα, πρέπει να συμπεριφερθούν σαν να εκτελούνται σειριακά. • Οι σύγχρονοι μικροεπεξεργαστές διαθέτουν εντολές υλικού που υποστηρίζουν τον αμοιβαίο αποκλεισμό ΤΕΙΘ-ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ : ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ Ι / 05

  35. 1. Απενεργοποίηση Διακοπών while (true) { /* disable interrupts */; /* critical section */; /* enable interrupts */; /* remainder */;} • Οι διακοπές απενεργοποιούνται κατά τη χρονική περίοδο που απαιτείται ο αμοιβαίος αποκλεισμός • Χωρίς διακοπές δεν μπορεί να συμβεί εναλλαγή διεργασιών • Είναι επικίνδυνη: μια διεργασία μπορεί να διακρατήσει όλο το σύστημα • Χρησιμοποιείται σεσυστήματα ειδικής χρήσης με περιορισμένο hardware ΤΕΙΘ-ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ : ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ Ι / 05

  36. Μειονεκτήματα • Έχει υψηλό κόστος • Μειώνεται η αποτελεσματικότητα της εκτέλεσης διότι περιορίζεται η δυνατότητα του επεξεργαστή να εναλλάσσει προγράμματα • Είναι μια χρήσιμη τεχνική για τον πυρήνα, αλλά δεν ενδείκνυται ως γενικός μηχανισμός αμοιβαίου αποκλεισμού για τις διεργασίες χρήστη • Σε συστήματα πολλών επεξεργαστών δεν εγγυάται ο αμοιβαίος αποκλεισμός (γιατί?) • Η απενεργοποίηση διακοπών επηρεάζει μόνον την υπεύθυνη CPU ενώ οι υπόλοιπες επιτρέπουν τη μεταβολή των περιεχομένων της κοινής περιοχής μνήμης. ΤΕΙΘ-ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ : ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ Ι / 05

  37. 2. Ειδικές Εντολές Μηχανής • Πολλές CPU παρέχουν εντολές υλικού για την ανάγνωση, τροποποίηση και την εγγραφή μιας θέσης μνήμης ατομικά. Οι πιο κοινές εντολές με αυτή τη δυνατότητα είναι : • TAS—Test-And-Set (Motorola 68K) • XCHG—exchange (x86) • Η βασική ιδέα είναι η δυνατότητα ανάγνωσης του περιεχομένου μιας θέσης μνήμης και η μεταβολή του, όλα σε έναν μη διακοπτόμενο κύκλο εντολής. • Οι λειτουργίες αυτές πραγματοποιούνται σε ένα κύκλο μηχανής και επομένως δεν υπόκεινται σε παρεμβολέςαπό άλλες εντολές. ΤΕΙΘ-ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ : ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ Ι / 05

  38. Test & Set Instruction /*test & set instruction */ boolean testset (int i) { if (i==0){ i=1; return TRUE; } else{ return FALSE; } } void proc(int i){ while (TRUE){ while (!testset(bolt)) /*critical section*/ bolt = 0; something_else(); } } /*number of processes*/ const int n = 2; int bolt; main(){ int i; i=n; bolt = 0; while (i >0){ init_proc(&proc1(i), …); i--; } } • Η διαμοιραζόμενη μεταβλητή bolt αρχικοποιείται με τιμή 0. • Η μόνη διεργασία που μπορεί να εισέλθει στο κρίσιμο τμήμα της είναι αυτή που βρίσκει την bolt = 0 • Όλες οι διεργασίες που προσπαθούν να εισέλθουν στο κρίσιμο τμήμα τους περιέρχονται σε κατάσταση ενεργού αναμονής • Όταν μια διεργασία εγκαταλείπει το κρίσιμο τμήμα της,επαναφέρει τη bolt = 0. Στο σημείο αυτό μόνο σε μία από τις διεργασίες που είναι σε αναμονή παρέχεται το δικαίωμα πρόσβασης στο κρίσιμο τμήμα της ΤΕΙΘ-ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ : ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ Ι / 05

  39. Exchange Instruction void proc(int i){ int keyi; while (TRUE){ keyi=1; while (keyi != 0){ exchange(keyi, bolt);} /*critical section*/ exchange (keyi, bolt); something_else(); }} /*number of processes*/ const int n = 2; int bolt; main(){ int i; i=n; bolt = 0; while (i >0){ init_proc(&proc1(i), …); i--; } } /*exchange instruction */ void exchange ( int register, int memory) { int temp; temp = memory; memory = register; register = temp; } • Η εντολή εναλλάσσει τα περιεχόμενα ενός καταχωρητή με αυτά μιας θέσης μνήμης. Κατά τη διάρκεια εκτέλεσης της εντολής η πρόσβαση σε αυτή τη θέση μνήμης αποκλείεται για οποιαδήποτε άλλη εντολή. • Η διαμοιραζόμενη μεταβλητή bolt αρχικοποιείται με τιμή 0. Κάθε διεργασία διατηρεί μια τοπική μεταβλητή key που αρχικοποιείται με τιμή 1. • Η μόνη διεργασία που εισέρχεται στο κρίσιμο τμήμα της είναι αυτή που βρίσκει τη μεταβλητή bolt ίση με 0. ΤΕΙΘ-ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ : ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ Ι / 05

  40. Ιδιότητες της προσέγγισης της εντολής μηχανής • Πλεονεκτήματα: • Εφαρμόσιμη σε οποιοδήποτε αριθμό διεργασιών • Μπορεί να χρησιμοποιηθεί με έναν ή πολλούς επεξεργαστές που διαμοιράζονται μια κοινή μνήμη • Απλή και εύκολη στην επαλήθευση • Μπορεί να χρησιμοποιηθεί για να υποστηρίξει πολλαπλά κρίσιμα τμήματα, π.χ. ορίζοντας μια ξεχωριστή μεταβλητή για κάθε κρίσιμο τμήμα. ΤΕΙΘ-ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ : ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ Ι / 05

  41. Μειονεκτήματα: • Απασχόληση ενεργούς αναμονής (busy waiting)– καθώς μια διεργασία αναμένει για πρόσβαση στο κρίσιμο τμήμα, συνεχίζει να καταναλώνει χρόνο του επεξεργαστή • Παρατεταμένη στέρηση είναι πιθανή(starvation) – η επιλογή για είσοδο σε μια διεργασία είναι αυθαίρετη όταν πολλαπλές διεργασίες συναγωνίζονται για να εισέλθουν στο κρίσιμο τμήμα • Πιθανότητα αδιεξόδου – αν μια διεργασία χαμηλής προτεραιότητας P1 εκτελεί την ειδική εντολή μηχανής, εισέρχεται στο κρίσιμο τμήμα της και μια μεγαλύτερης προτεραιότητας διεργασία P2 πάρει τον έλεγχο του επεξεργαστή, η P2 θα περιμένει να αποκτήσει τον έλεγχο του πόρου, εισερχόμενη σε βρόγχο ενεργού αναμονής ΤΕΙΘ-ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ : ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ Ι / 05

  42. Προσεγγίσεις ενεργού αναμονής • Οι διατυπώσεις αμοιβαίου αποκλεισμού που παρουσιάσθηκαν βασίζονται στην ενεργό αναμονή • Η ενεργός αναμονή δεν είναι επιθυμητή. • Υποθέστε ότι τρέχουν δύο διεργασίες • H: high priorityκαι L: low priority • Ο δρομολογητής εκτελεί πάντοτε την H, κάθε φορά που είναι σε κατάσταση ready • Σε μια συγκεκριμένη στιγμή ηLείναι στο κρίσιμο τμήμα της και η Hγίνεταιεκτελέσιμη • Hξεκινά την ενεργό αναμονή περιμένοντας να εισέλθει στο κρίσιμο τμήμα της • Lδεν δρομολογείται ποτέ να εγκαταλείψει το κρίσιμο τμήμα της • υπάρχειαδιέξοδο ΤΕΙΘ-ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ : ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ Ι / 05

  43. Προσεγγίσεις Sleep/Wakeup • Εναλλακτικά στην ενεργό αναμονή, που είναι αναποτελεσματική καιεπιρρεπής σε αδιέξοδα, μπορεί να χρησιμοποιηθεί η sleep/wakeup προσέγγιση • Εφαρμόζεται από τους σημαφόρους ή σηματοφορείς (semaphores) δηλ. γίνεται προσέγγιση χρησιμοποιώντας μηχανισμούς του Λ.Σ. και των γλωσσών προγραμματισμού. ΤΕΙΘ-ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ : ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ Ι / 05

  44. Άσκηση - 8 • Ένας υπολογιστής έχει 3 επαναχρησιμοποιούμενους πόρους Α, Β,C. Τρεις διεργασίες X,Y,Z εκτελούνται στον υπολογιστή και κάθε μια χρησιμοποιεί περιοδικά 2 από τους 3 πόρους. • Η διεργασία Χ αποκτά τον Α, μετά τον Β, χρησιμοποιεί και τους 2 και μετά τους απελευθερώνει • Η διεργασία Υ αποκτά τον Β, μετά τον C, χρησιμοποιεί και τους 2 και μετά τους απελευθερώνει • Η διεργασία Ζ αποκτά τον C, μετά τον A, χρησιμοποιεί και τους 2 και μετά τους απελευθερώνει ΤΕΙΘ-ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ : ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ Ι / 05

  45. Αν δύο από αυτές τις διεργασίες εκτελούνται ταυτόχρονα, μπορεί να συμβεί αδιέξοδο; Αν ναι, περιγράψτε το σενάριο • Περιγράψτε ένα σενάριο στο οποίο προκύπτει αδιέξοδο αν και οι 3 διεργασίες εκτελούνται ταυτόχρονα. • Τροποποιείστε τον αλγόριθμο απόκτησης των πόρων έτσι ώστε να μην υπάρχει αδιέξοδο με την εκτέλεση των 3 διεργασιών. ΤΕΙΘ-ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ : ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ Ι / 05

  46. ΙΙΙ. Σηματοφορείς (semaphores) • Dijkstra (1965) :σχεδίαση του Λ.Σ. ως μια συλλογή συνεργαζόμενων σειριακών διεργασιών μαζί με έναν αποτελεσματικό μηχανισμό για την υποστήριξη της συνεργασίας. Οι μηχανισμοί αυτοί θα χρησιμοποιούνται και από διεργασίες χρηστών, αρκεί να τους παρέχει ο επεξεργαστής και το Λ.Σ. • Η βασική αρχή : δύο ή περισσότερες διεργασίες μπορούν να συνεργαστούν με τη χρήση απλών σημάτων.Κάθε διεργασία επιβάλλεται να σταματήσει σε μια συγκεκριμένη θέση, μέχρι να παραλάβει ένα συγκεκριμένο σήμα. • Για τη δημιουργία σημάτων χρησιμοποιούνται ειδικές μεταβλητές, οι σηματοφορείς ή σημαφόροι. ΤΕΙΘ-ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ : ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ Ι / 05

  47. Ένας σημαφόρος είναι μια μεταβλητή συγχρονισμού που λαμβάνει ακέραιες θετικές τιμές ή μηδέν και μπορεί να αρχικοποιηθεί με μια μη-αρνητική τιμή. • Οι σημαφόροι ανακαλύφθηκαν από τον Dijkstra στα μέσα της δεκαετίας του 1960για να επιλύουν προβλήματα συγχρονισμού μεταξύ διεργασιών • Οι σημαφόροι είναι απλοί και κομψοί και επιλύουν πολλά ενδιαφέροντα προβλήματα και όχι μόνον τον αμοιβαίο αποκλεισμό. • Βασικές (πρωταρχικές) λειτουργίες : • P ή wait • V ή signal ΤΕΙΘ-ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ : ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ Ι / 05

  48. P( semaphore ) - wait: • ατομική λειτουργία που αναμένει για τον σημαφόρο να γίνει θετικός, έπειτα τον μειώνει κατά 1 (“proberen” in Dutch) • V( semaphore ) - signal: • ατομική λειτουργία που αυξάνει τον σημαφόρο κατά 1 ( “verhogen” in Dutch) • οι πρωταρχικές λειτουργίες θεωρούνται ατομικές ΤΕΙΘ-ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ : ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ Ι / 05

  49. Παράδειγμα σημαφόρου • Έστω οι διεργασίες P1 και P2 • στόχος:η διεργασία P2 να εκτελεστεί υποχρεωτικά (δηλ. να εξαναγκαστεί)μετά από την P1 • Χρησιμοποιείται ένας κοινός σημαφόρος με όνομα synchγια να συγχρονίσει τις λειτουργίες των δύο σύγχρονων διεργασιών • Οι εντολέςwait, signalχρησιμοποιούνται για να καθυστερήσουν την P2 μέχρι να ολοκληρωθεί η P1 • Ο σημαφόροςsynchαρχικοποιείται με τιμή 0 ΤΕΙΘ-ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ : ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ Ι / 05 5

  50. P1 P2 αφού synch = 0, παραμένει ανενεργή μέχρις ότου εκτελεστεί η signal στη P1 wait(synch); εντολές της P1 signal(synch); Ολοκλήρωση εκτέλεσης Λαμβάνει signal από P1 εντολές της P2 ΤΕΙΘ-ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ : ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ Ι / 05 6

More Related