Διεργασίες (μοντέλο μνήμης & εκτέλεσης) Προγραμματισμός II 1 lalis@inf.uth.gr
Πρόγραμμα και εκτέλεση προγράμματος Ο εκτελέσιμος κώδικας αποθηκεύεται σε ένα αρχείο Το αρχείο είναι μια «παθητική» οντότητα χρησιμεύει μόνο για την αποθήκευση δεδομένων/κώδικα Ένα αρχείο δεν εκτελείται «από μόνο του» Χρειάζεται «κάτι άλλο» που θα αναλάβει να εκτελέσει τον κώδικα που βρίσκεται στο αρχείο Προγραμματισμός II 2 lalis@inf.uth.gr
Διαδικασία έναρξης εκτέλεσης Εντοπισμός του αρχείου με το εκτελέσιμο Έλεγχος ότι το αρχείο περιέχει εκτελέσιμο κώδικα πως γίνεται αυτός ο έλεγχος; Φόρτωμα του κώδικα στην κυρίως μνήμη όχι απαραίτητα ολόκληρου του κώδικα Δέσμευση μνήμης για τις καθολικές μεταβλητές καθώς και την στοίβα του προγράμματος πως γνωρίζει το σύστημα πόση μνήμη χρειάζεται; Αρχικοποίηση των μεταβλητών και της στοίβας και των παραμέτρων της main Άλμα στην πρώτη εντολή της main Προγραμματισμός II 3 lalis@inf.uth.gr
Διεργασία Οι διεργασίες είναι οι οντότητες εκτέλεσης των προγραμμάτων (δηλαδή του κώδικα που βρίσκεται αποθηκευμένος σε ένα αρχείο) Κάθε διεργασία έχει ξεχωριστή/ιδιωτική μνήμη αν μια διεργασία αλλάξει τιμή σε μια θέση της μνήμης της, αυτή η αλλαγή δεν είναι ορατή στις υπόλοιπες διεργασίες Κάθε διεργασία εκτελείται ταυτόχρονα και ανεξάρτητα από τις υπόλοιπες διεργασίες αλλά κάθε μια από τις διεργασίες έχει την ψευδαίσθηση ότι έχει την αποκλειστική χρήση του επεξεργαστή Προγραμματισμός II 4 lalis@inf.uth.gr
Πλαίσιο εκτέλεσης Κάθε διεργασία αντιστοιχεί σε ένα ξεχωριστό «πλαίσιο εκτέλεσης» Το πλαίσιο εκτέλεσης περιλαμβάνει όλη την κατάσταση εκτέλεσης ενός προγράμματος στατική μνήμη, δυναμική μνήμη, στοίβα κλπ Καθώς και άλλες πληροφορίες ο χρήστης στο όνομα του οποίου γίνεται η εκτέλεση προτεραιότητα εκτέλεσης χρόνος που έχει αφιερωθεί για αυτή την εκτέλεση Το ίδιο πρόγραμμα/κώδικας μπορεί να εκτελείται ταυτόχρονα από διαφορετικές διεργασίες Προγραμματισμός II 5 lalis@inf.uth.gr
Κώδικας και μνήμη Ο κώδικας του προγράμματος προς εκτέλεση φορτώνεται σε συγκεκριμένο τμήμα της μνήμης πρακτικά, αυτή η μνήμη είναι μόνο για διάβασμα Η CPU διαβάζει, αποκωδικοποιεί και εκτελεί τις εντολές του προγράμματος, την μια μετά την άλλη Τα δεδομένα (μεταβλητές, δυναμικές δομές κλπ) και η στοίβα που αντιστοιχούν στην εκτέλεση του κώδικα τοποθετούνται σε ξεχωριστή μνήμη αυτή η μνήμη είναι για διάβασμα και για γράψιμο Διαφορετικές διεργασίες έχουν ξεχωριστή μνήμη, αλλά μπορεί να εκτελούν ακριβώς τον ίδιο κώδικα Προγραμματισμός II 6 lalis@inf.uth.gr
task descriptor stack beg stack pointer code stack end PC cpu registers memory beg load memory end code Προγραμματισμός II 7 lalis@inf.uth.gr
memory memory stack stack read/write read/write code A code B Προγραμματισμός II 8 lalis@inf.uth.gr
memory memory stack stack read/write code read/write Προγραμματισμός II 9 lalis@inf.uth.gr
Γιατί πολλές διεργασίες; Πολλά προγράμματα που θέλουμε να «τρέχουν» την ίδια στιγμή Πολλοί χρήστες μοιράζονται ένα μηχάνημα ο καθένας πρέπει να μπορεί να εκτελεί τα δικά του προγράμματα, ανεξάρτητα από τους άλλους Παραλληλισμός εκτέλεση διαφορετικών τμημάτων μιας επεξεργασίας ή ενός υπολογισμού από ξεχωριστές διεργασίες αποφυγή μπλοκαρίσματος εν αναμονή κάποιου γεγονότος Καλύτερη δόμηση προγράμματος μια πολύπλοκη διαδικασία ίσως μπορεί να μοντελοποιηθεί πιο απλά αν δομηθεί ως ένα «σύστημα» από διεργασίες Προγραμματισμός II 10 lalis@inf.uth.gr
Εκτέλεση: παραλληλισμός ή πολυπλεξία παραλληλισμός πολυπλεξία P3 P3 P3 CPU CPU CPU CPU CPU CPU Προγραμματισμός II 11 lalis@inf.uth.gr
χρόνος συνεχόμενη εκτέλεση 1 2 3 4 5 6 7 8 9 χρόνος που μπορεί να χρησιμοποιηθεί για την εκτέλεση άλλων διεργασιών καθυστέρηση λόγω διακοπών διακοπτόμενη εκτέλεση 1 2 3 4 5 6 7 8 9 pause continue pause continue pause continue Προγραμματισμός II 12 lalis@inf.uth.gr
χρόνος (α) 1 2 3 4 5 1 2 3 4 5 6 7 (β) & 1 1 2 3 4 2 3 4 5 6 7 5 (γ) & 1 2 3 1 2 3 4 4 5 5 6 7 (δ) & 1 2 3 4 5 1 2 3 4 5 6 7 Προγραμματισμός II 13 lalis@inf.uth.gr
εκτελείται current task memory memory PC stack stack PC regs regs code CPU code PC regs Προγραμματισμός II 14 lalis@inf.uth.gr
σώσιμο κατάστασης current task memory memory PC stack stack PC regs regs code CPU code PC regs Προγραμματισμός II 15 lalis@inf.uth.gr
επιλογή διεργασίας current task memory memory PC stack stack PC regs regs code CPU code PC regs Προγραμματισμός II 16 lalis@inf.uth.gr
επαναφορά κατάστασης current task memory memory PC stack stack PC regs regs code CPU code PC regs Προγραμματισμός II 17 lalis@inf.uth.gr
εκτελείται current task memory memory PC stack stack PC regs regs code CPU code PC regs Προγραμματισμός II 18 lalis@inf.uth.gr
Κόστος εναλλαγής O χρόνος που ξοδεύεται για την εναλλαγή διεργασιών αποτελεί γραφειοκρατικό κόστος (overhead) κατά την διάρκεια της εναλλαγής δεν εκτελείται κάποιος κώδικας προγράμματος σε επίπεδο χρήστη Ο χρόνος της εναλλαγής εξαρτάται κυρίως από την πολυπλοκότητα υλοποίησης του συστήματος την υποστήριξη που παρέχει το υλικό (ειδικές εντολές) Όσο περισσότερες εναλλαγές γίνονται ανά μονάδα χρόνου τόσο λιγότερος χρόνος αφιερώνεται στην εκτέλεση των διεργασιών του συστήματος χειρότερη περίπτωση: γίνονται μόνο εναλλαγές Προγραμματισμός II 19 lalis@inf.uth.gr
χρόνος (α) 1 2 3 4 5 1 2 3 4 5 6 7 (β) 1 1 2 3 4 2 3 4 5 6 7 5 (γ) 1 1 2 2 3 3 4 4 5 5 6 7 Προγραμματισμός II 20 lalis@inf.uth.gr
Αναμονή Κάποιες (συνήθως, οι περισσότερες) διεργασίες περνάνε το μεγαλύτερο μέρος «της ζωής» τους απλά περιμένοντας Να περάσει ένα συγκεκριμένο χρονικό διάστημα Να παραλάβουν δεδομένα από άλλες διεργασίες Να συγχρονιστούν με άλλες διεργασίες Προγραμματισμός II 21 lalis@inf.uth.gr
πότε θα έρθει ο επόμενος χαρακτήρας από το πληκτρολόγιο; πότε θα έρθουν τα δεδομένα από την ; πότε θα χτυπήσει το ξυπνητήρι μου; P3 Προγραμματισμός II 22 lalis@inf.uth.gr
Κατάσταση αναμονής Το λειτουργικό σύστημα πρέπει να γνωρίζει κατά πόσο μια διεργασία βρίσκεται σε αναμονή ώστε να μην της δίνει χρόνο από τον επεξεργαστή Διαχωρισμός κατάστασης μιας διεργασίας Ready: η διεργασία είναι έτοιμη να λάβει τον επεξεργαστή, όταν αυτός ελευθερωθεί Blocked: η διεργασία περιμένει για κάτι, συνεπώς δεν είναι έτοιμη να λάβει τον επεξεργαστή Running: η διεργασία έχει τον επεξεργαστή Οι μεταβάσεις ανάμεσα σε αυτές τις καταστάσεις γίνονται υπό τον έλεγχο του λειτουργικού, μέσα από διάφορες λειτουργίες του συστήματος Προγραμματισμός II 23 lalis@inf.uth.gr
αναμονή running εναλλαγή (απώλεια επεξεργαστή) εναλλαγή (λήψη επεξεργαστή) blocked αφύπνιση ready δημιουργία Προγραμματισμός ΙΙ 24 lalis@inf.uth.gr
Χρονοπρογραμματισμός διεργασιών Μέσω της εναλλαγής, μπορεί να διακοπεί η εκτέλεση μιας διεργασίας για να συνεχιστεί μια άλλη διεργασία Υπάρχουν όμως κάποιες διαστάσεις «πολιτικής» για το πώς θα χρησιμοποιηθεί αυτός ο μηχανισμός Πότε διακόπτεται η τρέχουσα διεργασία; αυτόματα (περιοδικά), με βάση ένα χρονόμετρο (timer) όταν καλέσει μια ανασταλτική λειτουργία του συστήματος αν αποφασίσει να απελευθερώσει τον επεξεργαστή (yield) Ποιά διεργασία θα συνεχίσει την εκτέλεση της; αποφασίζεται με βάση τις προτεραιότητες των διεργασιών ο πιο απλός αλγόριθμος: round-robin Προγραμματισμός II 25 lalis@inf.uth.gr
cur tasks P0 ready running ready εκτελείται Προγραμματισμός ΙΙ 26 lalis@inf.uth.gr
cur tasks P0 ready ready running εναλλαγή Προγραμματισμός ΙΙ 27 lalis@inf.uth.gr
cur tasks P0 ready ready running εκτελείται Προγραμματισμός ΙΙ 28 lalis@inf.uth.gr
cur tasks P0 running ready ready εναλλαγή Προγραμματισμός ΙΙ 29 lalis@inf.uth.gr
cur tasks P0 running ready ready P0 εκτελείται Προγραμματισμός ΙΙ 30 lalis@inf.uth.gr
cur tasks P0 ready running ready εναλλαγή Προγραμματισμός ΙΙ 31 lalis@inf.uth.gr
cur tasks P0 ready running ready εκτελείται Προγραμματισμός ΙΙ 32 lalis@inf.uth.gr
cur tasks P0 ready blocked running μπαίνει σε αναμονή Προγραμματισμός ΙΙ 33 lalis@inf.uth.gr
cur tasks P0 ready blocked running εκτελείται Προγραμματισμός ΙΙ 34 lalis@inf.uth.gr
cur tasks P0 running blocked blocked μπαίνει σε αναμονή Προγραμματισμός ΙΙ 35 lalis@inf.uth.gr
cur tasks P0 running blocked blocked P0 εκτελείται Προγραμματισμός ΙΙ 36 lalis@inf.uth.gr
cur tasks P0 running blocked blocked P0 εκτελείται Προγραμματισμός ΙΙ 37 lalis@inf.uth.gr
cur tasks P0 running blocked blocked P0 εκτελείται Προγραμματισμός ΙΙ 38 lalis@inf.uth.gr
cur tasks P0 running blocked ready αφυπνίζεται Προγραμματισμός ΙΙ 39 lalis@inf.uth.gr
cur tasks P0 ready blocked running εναλλαγή Προγραμματισμός ΙΙ 40 lalis@inf.uth.gr
cur tasks P0 ready blocked running εκτελείται Προγραμματισμός ΙΙ 41 lalis@inf.uth.gr
Βελτιστοποίηση Αν υπάρχουν πολλές διεργασίες σε αναμονή δεν συμφέρει να τις κρατάμε στην ίδια λίστα με τις διεργασίες που είναι έτοιμες προς εκτέλεση κάθε φορά που επιχειρείται εναλλαγή, πραγματοποιούνται Ο(Ν) έλεγχοι για να βρεθεί η επόμενη έτοιμη διεργασία Μπορούμε να εισάγουμε μια ξεχωριστή λίστα, αποκλειστικά για τις διεργασίες εν αναμονή η εναλλαγή γίνεται σε Ο(1) Οι λειτουργίες αλλαγής κατάστασης γίνονται λίγο πιο πολύπλοκες καθώς πρέπει να «μετακινούν» μια διεργασία από την μια λίστα στην άλλη αλλά και αυτό γίνεται σε Ο(1) Προγραμματισμός II 42 lalis@inf.uth.gr
Ανεξέλεγκτη εναλλαγή Ο προγραμματιστής δεν ελέγχει την εναλλαγή το λειτουργικό δεν παρέχει τέτοια λειτουργία γιατί; Μπορεί να γίνει εναλλαγή, ανά πάσα στιγμή δεν γνωρίζουμε αν, πότε και σε ποια σημεία του κώδικα που γράφουμε θα γίνει εναλλαγή τα σημεία στα οποία γίνεται η εναλλαγή μπορεί να είναι διαφορετικά σε κάθε νέα εκτέλεση Οι εντολές της κάθε διεργασίας εκτελούνται σειριακά, όμως κάθε φορά που οι ίδιες διεργασίες εκτελούνται ταυτόχρονα μεταξύ τους, η μικτή εκτέλεση των εντολών τους μπορεί να είναι διαφορετική Προγραμματισμός II 43 lalis@inf.uth.gr
χρόνος (1) 1 2 1 2 (2) 1 2 1 2 1 2 (3) 1 1 2 2 1 2 (4) 1 1 2 2 (5) 1 1 2 2 (6) 1 1 2 2 σενάρια μικτής εκτέλεσης Προγραμματισμός II 44 lalis@inf.uth.gr
Πρόβλημα στην αποσφαλμάτωση! Συμβατική μέθοδος επιβεβαίωσης ορθότητας και εντοπισμού λαθών: το πρόγραμμα δίνει το ίδιο αποτέλεσμα / παράγει την ίδια έξοδο κάθε φορά που εκτελείται με τις ίδιες παραμέτρους / την ίδια είσοδο Δεν ισχύει για μια ταυτόχρονη εκτέλεση! Διαφορετικές (μικτές) εκτελέσεις διεργασιών μπορεί να δώσουν και ένα διαφορετικό αποτέλεσμα Το ότι σε μια δοκιμή το πρόγραμμα λειτούργησε σωστά δεν σημαίνει ότι θα το κάνει σε επόμενη Το ότι σε μια δοκιμή το πρόγραμμα παρουσίασε πρόβλημα δεν σημαίνει ότι θα το κάνει σε επόμενη Προγραμματισμός II 45 lalis@inf.uth.gr