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

Μέγεθος: px
Εμφάνιση ξεκινά από τη σελίδα:

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

Transcript

1 Αμοιβαίος αποκλεισμός με κοινή μνήμη 1 lalis@inf.uth.gr

2 Το πρόβλημα Έστω ότι δύο η περισσότερα νήματα επιθυμούν να προσπελάσουν έναν κοινό πόρο, που όμως δεν μπορεί να χρησιμοποιηθεί ταυτόχρονα Η χρήση του πόρου πρέπει να γίνει με κατάλληλο συντονισμό ανάμεσα στα νήματα Η πλέον κλασική περίπτωση: ταυτόχρονη πρόσβαση νημάτων σε κοινή μνήμη (μπορεί να προκύψουν συνθήκες ανταγωνισμού) 2 lalis@inf.uth.gr

3 3

4 Παράδειγμα: κοινή μεταβλητή int i=0; P1: i=i+1 P2: i=i+1 tmp1=i i=tmp1+1 tmp2=i i=tmp2+1 Οι εντολές του ενός νήματος πιθανώς να μην εκτελεστούν συνεχόμενα, χωρίς να μεσολαβήσει ανταγωνιστική εντολή του άλλου νήματος Μπορεί να προκύψει «ασυνέπεια» ως προς την τιμή που θα λάβει η κοινή μεταβλητή i 4 lalis@inf.uth.gr

5 Προσέγγιση Α Έχουμε συνειδητοποιήσει το πρόβλημα Γράφουμε κώδικα που επιτυγχάνει το επιθυμητό αποτέλεσμα ανεξάρτητα από την μη ατομικότητα των εντολών και τις εναλλαγές που ίσως γίνουν κατά την διάρκεια της εκτέλεσης του κώδικα Όμως Ο προγραμματιστής πρέπει να σκέφτεται / λύνει παρόμοια προβλήματα, κάθε φορά από την αρχή Υπάρχουν προβλήματα συγχρονισμού ανάμεσα σε νήματα που δεν μπορούν να λυθούν με απλό τρόπο 5 lalis@inf.uth.gr

6 Προσέγγιση Β Προσπαθούμε να μοντελοποιήσουμε το πρόβλημα και την λύση του με γενικό τρόπο, έτσι ώστε να μπορεί να χρησιμοποιηθεί σε πολλές περιπτώσεις Θετικά Η λύση είναι επαναχρησιμοποιήσιμη Διευκολύνεται η κατασκευή ορθών προγραμμάτων Αρνητικά Η γενική λύση ίσως επιφέρει επιπλέον κόστος εκτέλεσης (overhead) 6 lalis@inf.uth.gr

7 Κρίσιμο τμήμα Έστω ότι ο κώδικας ενός νήματος περιέχει μια ακολουθία εντολών που πρέπει εκτελεστούν χωρίς την παρεμβολή ανταγωνιστικού κώδικα προσοχή: όχι απαραίτητα συνεχόμενα/ατομικά, αρκεί να μην παρεμβληθούν άλλες ανταγωνιστικές εντολές Αυτό το κομμάτι κώδικα ονομάζεται κρίσιμο τμήμα (critical section) Κάθε νήμα μπορεί να έχει πολλά κρίσιμα τμήματα, σε σχέση με ένα ή περισσότερα άλλα νήματα 7 lalis@inf.uth.gr

8 P Q R p1; p2; p3; p4; p5; p6; p7; p8; p9; q1; q2; q3; q4; q5; q6; q7; q8; q9; r1; r2; r3; r4; r5; r6; r7; r8; r9; 8 lalis@inf.uth.gr

9 P Q R p1; p2; p3; p4; p5; p6; p7; p8; p9; q1; q2; q3; q4; q5; q6; q7; q8; q9; r1; r2; r3; r4; r5; r6; r7; r8; r9; 9 lalis@inf.uth.gr

10 P Q R p1; p2; p3; p4; p5; p6; p7; p8; p9; q1; q2; q3; q4; q5; q6; q7; q8; q9; r1; r2; r3; r4; r5; r6; r7; r8; r9; 10 lalis@inf.uth.gr

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

12 int i=0; P1: int k; for (k=0; k<n; k++) { i=i+1; } P2: int k; for (k=0; k<n; k++) { i=i+1; } Επιθυμητή λειτουργικότητα: στο τέλος της εκτέλεσης η i πρέπει να έχει την τιμή 2Ν οι εντολές i=i+1 αποτελούν κρίσιμο τμήμα 12 lalis@inf.uth.gr

13 int i=0; P1: while (i<2*n) { i=i+1; } P2: while (i<2*n) { i=i+1; } Επιθυμητή λειτουργικότητα: στο τέλος της εκτέλεσης η i πρέπει να έχει την τιμή >=2Ν οι εντολές i=i+1 δεν αποτελούν κρίσιμο τμήμα 13 lalis@inf.uth.gr

14 Ιδιότητες της λύσης του ΚΤ 1. Αμοιβαίος αποκλεισμός (mutual exclusion): αν ένα νήμα βρίσκεται μέσα στο ΚΤ του, τότε κανένα άλλο νήμα δεν θα εισέλθει στο δικό του ΚΤ 2. Πρόοδος (progress): αν ένα νήμα επιθυμεί να εισέλθει στο ΚΤ του, τελικά θα το καταφέρει Απουσία αδιεξόδου (no deadlock): δεν υπάρχει περίπτωση τα νήματα να εμποδίζουν το ένα το άλλο από το να εισέλθει στο ΚΤ έτσι ώστε κανένα νήμα να μην καταφέρει ποτέ να εισέλθει στο ΚΤ Απουσία λιμοκτονίας (no starvation): δεν υπάρχει περίπτωση ένα συγκεκριμένο νήμα να μην καταφέρει ποτέ να μπει στο ΚΤ ενώ άλλα νήματα το καταφέρνουν ή δεν ενδιαφέρονται ούτε καν να μπουν στο ΚΤ 14

15 Επιχειρηματολογία ορθότητας λύσεων Απόδειξη μη-ορθότητας: η απόδειξη ότι μια λύση δεν είναι ορθή (ή ότι δεν ικανοποιεί μια από τις επιθυμητές ιδιότητες), μπορεί να γίνει (α) θεωρητικά, ή (β) δίνοντας έστω και ένα σενάριο εκτέλεσης που να αναδεικνύει το πρόβλημα Απόδειξη ορθότητας: η απόδειξη ότι μια λύση είναι σωστή (ή ότι ικανοποιεί όλες τις επιθυμητές ιδιότητες) μπορεί να γίνει (α) θεωρητικά, ή (β) με διεξοδικό έλεγχο όλων των πιθανών/δυνατών σεναρίων εκτέλεσης στο μάθημα δεν θα κάνουμε τίποτα από τα δύο θα δίνεται μια «διαισθητικά σωστή» επιχειρηματολογία 15

16 Κώδικας συγχρονισμού Κώδικας εισόδου: εντολές πριν το ΚΤ, με κύριο σκοπό τον αμοιβαίο αποκλεισμό μεταξύ ανταγωνιστικών νημάτων Κώδικας εξόδου: εντολές μετά το ΚΤ, με κύριο σκοπό την πρόοδο των νημάτων που τυχόν περιμένουν (στον κώδικα εισόδου) Ο κώδικας εισόδου και εξόδου σχεδιάζονται σε στενό συνδυασμό μεταξύ τους Οι λύσεις είναι συχνά συμμετρικές: όλα τα νήματα εκτελούν (σχεδόν) τον ίδιο κώδικα 16

17 P0 P1 EntryCode0 EntryCode1 ΚΤ του P0 CS μας ενδιαφέρει αυτός ο κώδικας CS ΚΤ του P1 ExitCode0 ExitCode1 17

18 P1 P2 P3 P1 P2 P3 1) 2) CS CS P1 P2 P3 P2 P3 3) CS 4) P1 CS P1 18

19 Σημείωση Ο κώδικας εισόδου και ο κώδικας εξόδου αποτελείται (και αυτός) από συμβατικές εντολές Τα πρόβλημα της μη ατομικότητας των εντολών εξακολουθεί να υφίσταται και για τον κώδικα εισόδου/εξόδου όπως και για το κρίσιμο τμήμα Ο κώδικας εισόδου και εξόδου γράφεται με πλήρη επίγνωση της μη ατομικότητας, και έτσι ώστε να ικανοποιούνται οι ιδιότητες του ΚΤ Αυτό δεν είναι τόσο απλό 19

20 Υποθέσεις εργασίας Ένα νήμα που είναι έτοιμο προς εκτέλεση (ready state) κάποια στιγμή θα λάβει τον επεξεργαστή δεν υπάρχει λιμοκτονία σε επίπεδο χρονοπρογραμματισμού Δεν γίνεται καμία υπόθεση για το αν/πότε γίνεται εναλλαγή ανάμεσα στα νήματα, και την σειρά με την οποία θα τους δοθεί ο επεξεργαστής Δεν γίνεται καμία υπόθεση για το αν και πόσες φορές ένα νήμα θα θελήσει να εισέλθει στο ΚΤ Ένα νήμα δεν τερματίζεται κατά την εκτέλεση του κώδικα εισόδου/εξόδου ούτε μέσα στο ΚΤ Ένα νήμα δεν μένει για πάντα μέσα στο ΚΤ Για αρχή, υποθέτουμε μόνο 2 νήματα 20 lalis@inf.uth.gr

21 Αλγόριθμος Α1 int turn=p; P p1: p2: while (turn!=p) nop; p3: CS p4: turn=q; p5: Q q1: q2: while (turn!=q) nop; q3: CS q4: turn=p; q5: Ένα νήμα εισέρχεται στο ΚΤ όταν είναι η σειρά του Όταν βγει από το ΚΤ, δίνει ρητά σειρά στο άλλο νήμα 21 lalis@inf.uth.gr

22 Αλγόριθμος Α1 int turn=p; P p1: p2: while (turn!=p) nop; p3: CS p4: turn=q; p5: Q q1: q2: while (turn!=q) nop; q3: CS q4: turn=p; q5: Ένα νήμα εισέρχεται στο ΚΤ όταν είναι η σειρά του Όταν βγει από το ΚΤ, δίνει ρητά σειρά στο άλλο νήμα Εγγυάται αμοιβαίο αποκλεισμό Εγγυάται απουσία αδιεξόδου Δεν εγγυάται απουσία λιμοκτονίας 22 lalis@inf.uth.gr

