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

Σχετικά έγγραφα
Εισαγωγικά & Βασικές Έννοιες

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

Προγραμματισμός Ταυτόχρονος Προγραμματισμός

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Λειτουργικά συστήµατα. Λογισμικό Συστήματος 1

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

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

Διάλεξη Εισαγωγή στη Java, Μέρος Γ

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

Το λειτουργικό σύστημα. Προγραμματισμός II 1

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

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

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

Το λειτουργικό σύστημα. Προγραμματισμός II 1

Το λειτουργικό σύστημα. Προγραμματισμός II 1

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

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

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

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

Διεργασίες και Νήματα (2/2)

ΕΙΣΑΓΩΓΗ. Παρέχει µια διεπαφή (interface) ανάµεσα στο υλισµικό και στα προγράµµατα εφαρµογών/χρηστών.

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

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

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

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

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

Εργαστήριο Λειτουργικών Συστημάτων - Αλγόριθμοι Χρονοπρογραμματισμού. Εργαστηριακή Άσκηση

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

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

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

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

Λειτουργικά Συστήματα Ι. Καθηγήτρια Παπαδάκη Αναστασία

Σκελετός Παρουσίασης

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

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

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

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

Καρακασίδης Αλέξανδρος Καστίδου Γεωργία Παπαφώτη Μαρία Πέτσιος Κων/νος Στέφανος Σαλτέας Καλογεράς Παναγιώτης. Threads in Java ΝΗΜΑΤΑ ΣΤΗ JAVA

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

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

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

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

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

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

Κύριες Υπηρεσίες ενός ΛΣ

Κεφάλαιο 3.1: Λειτουργικά Συστήματα. Επιστήμη ΗΥ Κεφ. 3.1 Καραμαούνας Πολύκαρπος

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

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

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

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

Μάθημα 7 ο. Αλγόριθμοι Χρονοδρομολόγησης

Γενική οργάνωση υπολογιστή «ΑΒΑΚΑ»

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

Λειτουργικά Συστήματα 1.1 Τι είναι Λειτουργικό Σύστημα (Operating System)

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

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

Μάθημα 1 ο ΒΑΣΙΚΕΣ ΕΝΝΟΙΕΣ ΤΩΝ ΛΕΙΤΟΥΡΓΙΚΩΝ ΣΥΣΤΗΜΑΤΩΝ

Πληροφορική I. "Λογισμικό (Software)" B. Φερεντίνος

ver Επεξεργαστές κειμένου, λογιστικών φύλλων, παρουσιάσεων Οδηγοί συσκευών (Device Drivers)

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

Εισαγωγή εκτελέσιμου κώδικα σε διεργασίες

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

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

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

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

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

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

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

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

Μικροεπεξεργαστές - Μικροελεγκτές Ψηφιακά Συστήματα

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

Τμήμα Λογιστικής. Εισαγωγή στους Ηλεκτρονικούς Υπολογιστές. Μάθημα 8. 1 Στέργιος Παλαμάς

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

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

Μάθημα 7: Αλγόριθμοι Χρονοδρομολόγησης

Κεφάλαιο 4 Λογισμικό συστήματος. Εφαρμογές Πληροφορικής Κεφ.4 Καραμαούνας Πολύκαρπος 1

Διαφορές single-processor αρχιτεκτονικών και SoCs

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

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

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

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

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

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

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

Transcript:

Βασικές Έννοιες ΙΙΙ 1 lalis@inf.uth.gr

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

μονονηματική εκτέλεση πολυνηματική εκτέλεση PC main νήμα P1 P2 P3 (ροή εκτέλεσης) PC PC PC πρόγραμμα εντολή πρόγραμμα αλληλεπίδραση ΙΙΙ 3 lalis@inf.uth.gr