23 turn=p p1: p2: while (turn!=p) nop /* turn is P */ p3: CS q1: q1: p3: CS p4: turn=q p5: q1: q1: p2: while (turn!=p) nop /* turn is Q */ p2: while (turn!=p) nop /* turn is Q */ p2: while (turn!=p) nop /* turn is Q */ q1: q1: 23 lalis@inf.uth.gr

24 Αλγόριθμος A2 int turn; P p1: p2: turn=p; p3: while (turn!=p) nop; p4: CS p5: turn=q; p6: Q q1: q2: turn=q; q3: while (turn!=q) nop; q4: CS q5: turn=p; q6: Όπως προηγουμένως, αλλά τώρα κάθε νήμα δίνει προκαταβολικά σειρά στον εαυτό του 24 lalis@inf.uth.gr

25 Αλγόριθμος A2 int turn; P p1: p2: turn=p; p3: while (turn!=p) nop; p4: CS p5: turn=q; p6: Q q1: q2: turn=q; q3: while (turn!=q) nop; q4: CS q5: turn=p; q6: Όπως προηγουμένως, αλλά τώρα κάθε νήμα δίνει προκαταβολικά σειρά στον εαυτό του Δεν εγγυάται αμοιβαίο αποκλεισμό 25 lalis@inf.uth.gr

26 p1: p2: turn=p p3: while (turn!=p) nop /* turn is P */ p4: CS p4: CS p4: CS q1: q1: q2: turn=q q3: while (turn!=q) nop /* turn is Q */ q4: CS q4: CS 26 lalis@inf.uth.gr

27 Αλγόριθμος Β1 boolean wantp=false,wantq=false; P p1: p2: while (wantq) nop; p3: wantp=true; p4: CS p5: wantp=false; p6: Q q1: q2: while (wantp) nop; q3: wantq=true; q4: CS q5: wantq=false; q6: Χρησιμοποιούμε ξεχωριστές μεταβλητές για την πρόθεση εισόδου κάθε νήματος στο ΚΤ Προτού ένα νήμα εισέλθει στο ΚΤ, ελέγχει την πρόθεση του άλλου, και αν ισχύει τότε περιμένει 27 lalis@inf.uth.gr

28 Αλγόριθμος Β1 boolean wantp=false,wantq=false; P p1: p2: while (wantq) nop; p3: wantp=true; p4: CS p5: wantp=false; p6: Q q1: q2: while (wantp) nop; q3: wantq=true; q4: CS q5: wantq=false; q6: Χρησιμοποιούμε ξεχωριστές μεταβλητές για την πρόθεση εισόδου κάθε νήματος στο ΚΤ Προτού ένα νήμα εισέλθει στο ΚΤ, ελέγχει την πρόθεση του άλλου, και αν ισχύει τότε περιμένει Δεν εγγυάται αμοιβαίο αποκλεισμό 28 lalis@inf.uth.gr

29 wantp=false, wantq=false p1: p1: p2: while (wantq) nop /* wantq is false */ q1: q1: q2: while (wantp) nop /* wantp is false */ q3: wantq=true q4: CS q4: CS q4: CS p3: wantp=true p4: CS p4: CS p4: CS 29

30 Αλγόριθμος B2 boolean wantp=false,wantq=false; P p1: p2: wantp=true; p3: while (wantq) nop; p4: CS p5: wantp=false; p6: Q q1: q2: wantq=true; q3: while (wantp) nop; q4: CS q5: wantq=false; q6: Όπως προηγουμένως, αλλά τώρα κάθε νήμα δηλώνει τον πρόθεση του να εισέλθει στο ΚΤ προτού ελέγξει την πρόθεση του άλλου νήματος 30 lalis@inf.uth.gr

31 Αλγόριθμος B2 boolean wantp=false,wantq=false; P p1: p2: wantp=true; p3: while (wantq) nop; p4: CS p5: wantp=false; p6: Q q1: q2: wantq=true; q3: while (wantp) nop; q4: CS q5: wantq=false; q6: Όπως προηγουμένως, αλλά τώρα κάθε νήμα δηλώνει τον πρόθεση του να εισέλθει στο ΚΤ προτού ελέγξει την πρόθεση του άλλου νήματος Εγγυάται αμοιβαίο αποκλεισμό Δεν εγγυάται απουσία αδιεξόδου 31 lalis@inf.uth.gr

32 wantp=false, wantq=false p1: p1: p2: wantp=true q1: q1: q2: wantq=true q3: while (wantp) nop /* wantp is true */ q3: while (wantp) nop /* wantp is true */ q3: while (wantp) nop /* wantp is true */ p3: while (wantq) nop /* wantq is true */ p3: while (wantq) nop /* wantq is true */ p3: while (wantq) nop /* wantq is true */ q3: while (wantp) nop /* wantp is true */ q3: while (wantp) nop /* wantp is true */ q3: while (wantp) nop /* wantp is true */ p3: while (wantq) nop /* wantq is true */ p3: while (wantq) nop /* wantq is true */ p3: while (wantq) nop /* wantq is true */ 32

33 Αλγόριθμος B3 boolean wantp=false,wantq=false; P Q p1: p2: wantp=true; p3: while (wantq) { p4: wantp=false; p5: wantp=true; } p6: CS p7: wantp=false; p8: q1: q2: wantq=true; q3: while (wantp) { q4: wantq=false; q5: wantq=true; } q6: CS q7: wantq=false; q8: Όπως προηγουμένως, αλλά κατά την αναμονή γίνεται προσωρινή «παραίτηση» από την πρόθεση εισόδου 33 lalis@inf.uth.gr

34 Αλγόριθμος B3 boolean wantp=false,wantq=false; P p1: p2: wantp=true; p3: while (wantq) { p4: wantp=false; p5: wantp=true; } p6: CS p7: wantp=false; p8: Q q1: q2: wantq=true; q3: while (wantp) { q4: wantq=false; q5: wantq=true; } q6: CS q7: wantq=false; q8: Όπως προηγουμένως, αλλά κατά την αναμονή γίνεται προσωρινή «παραίτηση» από την πρόθεση εισόδου Εγγυάται αμοιβαίο αποκλεισμό γιατί; Δεν εγγυάται πρόοδο γιατί; 34 lalis@inf.uth.gr

35 wantp=false, wantq=false p1: p2: wantp=true q1: q2: wantq=true q3: while (wantp) /* wantp is true */ q4: wantq=false q5: wantq=true p3: while (wantq) {} /* wantq is true */ p4: wantp=false p5: wantp=true p3: while (wantq) {} /* wantq is true */ q3: while (wantp) {} /* wantp is true */ q4: wantq=false q5: wantq=true p4: wantp=false p5: wantp=true p3: while (wantq) {} /* wantq is true */ 35

36 Παρατηρήσεις H λύση είναι τυπικά λανθασμένη Παρόλα αυτά, μια τέτοια «ατυχής» εναλλαγή θα μπορούσε να θεωρηθεί εντελώς απίθανη στην πράξη η λύση θα μπορούσε να χαρακτηριστεί ως ικανοποιητική (τουλάχιστον για μη-κρίσιμα συστήματα) Όμως, αυτή η υπόθεση απαιτεί προσοχή Π.χ. αν γίνεται συστηματική εναλλαγή κάθε εντολή υπάρχει σίγουρο αδιέξοδο Μπορεί να μειωθεί η πιθανότητα μιας «ατυχούς» εκτέλεσης, έτσι ώστε η λύση να δουλεύει σωστά με μεγάλη πιθανότητα; 36 lalis@inf.uth.gr

37 Αλγόριθμος B4 boolean wantp=false,wantq=false; P p1: p2: wantp=true; p3: while (wantq) { p4: wantp=false; p5: sleep(random); p6: wantp=true; } p7: CS p8: wantp=false; p9: Q q1: q2: wantq=true; q3: while (wantp) { q4: wantq=false; q5: sleep(random); q6: wantq=true; } q7: CS q8: wantq=false; q9: Υπάρχει εγγύηση προόδου; 37 lalis@inf.uth.gr

38 Αλγόριθμος B5 boolean wantp=false,wantq=false; P p1: p2: wantp=true; p3: while (wantq) { p4: wantp=false; p5: while (wantq) nop; p6: wantp=true; } p7: CS p8: wantp=false; p9: Q q1: q2: wantq=true; q3: while (wantp) { q4: wantq=false; q5: nop; q6: wantq=true; } q7: CS q8: wantq=false; q9: Υπάρχει εγγύηση προόδου; 38 lalis@inf.uth.gr

39 Αλγόριθμος B6 boolean wantp=false,wantq=false; P p1: p2: wantp=true; p3: while (wantq) { p4: wantp=false; p5: while (wantq) nop; p6: wantp=true; } p7: CS p8: wantp=false; p9: Q q1: q2: wantq=true; q3: while (wantp) { } q4: CS q5: wantq=false; q6: Υπάρχει εγγύηση προόδου; 39 lalis@inf.uth.gr

40 Παρατήρηση Πως μπορούμε να εγγυηθούμε ότι το νήμα που παραχωρεί την θέση του δεν θα προσπερνιέται επ άπειρο από το άλλο νήμα, σε περίπτωση συνεχούς ανταγωνισμού; Επαναφέρουμε την ιδέα του αλγορίθμου Α1, δηλαδή την αυστηρά εναλλάξ σειρά εισόδου στο ΚΤ Αυτή το φορά, μόνο αν υπάρχει ανταγωνισμός το γνωρίζουμε λόγω των μεταβλητών wantp/wantq 40

41 Αλγόριθμος Dekker int turn=p; boolean wantp=false,wantq=false; P p1: p2: wantp=true; p3: while (wantq) { p4: if (turn!=p) { p5: wantp=false; p6: while (turn!=p) nop; p7: wantp=true; } } p8: CS p9: turn=q; p10: wantp=false; p11: Q q1: q2: wantq=true; q3: while (wantp) { q4: if (turn!=q) { q5: wantq=false; q6: while (turn!=q) nop; q7: wantq=true; } } q8: CS q9: turn=p; q10: wantq=false; q11: 41 lalis@inf.uth.gr