Γιατί πολλές διεργασίες/νήματα; Αποφυγή μπλοκαρίσματος / περιοδικών ελέγχων αναμονή για κάποια «ασύγχρονο» γεγονός/συνθήκη Έκφραση παραλληλισμού τμήματα κώδικα/επεξεργασίας που μπορεί να εκτελεσθούν ανεξάρτητα / παράλληλα μεταξύ τους Υποστήριξη πολυπρογραμματισμού πολλοί χρήστες μοιράζονται ένα μηχάνημα κάθε χρήστης επιθυμεί να τρέχει πολλά (δικά του) προγράμματα την ίδια χρονική στιγμή Καλύτερη δόμηση κώδικα συνδυασμός απλών διεργασιών ΙΙΙ 4 lalis@inf.uth.gr

Παράδειγμα έκφραση παραλληλισμού Επιθυμούμε να φτιάξουμε ένα πρόγραμμα που (α) δέχεται από την είσοδο του μια σειρά από ακέραιες τιμές (β) τις ταξινομεί με αλφαβητική σειρά (γ) τις εκτυπώνει στην έξοδο του Προσέγγιση: Η ταξινόμηση μπορεί να γίνει ταυτόχρονα, χρησιμοποιώντας δύο πίνακες και δύο διεργασίες οπότε το τελικό αποτέλεσμα προκύπτει με την συγχώνευση των επιμέρους αποτελεσμάτων ΙΙΙ 5 lalis@inf.uth.gr

input data (unsorted) split data (unsorted) sort sort data (sorted) wait merge data (sorted) output ΙΙΙ 6 lalis@inf.uth.gr

Παράδειγμα καλύτερη δόμηση Επιθυμούμε να φτιάξουμε ένα πρόγραμμα που (α) δέχεται από την είσοδο του μια σειρά από λέξεις (β) εκτυπώνει το κείμενο σε γραμμές των 80 χαρακτήρων (γ) χωρίς να κόβονται οι λέξεις, και (δ) κατανέμοντας τα κενά ανάμεσα τους έτσι ώστε οι γραμμές να είναι στοιχισμένες Προσέγγιση: Σπάμε την πολύπλοκη επεξεργασία σε διακριτά στάδια οργανωμένα σε μια ροή εκτέλεσης όπου κάθε στάδιο εκτελείται από μια ξεχωριστή διεργασία ΙΙΙ 7 lalis@inf.uth.gr

input read chars lines remove spaces and \n words assign words to next line lines add spaces between words output ΙΙΙ 8 lalis@inf.uth.gr

Παράδειγμα αποφυγή μπλοκαρίσματος Επιθυμούμε να φτιάξουμε ένα πρόγραμμα το οποίο (α) εκτελεί «παρασκηνιακά» μια ή περισσότερες χρονοβόρες εργασίες για λογαριασμό του χρήστη (β) επιτρέπει ανά πάσα στιγμή στον χρήστη να υποβάλει νέες εργασίες, να ελέγξει την κατάσταση των εργασιών που έχουν ήδη υποβληθεί, και να τερματίσει κάποιες από αυτές Προσέγγιση: Κάθε εργασία εκτελείται μέσα από μια βοηθητική διεργασία που δημιουργείται για αυτό τον σκοπό Μια διεργασία αναμένει για τις εντολές του χρήστη (χωρίς να μπλοκάρει τις υπόλοιπες) ΙΙΙ 9 lalis@inf.uth.gr

worker job job control commands master job worker job worker ΙΙΙ 10 lalis@inf.uth.gr

Ταυτόχρονος Προγραμματισμός Παράλληλος Προγραμματισμός Στόχος: Ο συγχρονισμός και συντονισμός ανάμεσα σε συνεργαζόμενα νήματα ή διεργασίες ενός προγράμματος ή ολόκληρου συστήματος Πρόβλημα: Ορθότητα και απάλειψη ενεργής αναμονής Στόχος: Η επιτάχυνση ενός υπολογισμού με παράλληλη εκτέλεση πάνω από πολλούς επεξεργαστές Πρόβλημα: Κατάλληλη υποδιαίρεση του κώδικα σε τμήματα, και μεταφορά δεδομένων μεταξύ τους ΙΙΙ 11 lalis@inf.uth.gr

Μοντέλο εκτέλεσης νημάτων (διεργασιών) ΙΙΙ 12 lalis@inf.uth.gr

Νήματα Κάθε νήμα αντιπροσωπεύει μια ξεχωριστή ροή εκτέλεσης κώδικα κάθε νήμα μπορεί να εκτελεί διαφορετικό κώδικα ή ακόμα και τον ίδιο κώδικα με τα υπόλοιπα Κάθε νήμα έχει δική του κατάσταση εκτέλεσης μετρητής εντολών (program counter) καταχωρητές CPU (registers) στοίβα (stack) μνήμη (globals/heap) Βασικός διαχωρισμός: με/χωρίς κοινή μνήμη ΙΙΙ 13 lalis@inf.uth.gr

Νήματα εκτέλεσης με κοινή μνήμη νήμα #1 νήμα #2 νήμα #Ν μνήμη στοίβα στοίβα στοίβα μετρητής εντολών και καταχωρητές ΚΜΕ μετρητής εντολών και καταχωρητές ΚΜΕ μετρητής εντολών και καταχωρητές ΚΜΕ ΙΙΙ 14 lalis@inf.uth.gr

Νήματα εκτέλεσης χωρίς κοινή μνήμη νήμα #1 νήμα #2 νήμα #Ν μνήμη μνήμη μνήμη στοίβα στοίβα στοίβα μετρητής εντολών και καταχωρητές ΚΜΕ μετρητής εντολών και καταχωρητές ΚΜΕ μετρητής εντολών και καταχωρητές ΚΜΕ ΙΙΙ 15 lalis@inf.uth.gr

Ταυτόχρονη εκτέλεση νημάτων Πολυπλεξία πάνω σε μια CPU Παράλληλη εκτέλεση σε διαφορετικές CPU P1 P2 P3 P1 P2 P3 P1 P2 P3 CPU CPU CPU CPU CPU CPU παραλληλισμός πολυπλεξία ΙΙΙ 16 lalis@inf.uth.gr

Πολυπλεξία νημάτων σε μια CPU Κάθε νήμα εκτελείται («έχει την CPU») για ένα περιορισμένο χρονικό διάστημα Όταν εκπνεύσει ο χρόνος, η εκτέλεση του νήματος σταματά και η κατάσταση του αποθηκεύεται Επιλέγεται για εκτέλεση το επόμενο νήμα Επαναφέρεται η κατάσταση του επιλεγμένου νήματος, και η εκτέλεση του συνεχίζεται από εκεί που είχε σταματήσει Η αλλαγή ανάμεσα στα δύο νήματα ονομάζεται εναλλαγή (thread switch) ΙΙΙ 17 lalis@inf.uth.gr

χρόνος συνεχόμενη εκτέλεση διάστημα κατά το οποίο το νήμα δεν έχει την CPU καθυστέρηση λόγω διακοπών διακοπτόμενη εκτέλεση pause continue pause continue pause continue ΙΙΙ 18 lalis@inf.uth.gr

χρόνος (α) 1 2 3 4 5 1 2 3 4 5 6 7 (β) 1 2 2 3 4 2 3 4 5 6 7 5 (γ) 1 1 2 2 3 3 4 4 5 5 6 7 ΙΙΙ 19 lalis@inf.uth.gr

Νήματα σε διάφορα επίπεδα λογισμικού Νήματα μπορεί να χρησιμοποιούνται σε πολλά διαφορετικά επίπεδα του λογισμικού ενός Η/Υ Για την ταυτόχρονη εκτέλεση ξεχωριστών εφαρμογών πάνω από το λειτουργικό σύστημα Για την ταυτόχρονη εκτέλεση τμημάτων μιας μοναδικής εφαρμογής Για την ταυτόχρονη εκτέλεση λειτουργιών του ίδιου του λειτουργικού συστήματος ΙΙΙ 20 lalis@inf.uth.gr