42 Σενάριο προσπεράσματος Ο αλγόριθμος δεν αποκλείει πλήρως το προσπέρασμα (αλλά αυτό δεν μπορεί να γίνεται για πάντα) Αν ένα νήμα αποσύρει την πρόθεση του και μετά χάσει τον επεξεργαστή, μπορεί να προσπεραστεί παρότι είναι η σειρά του να μπει στο ΚΤ Αυτό το σενάριο δεν είναι όντως προβληματικό Έχουμε υποθέσει ότι τα νήματα λαμβάνουν τακτικά τον επεξεργαστή Από την στιγμή που το νήμα λάβει τον επεξεργαστή, θα δει ότι είναι η σειρά του, θα επαναφέρει την πρόθεση του για είσοδο στο ΚΤ, και στην συνέχεια θα μπει στο ΚΤ με την σειρά του 42

43 Ένας ακόμα αλγόριθμος Συνδυασμός ελέγχου των δύο συνθηκών εισόδου που υπάρχουν ήδη στον αλγόριθμο του Dekker 1) Μήπως επιχειρεί και το άλλο νήμα να μπει στο ΚΤ αυτή τη στιγμή; 2) Μήπως είναι η σειρά μου να μπω στο ΚΤ; Μόνο ένας βρόγχος αναμονής, μέσω του οποίου πραγματοποιούνται και οι δύο παραπάνω έλεγχοι 48

44 Μια πρώτη απόπειρα int turn=p; int wantp=false,wantq=false; P wantp=true; while (wantq) { if (turn==p) { break; } } Q wantq=true; while (wantp) { if (turn==q) { break; } } CS CS turn=q; wantp=false; turn=p; wantq=false; 49 lalis@inf.uth.gr

45 Μια πρώτη απόπειρα int turn=p; int wantp=false,wantq=false; P wantp=true; while (wantq) { if (turn==p) { break; } } Q wantq=true; while (wantp) { if (turn==q) { break; } } CS CS turn=q; wantp=false; turn=p; wantq=false; Γιατί αυτή η λύση δεν είναι σωστή; 50 lalis@inf.uth.gr

46 Αλγόριθμος Peterson int turn; int wantp=false,wantq=false; P wantp=true; turn=q; while (wantq) { if (turn==p) { break; } } Q wantq=true; turn=p; while (wantp) { if (turn==q) { break; } } CS CS wantp=false; wantq=false; 51 lalis@inf.uth.gr

47 Αλγόριθμος Peterson int turn; int wantp=false,wantq=false; P wantp=true; turn=q; while ((wantq) && (turn!=p)) {} Q wantq=true; turn=p; while ((wantp) && (turn!=q)) {} CS CS wantp=false; wantq=false; 52 lalis@inf.uth.gr

48 Παρατήρηση Όπως και στον A2, και τα δύο νήματα αλλάζουν και ελέγχουν την turn ταυτόχρονα μεταξύ τους Αντίθετα με τον A2, σε αυτή την περίπτωση είναι εγγυημένος ο αμοιβαίος αποκλεισμός γιατί όταν ένα νήμα αλλάζει την turn τότε δίνει προτεραιότητα στο άλλο (και όχι στον εαυτό του) Ο αλγόριθμος δεν θα ήταν σωστός αν κάθε νήμα που επιχειρεί να εισέλθει στο ΚΤ έδινε προτεραιότητα στον εαυτό του (Α2) η αλλαγή της turn (υπέρ του άλλου νήματος) γινόταν μετά την έξοδο από το ΚΤ (Α1) 53

49 Αλγόριθμος Bakery (Lamport) Σε περίπτωση ανταγωνισμού, η προτεραιότητα καθορίζεται μέσω ενός εισιτηρίου (ticket) t[i] Αν το Pi δεν έχει πρόθεση να μπει στο ΚΤ, t[i]==0 Διαφορετικά, το Pi λαμβάνει το εισιτήριο του t[i] αυξάνοντας κατά 1 το εισιτήριο t[(i+1)%2] του ανταγωνιστικού νήματος P(i+1)%2 Το νήμα με τον μικρότερο αριθμό εισέρχεται στο ΚΤ Δεν υπάρχει περίπτωση ένα νήμα να εισέλθει δύο συνεχόμενες φορές στο ΚΤ ενώ περιμένει το άλλο Στην δεύτερη απόπειρα θα λάβει σίγουρα μεγαλύτερο αριθμό εισιτηρίου από το νήμα που ήδη περιμένει να μπει στο ΚΤ 54 lalis@inf.uth.gr