user program command line program system-call interface file subsystem process management subsystem I/O control device drivers memory management subsystem hardware control/interrupt interface OS Hardware ΙΙΙ 21 lalis@inf.uth.gr

Νήματα και διεργασίες Νήμα: μια ξεχωριστή ροή εκτέλεσης κώδικα, στο πλαίσιο του ίδιου ή διαφορετικών προγραμμάτων Διεργασία: το ευρύτερο πλαίσιο εκτέλεσης ενός ολόκληρου/συγκεκριμένου προγράμματος Μια διεργασία εμπεριέχει ένα κυρίως νήμα Κατά την διάρκεια της εκτέλεσης της διεργασίας, μπορεί να δημιουργηθούν επιπλέον νήματα Τα νήματα μπορεί να θεωρηθούν και ως μια μορφή υπολογιστικού πόρου, που μπορεί να δεσμευθεί και να αποδεσμευθεί δυναμικά (όπως η μνήμη) ΙΙΙ 22 lalis@inf.uth.gr

single-threaded program process multi-threaded program code code memory memory CPU state CPU state CPU state CPU state stack stack stack stack main thread main thread ΙΙΙ 23 lalis@inf.uth.gr

Kernel & user-level threads Kernel threads (σε επίπεδο συστήματος) Κλήσεις συστήματος Δυνατότητα παράλληλης εκτέλεσης αν το σύστημα διαθέτει πολλούς επεξεργαστές Αν ένα νήμα μπλοκάρει σε κλήση συστήματος, τα υπόλοιπα συνεχίζουν την εκτέλεση τους User-level threads (σε επίπεδο εφαρμογής) Γρήγορες λειτουργίες Εκτέλεση σε έναν επεξεργαστή Αν ένα νήμα μπλοκάρει σε κλήση συστήματος, μπλοκάρει ολόκληρη η διεργασία ΙΙΙ 24 lalis@inf.uth.gr

user-level A thread B C user OS kernel thread ΙΙΙ 25 lalis@inf.uth.gr

Προγραμματισμός εφαρμογών με νήματα Κάποιες γλώσσες προγραμματισμού υποστηρίζουν την ταυτόχρονη εκτέλεση εγγενώς, μέσα από κατάλληλους τύπους, δομές και λειτουργίες Concurrent Pascal, Ada, Java, Σε άλλες γλώσσες προγραμματισμού η δυνατότητα ταυτόχρονης εκτέλεσης δίνεται μέσα από ξεχωριστές βιβλιοθήκες που δεν αποτελούν μέρος της γλώσσας C Και στις δύο περιπτώσεις, ο προγραμματιστής δημιουργεί συνήθως νήματα που έχουν κοινή μνήμη Ανάλογα με την υλοποίηση, τα νήματα μπορεί να υλοποιούνται σε επίπεδο εφαρμογής ή συστήματος ΙΙΙ 26 lalis@inf.uth.gr

Ορολογία Όρος heavyweight processes lightweight processes system-level threads user-level threads co-routines Λειτουργικότητα Level: system Scope: independent/separate program Memory: private Scheduling: preemptive/automatic Level: system Scope: same program Memory: shared Scheduling: preemptive/automatic Level: user Scope: same program Memory: shared Scheduling: preemptive/automatic Level: user Scope: same program Memory: shared Scheduling: explicit/manual ΙΙΙ 27 lalis@inf.uth.gr

Διαχείριση και εκτέλεση διεργασιών/νημάτων ΙΙΙ 28 lalis@inf.uth.gr

Λειτουργία εναλλαγής σε μια CPU Πληροφορία κατάστασης νήματος Στατική & δυναμική μνήμη Καταχωρητές της CPU Στοίβα Βήματα εναλλαγής Διακοπή εκτέλεσης Σώσιμο κατάστασης τρέχοντος νήματος Επιλογή του επόμενου νήματος προς εκτέλεση Επαναφορά κατάστασης του επιλεγμένου νήματος Συνέχεια εκτέλεσης ΙΙΙ 29 lalis@inf.uth.gr

stack task descriptor stack memory CPU PC registers memory PC cpu registers code code ΙΙΙ 30 lalis@inf.uth.gr

P1 εκτελείται current task P1 memory memory P2 PC stack stack PC regs regs code CPU code PC regs ΙΙΙ 31 lalis@inf.uth.gr

σώσιμο κατάστασης P1 current task P1 memory memory P2 PC stack stack PC regs regs code CPU code PC regs ΙΙΙ 32 lalis@inf.uth.gr

επιλογή P2 current task P1 memory memory P2 PC stack stack PC regs regs code CPU code PC regs ΙΙΙ 33 lalis@inf.uth.gr

επαναφορά κατάστασης P2 current task P1 memory memory P2 PC stack stack PC regs regs code CPU code PC regs ΙΙΙ 34 lalis@inf.uth.gr

P2 εκτελείται current task P1 memory memory P2 PC stack stack PC regs regs code CPU code PC regs ΙΙΙ 35 lalis@inf.uth.gr

Κόστος εναλλαγής O χρόνος που ξοδεύεται για την εναλλαγή αποτελεί γραφειοκρατικό κόστος (overhead) κατά την διάρκεια της εναλλαγής δεν εκτελείται κώδικας εφαρμογών ή υπηρεσιών του συστήματος Ο χρόνος της εναλλαγής εξαρτάται κυρίως από την πολυπλοκότητα υλοποίησης του συστήματος την υποστήριξη που παρέχει το υλικό (ειδικές εντολές) Όσο περισσότερες εναλλαγές γίνονται ανά μονάδα χρόνου τόσο λιγότερος χρόνος αφιερώνεται στην εκτέλεση των διεργασιών του συστήματος χειρότερη περίπτωση: γίνονται μόνο εναλλαγές ΙΙΙ 36 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 εναλλαγή «γραφειοκρατικό» κόστος εναλλαγής ΙΙΙ 37 lalis@inf.uth.gr

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

πότε θα έρθει ο επόμενος χαρακτήρας από το πληκτρολόγιο; πότε θα έρθουν τα δεδομένα από το P1; P1 P2 πότε θα έρθουν τα δεδομένα από το P2 ή θα χτυπήσει το ξυπνητήρι μου; P3 ΙΙΙ 39 lalis@inf.uth.gr

Ενδεικτικές λειτουργίες Λειτουργία task_create(task *t, ) task_start(task *t) task_stop(task *t) task_yield() Περιγραφή Δημιουργία νήματος Έναρξη εκτέλεσης νήματος Τερματισμός νήματος Παραχώρηση επεξεργαστή task_wait() task_wakeup(task *t) Αναμονή νήματος Αφύπνιση νήματος task_wait(queue *q) task_wakeup(queue *q) task_wakeupall(queue *q) Αναμονή νήματος σε ουρά Αφύπνιση ενός (του πρώτου) νήματος που αναμένει στην ουρά Αφύπνιση όλων των νημάτων που αναμένουν στην ουρά ΙΙΙ 40 lalis@inf.uth.gr

αναμονή running εναλλαγή (απώλεια επεξεργαστή) εναλλαγή (λήψη επεξεργαστή) waiting αφύπνιση ready δημιουργία ΙΙΙ 41 lalis@inf.uth.gr

Χρονοπρογραμματισμός Πότε «χάνει» ένα νήμα τον επεξεργαστή; Αυτόματα (περιοδικά), με βάση ένα χρονόμετρο Όταν καλέσει έμμεσα ή άμεσα την wait/yield Ποιο νήμα θα «πάρει» τον επεξεργαστή; Προτεραιότητες, απαιτήσεις πραγματικού χρόνου Ο πιο απλός αλγόριθμος: round-robin ΙΙΙ 42 lalis@inf.uth.gr

tasks P0 ready P1 running P2 ready waiting P1 εκτελείται ΙΙΙ 43 lalis@inf.uth.gr