50 Σύγκριση εισιτηρίων / προτεραιότητας bool priority(i) { if (t[i]==0) // Pi not competing => I have priority return(false); else if (t[self]<t[i]) // I have priority return(false); else if (t[self]>t[i]) // Pi has priority return(true); else // same ticket nr => tie-break based on ids return(self>i); } Λόγω ταυτόχρονης εκτέλεσης, διαφορετικά νήματα μπορεί να έχουν τον ίδιο αριθμό εισιτηρίου > 0 Για να σπάσει το αδιέξοδο, προτεραιότητα εισόδου στο ΚΤ δίνεται στο νήμα με το μικρότερο αναγνωριστικό 55 lalis@inf.uth.gr

51 Αλγόριθμος Bakery / FIFO (Lamport) int t[2]={0,0}; bool taking[2]={false,false}; P0: taking[0]=true; t[0] = t[1] + 1; taking[0]=false; while (taking[1]) {} while (priority(1)) {} CS0 t[0]=0; P1 taking[1]=true; t[1] = t[0] + 1; taking[1]=false; while (taking[0]) {} while (priority(0)) {} CS1 t[1]=0; 56 lalis@inf.uth.gr

52 Η μεταβλητή taking Αν taking[i]==true, το εισιτήριο του Pi βρίσκεται υπό κατασκευή, και δεν μπορεί να χρησιμοποιηθεί για τον έλεγχο προτεραιότητας Αν taking[i]==false, το εισιτήριο του Pi μπορεί να χρησιμοποιηθεί με ασφάλεια για τον έλεγχο προτεραιότητας Αν, αφού ένα νήμα ελέγξει ότι taking[i]==false, αλλά προτού ελέγξει την προτεραιότητα, το Pi βγάλει εισιτήριο, αυτό θα είναι εγγυημένα μεγαλύτερο από το εισιτήριο του άλλου νήματος Προσοχή: αυτό δεν εμποδίζει τα δύο νήματα να κατασκευάσουν τα εισιτήρια τους ταυτόχρονα 57

53 Αλγόριθμος Bakery / FIFO (Lamport) int t[2]={0,0}; int taking[2]={false,false}; P0: taking[0]=true; tmp0 = t[1]; t[0] = tmp0 + 1; taking[0]=false; while (taking[1]) {} while (priority(1)) {} CS0 t[0]=0; P1: taking[1]=true; tmp1 = t[0]; t[1] = tmp1 + 1; taking[1]=false; while (taking[0]) {} while (priority(0)){} CS1 t[1]=0; 58 lalis@inf.uth.gr

54 Χωρίς την «προστασία» της taking t[0]=0, t[1]=0 P0: tmp0=t[1] /* tmp0 is 0 */ P1: tmp1=t[0] /* tmp1 is 0 */ P1: t[1]=tmp1+1 /* t[1] is 1 */ P1: while (priority(0)) /* false */ P1: CS P0: t[0]=tmp0+1 /* t[0] is 1 */ P0: while(priority(1)) /* false */ P0: CS 59 lalis@inf.uth.gr

55 Αλγόριθμος Bakery για Ν νήματα int t[ν]={0,,0}; int taking[ν]={false,,false}; Pi taking[i]=true; t[i] = max(t[0],t[1],, t[n-1]) + 1; taking[i]=false; for (j=0; j<ν; j++) { while (taking[j]) {} while (priority(j)) {} } CS t[i]=0; 60 lalis@inf.uth.gr

56 Παρατηρήσεις Οι προηγούμενες λύσεις βασίζονται αποκλειστικά σε συμβατικό κώδικα (είναι γενικότερα εφαρμόσιμες) Χωρίς να γίνεται καμία (περιοριστική) υπόθεση εργασίας για την εκτέλεση των νημάτων Χωρίς να υπάρχει κανένας έλεγχος της εναλλαγής Χωρίς να γίνεται χρήση ειδικών εντολών υλικού Όμως: Για κάθε ΚΤ χρειάζεται ξεχωριστό σετ μεταβλητών Υπάρχει ενεργή αναμονή Ο αριθμός των ανταγωνιστικών νημάτων ανά ΚΤ πρέπει να είναι γνωστός εκ των προτέρων 61

57 Ειδικές εντολές σε επίπεδο υλικού Οι επεξεργαστές προσφέρουν ειδικές ατομικές εντολές που μπορεί να χρησιμοποιηθούν για τον συγχρονισμό ανάμεσα σε νήματα με κοινή μνήμη Π.χ. test-and-set ή compare-and-swap int TAS(int *v) { int oldv; int CAS(int* v, int curv, int newv) { int oldv; } ATOMIC oldv=*v; *v=1; END_ATOMIC return(oldv); } ATOMIC oldv = *v; if (oldv == curv) *v=newv; END_ATOMIC return(oldv); 62 lalis@inf.uth.gr

58 Κρίσιμο τμήμα με TAS και CAS int lock=0; Pi: while (TAS(&lock)){} CS lock = 0; int lock=0; Pi: while (CAS(&lock,0,1)){} CS lock = 0; 63 lalis@inf.uth.gr

59 Κρίσιμο τμήμα με TAS και CAS int lock=0; Pi: while (TAS(&lock)){} CS lock = 0; int lock=0; Pi: while (CAS(&lock,0,1)){} CS lock = 0; Η λύση ισχύει για άγνωστο αριθμό νημάτων Δεν εγγυάται πρόοδο γιατί; 64 lalis@inf.uth.gr

60 Χωρίς ενεργή αναμονή 65

61 Ενεργή αναμονή (busy waiting) Κατά την αναμονή στον κώδικα εισόδου τα νήματα ξοδεύουν χρόνο του επεξεργαστή χωρίς νόημα «σπινάρουν» γύρω από την μια συνθήκη αναμονής που δεν μπορεί να αλλάξει όσο κρατάνε τον επεξεργαστή Αυτό καθυστερεί την πρόοδο των υπολοίπων νημάτων συμπεριλαμβανομένου και του νήματος που βρίσκεται μέσα στο ΚΤ Όσο περισσότερα νήματα εκτελούν ενεργή αναμονή, τόσο πιο αργά προοδεύει το νήμα που βρίσκεται μέσα στο ΚΤ και τόσο πιο αργά θα ελευθερωθεί το ΚΤ για να μπορέσει να εισέλθει το επόμενο νήμα 66

62 P0 P1 P0: CS0 P0: CS0 P0: CS0 P1: while () P1: while () P1: while () P0: CS0 P0: CS0 P0: CS0 P1: while () P1: while () P1: while () P0: CS0 P0: CS0 P0: CS0 P1: while () 67

63 Εθελοντική (ρητή) εναλλαγή Όσο ισχύει η συνθήκη αναμονής, το νήμα μπορεί να παραχωρήσει (εθελοντικά) την CPU ώστε να συνεχιστεί η εκτέλεση ενός άλλου νήματος που μπορεί να προοδεύσει, όπως το νήμα που βρίσκεται στο ΚΤ Ο χαμένος χρόνος της CPU μειώνεται σημαντικά χωρίς ρητή εναλλαγή while (<cond>) {} CS falsify <cond> με ρητή εναλλαγή while (<cond>) {yield();} CS falsify <cond> yield(); /* be nice */ 68

64 P0 P1 P0: CS0 P0: CS0 P0: CS0 P1: while () yield() P0: CS0 P0: CS0 P0: CS0 P1: while () yield() P0: CS0 P0: CS0 P0: CS0 P1: while () yield() P0: CS0 P0: CS0 P0: CS0 P1: while () yield() P0: CS0 69

65 Χωρίς ενεργή αναμονή Η ρητή παραχώρηση του επεξεργαστή δεν λύνει εντελώς το πρόβλημα της ενεργής αναμονής Απλά το κάνει λιγότερο επώδυνο Εξακολουθεί να χάνεται χρόνος του επεξεργαστή για τον έλεγχο της συνθήκης αναμονής και την εναλλαγή Το ιδανικό Τα νήματα να απενεργοποιούνται πλήρως, μέχρι να έρθει η σειρά τους να εισέλθουν στο ΚΤ 70

66 Απαλοιφή ενεργής αναμονής Έστω ότι το σύστημα εκτέλεσης παρέχει ειδικές λειτουργίες αναμονής/αφύπνισης WAIT / WAKEUP Η απαλοιφή της ενεργής αναμονής φαίνεται μάλλον εύκολη υπόθεση Αντί το νήμα να ελέγχει συνεχώς/ενεργά την συνθήκη, καλεί την WAIT και μπαίνει σε αναμονή Αντίστοιχα, όταν ένα νήμα αλλάζει την συνθήκη, αφυπνίζει με την WAKEUP το νήμα που περιμένει Όμως, λύσεις τέτοιου τύπου είναι ιδιαίτερα ευάλωτες σε συνθήκες ανταγωνισμού 71 lalis@inf.uth.gr

67 int locked=0; Queue q; INIT(q); Pi: if (TAS(&locked)) { WAIT(q); } CS Γιατί αυτή η λύση δεν είναι σωστή; locked=0; WAKEUP(q); 72 lalis@inf.uth.gr

68 int locked=0; Queue q; INIT(q); Pi: while (TAS(&locked)) { WAIT(q); } CS Γιατί αυτή η λύση δεν είναι σωστή; locked=0; WAKEUP(q); 73 lalis@inf.uth.gr

69 Υποστήριξη συγχρονισμού σε ψηλό επίπεδο Ο έλεγχος της εναλλαγής και η εγγύηση ατομικής εκτέλεσης κώδικα υπάρχει συνήθως ως δυνατότητα μόνο στο επίπεδο/περιβάλλον που υλοποιεί τους μηχανισμούς της ταυτόχρονης εκτέλεσης, π.χ., λειτουργικό, βιβλιοθήκη νημάτων, Με την σειρά τους, τα περιβάλλοντα εκτέλεσης παρέχουν στον προγραμματιστή άλλα «εργαλεία» συγχρονισμού (σηματοφόροι, ελεγκτές, κλπ) που μπορεί να χρησιμοποιηθούν για να λυθούν τα προβλήματα συγχρονισμού, όπως το ΚΤ, χωρίς ενεργή αναμονή 74

70 Η ενεργή αναμονή μπορεί να είναι καλή ιδέα Σε συστήματα με πολλές CPU, η ενεργή αναμονή (μέσω spinlocks) είναι λιγότερο προβληματική Απλά χάνεται ο χρόνος της CPU που τρέχει το νήμα που πραγματοποιεί ενεργή αναμονή (χωρίς να υπάρχει το κόστος μιας εναλλαγής) όμως δημιουργείται κίνηση προς την κοινή μνήμη Αν η πιθανότητα ανταγωνισμού είναι μικρή και η παραμονή των νημάτων στο ΚΤ είναι σύντομη, η ενεργή αναμονή μπορεί να είναι πιο αποδοτική από αναστολή/επαναφορά νημάτων μέσω κλήσεων συστήματος 75

71 P1 P2 L1 TAS lock,tmp cmp tmp,0 brneq L1 // CS store 0,lock CPU lock shared memory L1 TAS lock,tmp cmp tmp,0 brneq L1 // CS store 0,lock CPU P1 P2 lock unlock lock unlock lock unlock CS CS spin CS lock unlock lock unlock lock unlock spin CS CS CS Προγραμματισμός ΙΙΙ 76

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

Αμοιβαίος αποκλεισμός με κοινή μνήμη. Ταυτόχρονος Προγραμματισμός 1 Αμοιβαίος αποκλεισμός με κοινή μνήμη 1 lalis@inf.uth.gr Το πρόβλημα Έστω ότι δύο η περισσότερα νήματα επιθυμούν να προσπελάσουν έναν κοινό πόρο, που όμως δεν μπορεί να χρησιμοποιηθεί ταυτόχρονα Η χρήση

Διαβάστε περισσότερα

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

Αμοιβαίος αποκλεισμός με κοινή μνήμη. Ταυτόχρονος Προγραμματισμός 1 Αμοιβαίος αποκλεισμός με κοινή μνήμη 1 lalis@inf.uth.gr Το πρόβλημα Έστω ότι δύο η περισσότερα νήματα επιθυμούν να προσπελάσουν έναν κοινό πόρο, που όμως δεν μπορεί να χρησιμοποιηθεί ταυτόχρονα Η χρήση

Διαβάστε περισσότερα

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

Προβλήματα ταυτόχρονης εκτέλεσης (για νήματα με κοινή μνήμη) Προβλήματα ταυτόχρονης εκτέλεσης (για νήματα με κοινή μνήμη) ΙΙΙ 1 lalis@inf.uth.gr Ταυτόχρονη εκτέλεση Ο προγραμματιστής δεν ελέγχει (άμεσα) την εκτέλεση/εναλλαγή των νημάτων Δεν γνωρίζει πότε θα αρχίσει

Διαβάστε περισσότερα

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

Ελεγκτές/Παρακολουθητές (Monitors) Ταυτόχρονος Προγραμματισμός 1 Ελεγκτές/Παρακολουθητές (Monitors) 1 lalis@inf.uth.gr Ελεγκτές Αμοιβαίος αποκλεισμός στο πλαίσιο ενός τμήματος λογισμικού που προσπελάζεται με δομημένο τρόπο, μέσω προκαθορισμένης διασύνδεσης (API) Ο συγχρονισμός

Διαβάστε περισσότερα

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

Προβλήματα ταυτόχρονης εκτέλεσης (για νήματα με κοινή μνήμη) Προβλήματα ταυτόχρονης εκτέλεσης (για νήματα με κοινή μνήμη) ΙΙΙ 1 lalis@inf.uth.gr Υποθέσεις εργασίας Νήματα/διεργασίες με κοινή μνήμη Αυτόματη διακοπή/εναλλαγή νημάτων/διεργασιών (π.χ. πάνω από 1 CPU

Διαβάστε περισσότερα

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

Προβλήματα ταυτόχρονης εκτέλεσης (για νήματα με κοινή μνήμη) Προβλήματα ταυτόχρονης εκτέλεσης (για νήματα με κοινή μνήμη) ΙΙΙ 1 lalis@inf.uth.gr Υποθέσεις εργασίας Νήματα/διεργασίες με κοινή μνήμη Αυτόματη διακοπή/εναλλαγή νημάτων/διεργασιών (π.χ. πάνω από 1 CPU

Διαβάστε περισσότερα

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

Προβλήματα ταυτόχρονης εκτέλεσης (για νήματα με κοινή μνήμη) Προβλήματα ταυτόχρονης εκτέλεσης (για νήματα με κοινή μνήμη) ΙΙΙ 1 lalis@inf.uth.gr Υποθέσεις εργασίας Νήματα/διεργασίες με κοινή μνήμη Αυτόματη διακοπή/εναλλαγή νημάτων/διεργασιών (π.χ. πάνω από 1 CPU

Διαβάστε περισσότερα

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

Λειτουργικά Συστήματα Η/Υ Λειτουργικά Συστήματα Η/Υ Κεφάλαιο 5 «Αμοιβαίος Αποκλεισμός» Διδάσκων: Δ Λιαροκάπης Διαφάνειες: Π. Χατζηδούκας 1 Αμοιβαίος Αποκλεισμός 1. Εισαγωγή 2. Κρίσιμα τμήματα (Critical Sections) 3. Υλοποίηση του

Διαβάστε περισσότερα

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

Κρίσιμη Περιοχή Υπό Συνθήκη (Conditional Critical Regions) Ταυτόχρονος Προγραμματισμός 1 Κρίσιμη Περιοχή Υπό Συνθήκη (onditional ritical Regions) Ταυτόχρονος Προγραμματισμός 1 lalis@inf.uth.gr Πέρα από ελεγκτές Ο ελεγκτής είναι χρήσιμο εργαλείο συγχρονισμού παρέχει στον προγραμματιστή εγγυημένο

Διαβάστε περισσότερα

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

Σηματοφόροι (Σηματοφορείς) Ταυτόχρονος Προγραμματισμός 1 Σηματοφόροι (Σηματοφορείς) 1 lalis@inf.uth.gr Αποφυγή ενεργής αναμονής if () { WAIT(); Μπορεί να γίνει εναλλαγή αφού το νήμα κάνει τον έλεγχο της συνθήκης αναμονής και την βρει αληθή, αλλά προτού αυτό

Διαβάστε περισσότερα

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

Λειτουργικά Συστήματα 1 Ελληνική Δημοκρατία Τεχνολογικό Εκπαιδευτικό Ίδρυμα Ηπείρου Λειτουργικά Συστήματα Ενότητα 5 : Αμοιβαίος Αποκλεισμός Δημήτριος Λιαροκάπης 2 Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου Τμήμα Μηχανικών

Διαβάστε περισσότερα

Συστηματικός έλεγχος ορθότητας ταυτόχρονων προγραμμάτων μέσω γράφου καταστάσεων

Συστηματικός έλεγχος ορθότητας ταυτόχρονων προγραμμάτων μέσω γράφου καταστάσεων Συστηματικός έλεγχος ορθότητας ταυτόχρονων προγραμμάτων μέσω γράφου καταστάσεων ΙΙΙ 1 lalis@inf.uth.gr Ιδιότητες προγραμμάτων Ιδιότητα ασφάλειας (safety): ποτέ δεν θα φτάσουμε σε μια κατάσταση που είναι

Διαβάστε περισσότερα

Dr. Garmpis Aristogiannis - EPDO TEI Messolonghi

Dr. Garmpis Aristogiannis - EPDO TEI Messolonghi Προϋποθέσεις για Αµοιβαίο Αποκλεισµό Μόνο µία διεργασία σε κρίσιµο τµήµασεκοινό πόρο Μία διεργασία που σταµατά σε µη κρίσιµο σηµείο δεν πρέπει να επιρεάζει τις υπόλοιπες διεργασίες εν πρέπει να υπάρχει

Διαβάστε περισσότερα

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

Σηματοφόροι (Σηματοφορείς) Ταυτόχρονος Προγραμματισμός 1 Σηματοφόροι (Σηματοφορείς) 1 lalis@inf.uth.gr Αποφυγή ενεργής αναμονής εναλλαγή if/while () { WAIT(); Μπορεί να γίνει εναλλαγή αφού το νήμα κάνει τον έλεγχο της συνθήκης αναμονής και την βρει αληθή, αλλά

Διαβάστε περισσότερα

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

Υλοποίηση Σηματοφόρων Υλοποίηση Σηματοφόρων 1 lalis@inf.uth.gr Υλοποίηση σε επίπεδο συστήματος Εσωτερική κατάσταση: Ένας ακέραιος για την αποθήκευση της τιμής του σηματοφόρου Μια ουρά αναμονής που τοποθετείται ένα νήμα όταν

Διαβάστε περισσότερα

Συστηματικός έλεγχος ορθότητας ταυτόχρονων προγραμμάτων μέσω γράφου καταστάσεων

Συστηματικός έλεγχος ορθότητας ταυτόχρονων προγραμμάτων μέσω γράφου καταστάσεων Συστηματικός έλεγχος ορθότητας ταυτόχρονων προγραμμάτων μέσω γράφου καταστάσεων ΙΙΙ 1 lalis@inf.uth.gr Ιδιότητες προγραμμάτων Ιδιότητα ασφάλειας (safety properties): δεν θα φτάσουμε ποτέ σε μια ανεπιθύμητη

Διαβάστε περισσότερα

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

Ελεγκτές/Παρακολουθητές (Monitors) Ταυτόχρονος Προγραμματισμός 1 Ελεγκτές/Παρακολουθητές (Monitors) 1 lalis@inf.uth.gr Ελεγκτές Αμοιβαίος αποκλεισμός στο πλαίσιο ενός τμήματος λογισμικού που προσπελάζεται με δομημένο τρόπο, μέσω προκαθορισμένης διασύνδεσης (API) Ο συγχρονισμός

Διαβάστε περισσότερα

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

Διεργασίες (Processes) Διεργασία (process) ή καθήκον (task) Διεργασίες (Processes) στοιχειώδης οντότητα/δραστηριότητα υπολογισμού (processing entity/activity) εκτέλεση ενός προγράμματος ένα (κύριο) νήμα (thread)/ρεύμα ελέγχου/εκτέλεσης

Διαβάστε περισσότερα

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

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

Διαβάστε περισσότερα

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

Μάθημα 4 ο. Κρίσιμα Τμήματα και Αμοιβαίος Αποκλεισμός Μάθημα 4 ο Κρίσιμα Τμήματα και Αμοιβαίος Αποκλεισμός Εισαγωγή Σκοπός του μαθήματος αυτού είναι να εξηγήσει την έννοια του κρίσιμου τμήματος σε μία διεργασία και να δείξει τη λύση για ένα απλό πρόβλημα

Διαβάστε περισσότερα

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

Συγχρονισμός Μέρος Α : Κρίσιμο τμήμα και κλειδώματα Εθνικό Μετσόβιο Πολυτεχνείο Σχολή Ηλεκτρολόγων Μηχ. και Μηχανικών Υπολογιστών Εργαστήριο Υπολογιστικών Συστημάτων Συγχρονισμός Μέρος Α : Κρίσιμο τμήμα και κλειδώματα 9 ο Εξάμηνο Η ανάγκη για συγχρονισμό

Διαβάστε περισσότερα

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

Προβλήματα Συγχρονισμού (με ελεγκτή) Ταυτόχρονος Προγραμματισμός 1 Προβλήματα Συγχρονισμού (με ελεγκτή) Ταυτόχρονος Προγραμματισμός 1 lalis@inf.uth.gr Υλοποίηση σηματοφόρων Οι σηματοφόροι είναι ένας ΑΤΔ με συγκεκριμένες λειτουργίες πρόσβασης Μπορεί να υλοποιηθούν με «φυσικό»

Διαβάστε περισσότερα

Προσπέλαση σύνθετων δομών δεδομένων χωρίς καθολικό κλείδωμα

Προσπέλαση σύνθετων δομών δεδομένων χωρίς καθολικό κλείδωμα Προσπέλαση σύνθετων δομών δεδομένων χωρίς καθολικό κλείδωμα ΙΙΙ 1 lalis@inf.uth.gr Προβλήματα με κλείδωμα Υπερβολική σειριοποίηση / άσκοπη αναμονή Κόστος συγχρονισμού Αδιέξοδα Απότομος τερματισμός νημάτων

Διαβάστε περισσότερα

Προσπέλαση σύνθετων δομών δεδομένων χωρίς καθολικό κλείδωμα

Προσπέλαση σύνθετων δομών δεδομένων χωρίς καθολικό κλείδωμα Προσπέλαση σύνθετων δομών δεδομένων χωρίς καθολικό κλείδωμα ΙΙΙ 1 lalis@inf.uth.gr Προβλήματα με κλείδωμα Υπερβολική σειριοποίηση / άσκοπη αναμονή Κόστος συγχρονισμού Αδιέξοδα Απότομος τερματισμός νημάτων

Διαβάστε περισσότερα

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

Διεργασίες (μοντέλο μνήμης & εκτέλεσης) Προγραμματισμός II 1 Διεργασίες (μοντέλο μνήμης & εκτέλεσης) Προγραμματισμός II 1 lalis@inf.uth.gr Πρόγραμμα και εκτέλεση προγράμματος Ο εκτελέσιμος κώδικας αποθηκεύεται σε ένα αρχείο Το αρχείο είναι μια «παθητική» οντότητα

Διαβάστε περισσότερα

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

Διεργασίες (μοντέλο μνήμης & εκτέλεσης) Προγραμματισμός II 1 Διεργασίες (μοντέλο μνήμης & εκτέλεσης) Προγραμματισμός II 1 lalis@inf.uth.gr Ο κώδικας δεν εκτελείται «μόνος του» Ο εκτελέσιμος κώδικας αποθηκεύεται σε ένα αρχείο Το αρχείο είναι μια «παθητική» οντότητα

Διαβάστε περισσότερα

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

Αμοιβαίος αποκλεισμός με ασύγχρονη επικοινωνία (ανταλλαγή μηνυμάτων) Ταυτόχρονος Προγραμματισμός 1 Αμοιβαίος αποκλεισμός με ασύγχρονη επικοινωνία (ανταλλαγή μηνυμάτων) Ταυτόχρονος Προγραμματισμός 1 lalis@inf.uth.gr Μοντέλο δικτύου/επικοινωνίας Αξιοπιστία (δεν χάνονται μηνύματα) Άγνωστη ταχύτητα μετάδοσης

Διαβάστε περισσότερα

Ορθότητα λειτουργίας τμημάτων λογισμικού & δομών δεδομένων υπό ταυτόχρονη εκτέλεση

Ορθότητα λειτουργίας τμημάτων λογισμικού & δομών δεδομένων υπό ταυτόχρονη εκτέλεση Ορθότητα λειτουργίας τμημάτων λογισμικού & δομών δεδομένων υπό ταυτόχρονη εκτέλεση ΙΙΙ 1 lalis@inf.uth.gr Ορθή συμπεριφορά τμήματος λογισμικού Ένα τμήμα λογισμικού (ή ένας ΑΤΔ) προσπελάζεται με δομημένο/ελεγχόμενο

Διαβάστε περισσότερα

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

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

Διαβάστε περισσότερα

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

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

Διαβάστε περισσότερα

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

Λειτουργικά Συστήματα (ΗΥ222) Λειτουργικά Συστήματα (ΗΥ222) Ταυτοχρονισμός, Συγχρονισμός Πολλαπλές Διεργασίες/Νήματα σε 1 Κοινωνία: Προβλήματα; «Κοινωνικές Γιάννης διεργασίες/νήματα»: Διαβάζουν/γράφουν στον ίδιο χώρο. Αποτέλεσμα; Πιθανότατα

Διαβάστε περισσότερα

Ορθότητα λειτουργίας τμημάτων λογισμικού & δομών δεδομένων υπό ταυτόχρονη εκτέλεση

Ορθότητα λειτουργίας τμημάτων λογισμικού & δομών δεδομένων υπό ταυτόχρονη εκτέλεση Ορθότητα λειτουργίας τμημάτων λογισμικού & δομών δεδομένων υπό ταυτόχρονη εκτέλεση ΙΙΙ 1 lalis@inf.uth.gr Ορθή συμπεριφορά τμήματος λογισμικού Ένα τμήμα λογισμικού (ή ένας ΑΤΔ) προσπελάζεται με δομημένο/ελεγχόμενο

Διαβάστε περισσότερα

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

Συγχρονισμός & σηματοφόροι. Προγραμματισμός II 1 Συγχρονισμός & σηματοφόροι Προγραμματισμός II 1 lalis@inf.uth.gr Ταυτόχρονη εκτέλεση Οι διεργασίες εκτελούνται ταυτόχρονα μεταξύ τους Ο προγραμματιστής δεν ελέγχει την εναλλαγή Τι γίνεται αν δύο ή περισσότερες

Διαβάστε περισσότερα

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

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

Διαβάστε περισσότερα

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

Λιβανός Γιώργος Εξάμηνο 2017Β Λιβανός Γιώργος Εξάμηνο 2017Β Το Λ.Σ. είναι υπεύθυνο για την κατανομή των πόρων του συστήματος (επεξεργαστές, μνήμη, αποθηκευτικά μέσα και συσκευές εισόδου/εξόδου) στα διάφορα ανταγωνιζόμενα προγράμματα

Διαβάστε περισσότερα

Αδιέξοδα (Deadlocks)

Αδιέξοδα (Deadlocks) Αδιέξοδα (Deadlocks) Περίληψη Αδιέξοδα (deadlocks) Τύποι πόρων (preemptable non preemptable) Μοντελοποίηση αδιεξόδων Στρατηγικές Στρουθοκαµηλισµός (ostrich algorithm) Ανίχνευση και αποκατάσταση (detection

Διαβάστε περισσότερα

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

Εισαγωγικά & Βασικές Έννοιες Εισαγωγικά & Βασικές Έννοιες ΙΙΙ 1 lalis@inf.uth.gr Γιατί πολλές διεργασίες/νήματα; Επίπεδο εφαρμογής Καλύτερη δόμηση κώδικα Αποφυγή μπλοκαρίσματος / περιοδικών ελέγχων Φυσική έκφραση παραλληλισμού Επίπεδο

Διαβάστε περισσότερα

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

Τι είναι ένα λειτουργικό σύστημα (ΛΣ); Μια άλλη απεικόνιση. Το Λειτουργικό Σύστημα ως μέρος του υπολογιστή Ιόνιο Πανεπιστήμιο Τμήμα Πληροφορικής Εισαγωγή στην Επιστήμη των Υπολογιστών 2014-15 Λειτουργικά Συστήματα (διαχείριση επεξεργαστή, και Ε/Ε) http://di.ionio.gr/~mistral/tp/csintro/ Μ.Στεφανιδάκης Τι είναι

Διαβάστε περισσότερα

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

Λειτουργικά Συστήματα (διαχείριση επεξεργαστή, μνήμης και Ε/Ε) Ιόνιο Πανεπιστήμιο Τμήμα Πληροφορικής Εισαγωγή στην Επιστήμη των Υπολογιστών 2015-16 Λειτουργικά Συστήματα (διαχείριση επεξεργαστή, και Ε/Ε) http://di.ionio.gr/~mistral/tp/csintro/ Μ.Στεφανιδάκης Τι είναι

Διαβάστε περισσότερα

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

2.4 Κλασσικά Προβλήματα IPC 2.4 Κλασσικά Προβλήματα IPC 1 Οι φιλόσοφοι που γευματίζουν - Dining Philosophers Μια πρώτη λύση για Ν φιλοσόφους: philosopher (i) while (1) { think; take_fork(i);/* πάρε αριστερό ξυλάκι */ take_fork(i+1

Διαβάστε περισσότερα

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

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

Διαβάστε περισσότερα

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

Λειτουργικά Συστήματα ΑΡΙΣΤΟΤΕΛΕΙΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΟΝΙΚΗΣ ΑΝΟΙΧΤΑ ΑΚΑΔΗΜΑΙΚΑ ΜΑΘΗΜΑΤΑ Λειτουργικά Συστήματα Ενότητα 4α: Σημαφόροι, Πρόβλημα Συνδαιτυμόνων Φιλοσόφων, Αδιέξοδα Αθηνά Βακάλη Άδειες Χρήσης Το παρόν εκπαιδευτικό

Διαβάστε περισσότερα

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

Ιδιοκτησία Αντικειµένου Software Transactional Memory H STM υποστηρίζει την εκτέλεση δοσοληψιών από τις διεργασίες, οι οποίες περιέχουν λειτουργίες που ο χρήστης θέλει να εκτελέσει στα διαµοιραζόµενα αντικείµενα. H STM εγγυάται

Διαβάστε περισσότερα

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

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΕΠΛ 664: Ανάλυση και Επαλήθευση Συστημάτων ΕΝΔΙΑΜΕΣΗ ΕΞΕΤΑΣΗ ΗΜΕΡΟΜΗΝΙΑ : Πέμπτη, 21 Μαρτίου 2013 ΔΙΑΡΚΕΙΑ : 14:00 16:00 ΔΙΔΑΣΚΟΥΣΑ : Άννα Φιλίππου Ονοματεπώνυμο:

Διαβάστε περισσότερα

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

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

Διαβάστε περισσότερα

Κεφάλαιο 4 Σημασιολογία μιας Απλής Προστακτικής Γλώσσας

Κεφάλαιο 4 Σημασιολογία μιας Απλής Προστακτικής Γλώσσας Κεφάλαιο 4 Σημασιολογία μιας Απλής Προστακτικής Γλώσσας Προπτυχιακό μάθημα Αρχές Γλωσσών Προγραμματισμού Π. Ροντογιάννης 1 Εισαγωγή - 1 Μία κλασσική γλώσσα προγραμματισμού αποτελείται από: Εκφράσεις (των

Διαβάστε περισσότερα

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

Εισαγωγικά & Βασικές Έννοιες Εισαγωγικά & Βασικές Έννοιες ΙΙΙ 1 lalis@inf.uth.gr Γιατί πολλές διεργασίες/νήματα; Επίπεδο εφαρμογής Καλύτερη δόμηση κώδικα Αποφυγή μπλοκαρίσματος / περιοδικών ελέγχων Φυσική έκφραση παραλληλισμού Επίπεδο

Διαβάστε περισσότερα

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

ΚΕΦΑΛΑΙΟ 9. Ταυτόχρονος προγραμματισμός και νήματα. 9.1 Εισαγωγή ΚΕΦΑΛΑΙΟ 9 Ταυτόχρονος προγραμματισμός και νήματα Σύνοψη Σε αυτό το κεφάλαιο πραγματευόμαστε τον ταυτόχρονο προγραμματισμό με τη χρήση νημάτων. Η έμφαση είναι στην κατανόηση βασικών λειτουργιών των νημάτων

Διαβάστε περισσότερα

Συνεπής παρατήρηση εκτέλεσης & συνεπείς καθολικές καταστάσεις. Κατανεμημένα Συστήματα 1

Συνεπής παρατήρηση εκτέλεσης & συνεπείς καθολικές καταστάσεις. Κατανεμημένα Συστήματα 1 Συνεπής παρατήρηση εκτέλεσης & συνεπείς καθολικές καταστάσεις Κατανεμημένα Συστήματα 1 lalis@inf.uth.gr Λογικά συνεπείς τομές Τμήμα τοπικής ιστορίας: h i.k {e i.1,e i.2,e i.k } τμήμα της τοπικής εκτέλεσης

Διαβάστε περισσότερα

Δομές ελέγχου ροής προγράμματος

Δομές ελέγχου ροής προγράμματος Δομές ελέγχου ροής προγράμματος Υπάρχουν δύο είδη δομών ελέγχου ροής (control flow): Οι δομές επιλογής και Οι δομές επανάληψης Δομές ελέγχου ροής προγράμματος Είδος δομής Δομές επιλογής Δομή ελέγχου ροής

Διαβάστε περισσότερα

Συνέπεια μνήμης σε πολυπύρηνα/πολυεπεξεργαστικά συστήματα

Συνέπεια μνήμης σε πολυπύρηνα/πολυεπεξεργαστικά συστήματα Συνέπεια μνήμης σε πολυπύρηνα/πολυεπεξεργαστικά συστήματα ΙΙΙ 1 lalis@inf.uth.gr Απλοποιημένο μοντέλο συστήματος CPU/cores πάνω σε δίαυλο/δίκτυο (bus/interconnect) για απλότητα, εδώ CPU = core Η κυρίως

Διαβάστε περισσότερα

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

Θοδωρής Ανδρόνικος Τμήμα Πληροφορικής, Ιόνιο Πανεπιστήμιο Θοδωρής Ανδρόνικος Τμήμα Πληροφορικής, Ιόνιο Πανεπιστήμιο Για το μάθημα «Διαχείριση Λειτουργικών Συστημάτων» του ακαδημαϊκού έτους 2015 2016, το προτεινόμενο σύγγραμμα είναι το: Operating Systems: Internals

Διαβάστε περισσότερα

Υ- 07 Παράλληλα Συστήματα Συνέπεια και συνοχή μνήμης

Υ- 07 Παράλληλα Συστήματα Συνέπεια και συνοχή μνήμης Υ- 07 Παράλληλα Συστήματα Συνέπεια και συνοχή μνήμης Αρης Ευθυμίου Λειτουργία μνήμης Η μνήμη είναι ένας πίνακας αποθήκευσης Οταν διαβάζουμε μια θέση, περιμένουμε να πάρουμε την τελευταία τιμή που έχει

Διαβάστε περισσότερα

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

Τμήμα Οικιακής Οικονομίας και Οικολογίας. Οργάνωση Υπολογιστών Οργάνωση Υπολογιστών Υπολογιστικό Σύστημα Λειτουργικό Σύστημα Αποτελεί τη διασύνδεση μεταξύ του υλικού ενός υπολογιστή και του χρήστη (προγραμμάτων ή ανθρώπων). Είναι ένα πρόγραμμα (ή ένα σύνολο προγραμμάτων)

Διαβάστε περισσότερα

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

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

Διαβάστε περισσότερα

Συνεπείς καθολικές καταστάσεις & επιβεβαίωση ιδιοτήτων. Κατανεμημένα Συστήματα 1

Συνεπείς καθολικές καταστάσεις & επιβεβαίωση ιδιοτήτων. Κατανεμημένα Συστήματα 1 Συνεπείς καθολικές καταστάσεις & επιβεβαίωση ιδιοτήτων Κατανεμημένα Συστήματα 1 lalis@inf.uth.gr Λογικά συνεπείς τομές Τμήμα τοπικής ιστορίας: h i.k {e i.1,e i.2,e i.k } τμήμα της τοπικής εκτέλεσης στην

Διαβάστε περισσότερα

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

Αδιέξοδα Ανάθεση Πόρων (Deadlocks Resource Allocation) Αδιέξοδα Ανάθεση Πόρων (Deadlocks Resource Allocation) Το Πρόβλημα του Αδιεξόδου Ένα σύνολο από διεργασίες σε αναμονή, όπου η κάθε μια κατέχει έναν αριθμό από πόρους και περιμένει να αποκτήσει και έναν

Διαβάστε περισσότερα

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

Κεφάλαιο 4 Διεργασίες Β Τάξη ΕΠΑΛ Κεφάλαιο 4 Διεργασίες Β Τάξη ΕΠΑΛ Καθ. Παπαδάκη Αν. Λειτουργικά Συστήματα 1 Περιγραφή Διεργασίας Στους υπολογιστές που έχουν μια μόνο ΚΜΕ, σε κάθε χρονική στιγμή μπορεί να εκτελείται μια μόνο εντολή γλώσσας

Διαβάστε περισσότερα

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

Λειτουργικά Συστήματα. Τ.Ε.Ι. Ιονίων Νήσων Σχολή Διοίκησης και Οικονομίας - Λευκάδα Λειτουργικά Συστήματα Τ.Ε.Ι. Ιονίων Νήσων Σχολή Διοίκησης και Οικονομίας - Λευκάδα Στέργιος Παλαμάς, Υλικό Μαθήματος «Λειτουργικά Συστήματα», 2015-2016 Κεφάλαιο 4: Διεργασίες Πρόγραμμα Πρόγραμμα 1 Πρόγραμμα

Διαβάστε περισσότερα

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

Αδιέξοδα Ανάθεση Πόρων (Deadlocks Resource Allocation) Αδιέξοδα Ανάθεση Πόρων (Deadlocks Resource Allocation) Εισαγωγή Μοντέλο συστήματος Χαρακτηρισμός και ορισμός κατάστασης αδιεξόδου Μέθοδοι χειρισμού αδιεξόδων Αποτροπή αδιεξόδου (Deadlock Prevention) Αποφυγή

Διαβάστε περισσότερα

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

Προσπέλαση κοινών πόρων Πρωτόκολλα ελέγχου αμοιβαίου αποκλεισμού Λειτουργικά Συστήματα Πραγματικού Χρόνου 2006-07 Προσπέλαση κοινών πόρων Πρωτόκολλα ελέγχου αμοιβαίου αποκλεισμού Μ.Στεφανιδάκης Κοινοί πόροι Κοινοί (διαμοιραζόμενοι) πόροι με μία η περισσότερες μονάδες

Διαβάστε περισσότερα

Όταν το πρόγραμμα φτάσει σε αυτή την εντολή και ο καταχωρητής PINA έχει την τιμή

Όταν το πρόγραμμα φτάσει σε αυτή την εντολή και ο καταχωρητής PINA έχει την τιμή 5. Εντολή while() Η εντολή while() είναι ίσως η πιο πολυχρησιμοποιούμενη εντολή κατά τη σύνταξη κώδικα σε γλώσσα προγραμματισμού C για μικροελεγκτές. Το κυρίως μέρος του προγράμματος κλείνεται σχεδόν πάντα

Διαβάστε περισσότερα

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

Λειτουργικά συστήματα πραγματικού χρόνου Λειτουργικά συστήματα πραγματικού χρόνου Τι είναι λειτουργικό σύστημα πραγματικού χρόνου; Λειτουργικό Σύστημα Πραγματικού Χρόνου (ΛΣΠΧ) είναι ένα λειτουργικό σύστημα που προορίζεται για εφαρμογές πραγματικού

Διαβάστε περισσότερα

Εργαστήριο 14. Συγχρονισμός Νημάτων (χρήση pthread_mutex_t, pthread_cond_t)

Εργαστήριο 14. Συγχρονισμός Νημάτων (χρήση pthread_mutex_t, pthread_cond_t) Εργαστήριο 14 Συγχρονισμός Νημάτων (χρήση pthread_mutex_t, pthread_cond_t) Να γράψετε πρόγραμμα που να δημιουργεί 1 νήμα Έτσι στο πρόγραμμα σας θα υπάρχουν 2 νήματα (το ένα νήμα είναι το αρχικό νήμα που

Διαβάστε περισσότερα

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

Λειτουργικά Συστήματα Πραγματικού Χρόνου Λειτουργικά Συστήματα Πραγματικού Χρόνου 2006-07 Λειτουργικά Συστήματα Πραγματικού Χρόνου Βασικές Έννοιες Μ.Στεφανιδάκης Το μάθημα ΛΣ Πραγματικού Χρόνου Θεωρητικό υπόβαθρο Αρχές Προγραμματισμού Παραδείγματα

Διαβάστε περισσότερα

Εντοπισμός τερματισμού. Κατανεμημένα Συστήματα 1

Εντοπισμός τερματισμού. Κατανεμημένα Συστήματα 1 Εντοπισμός τερματισμού Κατανεμημένα Συστήματα 1 lalis@inf.uth.gr Μοντέλο συστήματος Μια ομάδα διεργασιών εκτελεί έναν υπολογισμό Κατάσταση διεργασίας: ενεργητική ή παθητική (ανάλογα με το αν εκτελεί μέρος

Διαβάστε περισσότερα

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

Εισαγωγή στα Λειτουργικά Συστήματα Εισαγωγή στα Λειτουργικά Συστήματα Ενότητα 4: Διεργασίες ΙΙ Γεώργιος Φ. Φραγκούλης Τμήμα Ηλεκτρολόγων Μηχανικών Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons. Για

Διαβάστε περισσότερα

Έλεγχος συγχρονικότητας Μέρος 1 Βάσεις Δεδομένων Διδάσκων: Μαρία Χαλκίδη

Έλεγχος συγχρονικότητας Μέρος 1 Βάσεις Δεδομένων Διδάσκων: Μαρία Χαλκίδη Έλεγχος συγχρονικότητας Μέρος 1 Βάσεις Δεδομένων Διδάσκων: Μαρία Χαλκίδη με βάση slides από A. Silberschatz, H. Korth, S. Sudarshan, Database System Concepts, 5 th edition Έλεγχος συγχρονικότητας Διάφορες

Διαβάστε περισσότερα

Τυχαίοι αριθμοί ρίξε μια «ζαριά»

Τυχαίοι αριθμοί ρίξε μια «ζαριά» Τυχαίοι αριθμοί ρίξε μια «ζαριά» Έννοιες: βιβλιοθήκη random, δομή επιλογής, δομή επανάληψης, υποπρογράμματα 1. Ας υποθέσουμε τι θα κάνουν οι παρακάτω εντολές: import random choose1 = random.randint(1,6)

Διαβάστε περισσότερα

Προβλήματα, αλγόριθμοι, ψευδοκώδικας

Προβλήματα, αλγόριθμοι, ψευδοκώδικας Προβλήματα, αλγόριθμοι, ψευδοκώδικας October 11, 2011 Στο μάθημα Αλγοριθμική και Δομές Δεδομένων θα ασχοληθούμε με ένα μέρος της διαδικασίας επίλυσης υπολογιστικών προβλημάτων. Συγκεκριμένα θα δούμε τι

Διαβάστε περισσότερα

Mπαρμπούτι. Ενδεικτικές Απαντήσεις Φύλλου Εργασίας. Τυχαιότητα

Mπαρμπούτι. Ενδεικτικές Απαντήσεις Φύλλου Εργασίας. Τυχαιότητα Mπαρμπούτι Ενδεικτικές Απαντήσεις Φύλλου Εργασίας 2 22 Ιουλίου 2016 13:51 Τυχαιότητα Στο παιχνίδι που θα υλοποιήσουμε, ο παίκτης ρίχνει δύο ζάρια. Το αποτέλεσμα του παιχνιδιού εξαρτάται από το άθροισμα

Διαβάστε περισσότερα

Βασικές έννοιες. Κατανεμημένα Συστήματα 1

Βασικές έννοιες. Κατανεμημένα Συστήματα 1 Βασικές έννοιες Κατανεμημένα Συστήματα 1 lalis@inf.uth.gr Ορισμός κατανεμημένου συστήματος Ένα σύστημα από ξεχωριστές ενεργές οντότητες (ονομάζονται «κόμβοι» ή «διεργασίες») που εκτελούνται ταυτόχρονα/ανεξάρτητα

Διαβάστε περισσότερα

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

Κεφάλαιο 3. Διδακτικοί Στόχοι Κεφάλαιο 3 Σε ένα υπολογιστικό σύστημα η Κεντρική Μονάδα Επεξεργασίας (ΚΜΕ) εκτελεί τις εντολές που βρίσκονται στην κύρια μνήμη του. Οι εντολές αυτές ανήκουν σε προγράμματα τα οποία, όταν εκτελούνται,

Διαβάστε περισσότερα

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

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

Διαβάστε περισσότερα

Οργάνωση επεξεργαστή (2 ο μέρος) ΜΥΥ-106 Εισαγωγή στους Η/Υ και στην Πληροφορική

Οργάνωση επεξεργαστή (2 ο μέρος) ΜΥΥ-106 Εισαγωγή στους Η/Υ και στην Πληροφορική Οργάνωση επεξεργαστή (2 ο μέρος) ΜΥΥ-106 Εισαγωγή στους Η/Υ και στην Πληροφορική Ταχύτητα εκτέλεσης Χρόνος εκτέλεσης = (αριθμός εντολών που εκτελούνται) Τί έχει σημασία: Χ (χρόνος εκτέλεσης εντολής) Αριθμός

Διαβάστε περισσότερα

Υ- 01 Αρχιτεκτονική Υπολογιστών Back- end: χρονοπρογραμματισμός, εντολές προσπέλασης μνήμης

Υ- 01 Αρχιτεκτονική Υπολογιστών Back- end: χρονοπρογραμματισμός, εντολές προσπέλασης μνήμης Υ- 01 Αρχιτεκτονική Υπολογιστών Back- end: χρονοπρογραμματισμός, εντολές προσπέλασης μνήμης Αρης Ευθυμίου Το σημερινό μάθημα Execu9on scheduling wake- up and select specula9ve wake- up Εκτέλεση εντολών

Διαβάστε περισσότερα

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

Αµοιβαίοςαποκλεισµός. Κατανεµηµένα Συστήµατα 03-1 Αµοιβαίοςαποκλεισµός Εισαγωγή Συγκεντρωτική προσέγγιση Κατανεµηµένη προσέγγιση Αλγόριθµος Lamport Αλγόριθµος Ricart-Agrawala Προσέγγιση µεταβίβασης σκυτάλης Αλγόριθµος LeLann Αλγόριθµος Raymond Αλγόριθµος

Διαβάστε περισσότερα

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

ΧΡΟΝΟΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ Μάθημα: ΧΡΟΝΟΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Διδάσκoντες: Καθ. Κ. Λαμπρινουδάκης (clam@unipi.gr) Δρ. Α. Γαλάνη (agalani@unipi.gr) 1 Συμβαίνει συχνά πολλές διεργασίες να ανταγωνίζονται για τον έλεγχο

Διαβάστε περισσότερα

ΕισαγωγήστουςΗ/Υ. PHP Hypertext Preprocessor

ΕισαγωγήστουςΗ/Υ. PHP Hypertext Preprocessor ΕισαγωγήστουςΗ/Υ PHP Hypertext Preprocessor ΤιείναιηPHP; PHP είναιµία server-based scripting language σχεδιασµένη ειδικά για το web. Σε µία html σελίδα µπορούµε να ενσωµατώσουµε php κώδικα που εκτελείται

Διαβάστε περισσότερα

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

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

Διαβάστε περισσότερα

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

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

Διαβάστε περισσότερα

ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ

ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΑΝΑΠΤΥΞΗ ΚΑΙ ΣΧΕΔΙΑΣΗ ΛΟΓΙΣΜΙΚΟΥ Η γλώσσα προγραμματισμού C ΕΡΓΑΣΤΗΡΙΟ 2: Εκφράσεις, πίνακες και βρόχοι 14 Απριλίου 2016 Το σημερινό εργαστήριο

Διαβάστε περισσότερα

ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 3, 7, 8 & 9 6/12/07

ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 3, 7, 8 & 9 6/12/07 Πρώτοι αριθμοί ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 3, 7, 8 & 9 6/12/07 Ένας ακέραιος μεγαλύτερος του 1 είναι πρώτος αν έχει ακριβώς δύο διαιρέτες (τη μονάδα και τον εαυτό του). Πρόβλημα: έλεγχος

Διαβάστε περισσότερα

ΛΥΜΕΝΑ ΠΡΟΒΛΗΜΑΤΑ. Γράψτε τις επόμενες διαδικασίες σε όποια γλώσσα προγραμματισμού προτιμάτε:

ΛΥΜΕΝΑ ΠΡΟΒΛΗΜΑΤΑ. Γράψτε τις επόμενες διαδικασίες σε όποια γλώσσα προγραμματισμού προτιμάτε: ΛΥΜΕΝΑ ΠΡΟΒΛΗΜΑΤΑ Πρόβλημα 1: Το Πανεπιστήμιο Μακεδονίας, εφαρμόζοντας την αρχή της ισότητας μεταξύ των δύο φύλων μετέτρεψε τις τουαλέτες των φοιτητών σε κοινές τουαλέτες. Προς αποφυγή όμως παρεξηγήσεων

Διαβάστε περισσότερα

Βασικές έννοιες. Κατανεμημένα Συστήματα 1

Βασικές έννοιες. Κατανεμημένα Συστήματα 1 Βασικές έννοιες Κατανεμημένα Συστήματα 1 lalis@inf.uth.gr Ορισμός κατανεμημένου συστήματος Ένα σύστημα από ξεχωριστές ενεργές οντότητες (ονομάζονται «κόμβοι» ή «διεργασίες») που εκτελούνται ταυτόχρονα/ανεξάρτητα

Διαβάστε περισσότερα

Πανεπιστήμιο Θεσσαλίας Τμήμα Ηλεκτρολόγων Μηχανικών & Μηχανικών Υπολογιστών Τμήμα Πληροφορικής

Πανεπιστήμιο Θεσσαλίας Τμήμα Ηλεκτρολόγων Μηχανικών & Μηχανικών Υπολογιστών Τμήμα Πληροφορικής Πανεπιστήμιο Θεσσαλίας Τμήμα Ηλεκτρολόγων Μηχανικών & Μηχανικών Υπολογιστών Τμήμα Πληροφορικής Άσκηση : Λυμένες Ασκήσεις Έστω ένα σύστημα μνήμης, στο οποίο έχουμε προσθέσει μια κρυφή μνήμη θυμάτων 6 θέσεων

Διαβάστε περισσότερα

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

Διαδικασιακός Προγραμματισμός Τμήμα ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ ΤΕ ΤΕΙ ΔΥΤΙΚΗΣ ΕΛΛΑΔΑΣ Διαδικασιακός Προγραμματισμός Διάλεξη 6 η Βρόχοι Επανάληψης Οι διαλέξεις βασίζονται στο βιβλίο των Τσελίκη και Τσελίκα C: Από τη Θεωρία στην Εφαρμογή

Διαβάστε περισσότερα

for for for for( . */

for for for for( . */ Εισαγωγή Στον Προγραµµατισµό «C» Βρόχοι Επανάληψης Πανεπιστήµιο Πελοποννήσου Τµήµα Πληροφορικής & Τηλεπικοινωνιών Νικόλαος Δ. Τσελίκας Νικόλαος Προγραµµατισµός Δ. Τσελίκας Ι Ο βρόχος for Η εντολή for χρησιµοποιείται

Διαβάστε περισσότερα

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

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

Διαβάστε περισσότερα

Ένα αφαιρετικό πραγματικού χρόνου μοντέλο λειτουργικού συστήματος για MPSoC

Ένα αφαιρετικό πραγματικού χρόνου μοντέλο λειτουργικού συστήματος για MPSoC Ένα αφαιρετικό πραγματικού χρόνου μοντέλο λειτουργικού συστήματος για MPSoC Αρχιτεκτονική Πλατφόρμας Μπορεί να μοντελοποιηθεί σαν ένα σύνολο από διασυνδεδεμένα κομμάτια: 1. Στοιχεία επεξεργασίας (processing

Διαβάστε περισσότερα

Βασικές Έννοιες Πρ Ταο υγρ τόα χ μ ρ μ ο α ν τισμ ος Π ό ρ ςο ΙΙΙ γραμματισμός 1

Βασικές Έννοιες Πρ Ταο υγρ τόα χ μ ρ μ ο α ν τισμ ος Π ό ρ ςο ΙΙΙ γραμματισμός 1 Βασικές Έννοιες ΙΙΙ 1 lalis@inf.uth.gr Μονονηματική / πολυνηματική εκτέλεση Μονονηματικό μοντέλο εκτέλεσης (συμβατικό) Οι εντολές του κώδικα εκτελούνται σειριακά Ένα μοναδικό νήμα εκτέλεσης (execution

Διαβάστε περισσότερα

Προγραμματισμός Ι (HY120)

Προγραμματισμός Ι (HY120) Προγραμματισμός Ι (HY120) #6 εκτέλεση σε επανάληψη 1 Σπύρος Λάλης Εκτέλεση σε επανάληψη: while while () lexpr body true false Όσο η λογική συνθήκη επανάληψης lexpr αποτιμάται σε μια τιμή

Διαβάστε περισσότερα

ILP (integer linear programming) βασιζόμενη εξαρτώμενη από τους πόρους μεταγλώττιση

ILP (integer linear programming) βασιζόμενη εξαρτώμενη από τους πόρους μεταγλώττιση ILP (integer linear programming) βασιζόμενη εξαρτώμενη από τους πόρους μεταγλώττιση Γιατί χρησιμοποιείται μοντελοποίηση των περιορισμών με ακεραίους? Υπάρχουν ήδη εργαλεία για τον υπολογισμό και την χρήση

Διαβάστε περισσότερα

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

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

Διαβάστε περισσότερα

Χώροι Πλειάδων (Tuple Spaces) Ταυτόχρονος Προγραμματισμός 1

Χώροι Πλειάδων (Tuple Spaces) Ταυτόχρονος Προγραμματισμός 1 Χώροι Πλειάδων (Tuple Spaces) Ταυτόχρονος Προγραμματισμός 1 lalis@inf.uth.gr Tuple space Ένας κοινός χώρος αποθήκευσης δεδομένων / μηνυμάτων, με μορφή πλειάδων (tuples) Παρέχονται ειδικές λειτουργίες για

Διαβάστε περισσότερα

Διάλεξη 04: Παραδείγματα Ανάλυσης

Διάλεξη 04: Παραδείγματα Ανάλυσης Διάλεξη 04: Παραδείγματα Ανάλυσης Πολυπλοκότητας/Ανάλυση Αναδρομικών Αλγόριθμων Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: - Παραδείγματα Ανάλυσης Πολυπλοκότητας : Μέθοδοι, παραδείγματα

Διαβάστε περισσότερα

Προγραμματισμός Ι (HY120)

Προγραμματισμός Ι (HY120) Προγραμματισμός Ι (HY20) # μνήμη & μεταβλητές πρόγραμμα & εκτέλεση Ψηφιακά δεδομένα, μνήμη, μεταβλητές 2 Δυαδικός κόσμος Οι υπολογιστές είναι δυαδικές μηχανές Όλη η πληροφορία (δεδομένα και κώδικας) κωδικοποιείται

Διαβάστε περισσότερα

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

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

Διαβάστε περισσότερα

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

ιεργασίες και νήµατα Προγραµµατισµός ΙΙΙ 1 lalis@inf.uth.gr ιεργασίες και νήµατα Προγραµµατισµός ΙΙΙ 1 lalis@inf.uth.gr Η έννοια της διεργασίας ιεργασία (process) είναι ο µηχανισµός εκτέλεσης ενός προγράµµατος σε ένα λειτουργικό σύστηµα. Η διεργασία είναι µια ενεργή

Διαβάστε περισσότερα

Διάλεξη 04: Παραδείγματα Ανάλυσης Πολυπλοκότητας/Ανάλυση Αναδρομικών Αλγόριθμων

Διάλεξη 04: Παραδείγματα Ανάλυσης Πολυπλοκότητας/Ανάλυση Αναδρομικών Αλγόριθμων Διάλεξη 04: Παραδείγματα Ανάλυσης Πολυπλοκότητας/Ανάλυση Αναδρομικών Αλγόριθμων Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: - Παραδείγματα Ανάλυσης Πολυπλοκότητας : Μέθοδοι, παραδείγματα

Διαβάστε περισσότερα