tasks P0 ready P1 ready P2 running waiting P2 εκτελείται ΙΙΙ 44 lalis@inf.uth.gr

tasks P0 running P1 ready P2 ready waiting P2 εκτελείται ΙΙΙ 45 lalis@inf.uth.gr

tasks P0 ready P1 running P2 ready waiting P1 εκτελείται ΙΙΙ 46 lalis@inf.uth.gr

tasks P0 ready P1 waiting P2 running waiting P1 μπαίνει σε αναμονή P2 εκτελείται ΙΙΙ 47 lalis@inf.uth.gr

tasks P0 running P1 waiting P2 waiting waiting P2 μπαίνει σε αναμονή P0 εκτελείται ΙΙΙ 48 lalis@inf.uth.gr

tasks P0 waiting P1 waiting P2 waiting waiting P0 μπαίνει σε αναμονή ΙΙΙ 49 lalis@inf.uth.gr

tasks P0 waiting P1 ready P2 waiting waiting P1 αφυπνίζεται ΙΙΙ 50 lalis@inf.uth.gr

tasks P0 waiting P1 running P2 waiting waiting P1 εκτελείται ΙΙΙ 51 lalis@inf.uth.gr

Χειρισμός διακοπών / γεγονότων Ο χειρισμός διακοπών (interrupts) είναι μια ειδική μορφή ταυτόχρονης εκτέλεσης Σε περίπτωση διακοπής, γίνεται αυτόματη εναλλαγή από την τρέχουσα εκτέλεση στην ρουτίνα χειρισμού της διακοπής μπορεί να συμβεί ανά πάσα στιγμή Παρομοίως για ασύγχρονα γεγονότα πιο ψηλού επιπέδου (asynchronous events) ο χειρισμός των οποίων γίνεται με ανάστροφες κλήσεις (up-calls) π.χ. signal handling in Unix Προκύπτουν προβλήματα αντίστοιχα/παρόμοια με αυτά της ταυτόχρονης εκτέλεσης νημάτων ΙΙΙ 52 lalis@inf.uth.gr

interrupt/event handler current thread interrupt/event generator ΙΙΙ 53 lalis@inf.uth.gr

Εκτέλεση νημάτων σε πολλές CPU Διάφορες επιλογές Κάθε νήμα ανατίθεται στατικά σε μια CPU Κεντρική ουρά όπου τοποθετούνται τα νήματα, με κάθε CPU να εκτελεί τον επόμενο έτοιμο νήμα Κάθε CPU έχει δική της ουρά νημάτων, ενώ μπορεί να γίνει μεταφορά νημάτων ανάμεσα στις ουρές (π.χ., αν μια CPU παραμένει σχετικά αδρανής) Προβλήματα Γραφειοκρατικό κόστος Καλή εκμετάλλευση CPUs Συντονισμένη εκτέλεση νημάτων ΙΙΙ 54 lalis@inf.uth.gr

CPU scheduler P1 P2 P3 CPU scheduler P4 P5 P9 task migration/stealing CPU scheduler P6 P7 P8 P9 ΙΙΙ 55 lalis@inf.uth.gr

Υποθέσεις εργασίας Υποθέτουμε αυτόματη διακοπή και εναλλαγή των νημάτων/διεργασιών σε 1 CPU Αν ένα πρόβλημα υπάρχει σε σύστημα με έναν μοναδικό επεξεργαστή, προφανώς ισχύει και σε συστήματα με πολλούς επεξεργαστές Η βασική διάσταση που μας ενδιαφέρει είναι κατά πόσο τα νήματα/διεργασίες έχουν κοινή μνήμη Οι όροι «νήμα» και «διεργασία» θα χρησιμοποιούνται εναλλάξ χωρίς να υπονοείται κάτι διαφορετικό Δεν μας απασχολεί (ιδιαίτερα) το υλικό, ούτε οι λεπτομέρειες υλοποίησης σε επίπεδο συστήματος ΙΙΙ 56 lalis@inf.uth.gr