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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

ΔΙΑΧΥΤΑ ΚΑΙ ΕΝΣΩΜΑΤΩΜΕΝΑ ΣΥΣΤΗΜΑΤΑ

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

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

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

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

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

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

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

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

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

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

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

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

Μετακινούμενος Κώδικας (Mobile Code) Κατανεμημένα Συστήματα 1

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

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

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

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

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

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

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

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

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

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

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

Κεφάλαιο 4. Λογισμικό Συστήματος

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

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

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

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

Εισαγωγή στα Λειτουργικά Συστήματα (Λ/Σ) Το UNIX και οι εντολές του Παρουσίαση 2

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

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

Transcript:

Εισαγωγικά & Βασικές Έννοιες ΙΙΙ 1 lalis@inf.uth.gr

Γιατί πολλές διεργασίες/νήματα; Επίπεδο εφαρμογής Καλύτερη δόμηση κώδικα Αποφυγή μπλοκαρίσματος / περιοδικών ελέγχων Φυσική έκφραση παραλληλισμού Επίπεδο λειτουργικού συστήματος Πολυπρογραμματισμός (πολλοί χρήστες) Ταυτόχρονη εκτέλεση σε 1 CPU/core Παράλληλη εκτέλεση σε πολλές CPUs/cores ΙΙΙ 2 lalis@inf.uth.gr

Παράδειγμα: καλύτερη δόμηση input read chars lines remove spaces and \n words assign words to next line lines add spaces between words output ΙΙΙ 3 lalis@inf.uth.gr

Παράδειγμα: αποφυγή μπλοκαρίσματος job worker job control commands master job worker job worker ΙΙΙ 4 lalis@inf.uth.gr

Παράδειγμα: έκφραση παραλληλισμού input data (unsorted) split data (unsorted) sort sort data (sorted) wait merge data (sorted) output ΙΙΙ 5 lalis@inf.uth.gr

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

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

multiprocessor shared memory CPU CPU CPU CPU local memory local memory local memory local memory distributed system local memory CPU CPU local memory local memory CPU CPU local memory ΙΙΙ 8 lalis@inf.uth.gr

Νήματα/Διεργασίες ΙΙΙ 9 lalis@inf.uth.gr

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

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

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

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

Διεργασία Θα χρησιμοποιούμε τους όρους «διεργασία» και «νήμα» εναλλάξ, ως ταυτόσημες έννοιες Σε πιο τεχνικό επίπεδο, υπάρχουν σημαντικές διαφορές ανάμεσα σε νήματα και διεργασίες η διεργασία αντιπροσωπεύει ένα πλήρες/ανεξάρτητο πλαίσιο εκτέλεσης ενός προγράμματος οι διεργασίες δεν έχουν (αυτομάτως) κοινή μνήμη κάθε διεργασία μπορεί να περιέχει πολλά νήματα τα νήματα μιας διεργασίας έχουν (συνήθως) κοινή μνήμη ΙΙΙ 14 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 ΙΙΙ 15 lalis@inf.uth.gr

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

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

Νήματα σε διάφορα επίπεδα λογισμικού Νήματα μπορεί να χρησιμοποιούνται σε πολλά διαφορετικά επίπεδα του λογισμικού ενός Η/Υ Για την ταυτόχρονη εκτέλεση ξεχωριστών εφαρμογών πάνω από το λειτουργικό σύστημα Για την ταυτόχρονη εκτέλεση τμημάτων μιας μοναδικής εφαρμογής Για την ταυτόχρονη εκτέλεση λειτουργιών του ίδιου του λειτουργικού συστήματος ΙΙΙ 18 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 ΙΙΙ 19 lalis@inf.uth.gr

Προγραμματισμός με νήματα Κάποιες γλώσσες προγραμματισμού υποστηρίζουν την ταυτόχρονη εκτέλεση εγγενώς, μέσα από κατάλληλους τύπους, δομές και λειτουργίες Σε άλλες γλώσσες προγραμματισμού η δυνατότητα ταυτόχρονης εκτέλεσης δίνεται μέσα από ξεχωριστές βιβλιοθήκες που δεν αποτελούν μέρος της γλώσσας Και στις δύο περιπτώσεις, συνήθως υποστηρίζονται νήματα με κοινή μνήμη Τα νήματα δημιουργούνται/καταστρέφονται δυναμικά (ευέλικτος πόρος, όπως π.χ. η δυναμική μνήμη) Ανάλογα με την υλοποίηση, τα νήματα μπορεί να υλοποιούνται σε επίπεδο εφαρμογής ή συστήματος ΙΙΙ 20 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 ΙΙΙ 21 lalis@inf.uth.gr

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

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

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

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

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

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

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

OS (kernel mode) Hardware Program (user mode) interrupt save regs(p1) -> k-stack(p1) move to kernel mode jump to trap handler P1 Trap handler Call switch() routine save regs(p1) -> task_desk(p1) restore regs(p2) <- task_desk(p2) Switch to k-stack(p2) Return from trap (into P2) Restore regs(p2) <- k-stack(p2) move to user mode Jump to P2 PC P2 ΙΙΙ 29 lalis@inf.uth.gr Source: Operating Systems: Three Easy Pieces

P1 εκτελείται current task P1 memory memory P2 PC stack stack PC regs regs code CPU code PC regs ΙΙΙ 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

επιλογή P2 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

Κόστος εναλλαγής O χρόνος που ξοδεύεται για την εναλλαγή αποτελεί γραφειοκρατικό κόστος (overhead) κατά την διάρκεια της εναλλαγής δεν εκτελείται κώδικας εφαρμογών ή υπηρεσιών του συστήματος Ο χρόνος της εναλλαγής εξαρτάται κυρίως από την πολυπλοκότητα υλοποίησης του συστήματος την υποστήριξη που παρέχει το υλικό (ειδικές εντολές) Όσο περισσότερες εναλλαγές γίνονται ανά μονάδα χρόνου τόσο λιγότερος χρόνος αφιερώνεται στην εκτέλεση των διεργασιών του συστήματος χειρότερη περίπτωση: γίνονται μόνο εναλλαγές ΙΙΙ 35 lalis@inf.uth.gr

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

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

πότε θα έρθει ο επόμενος χαρακτήρας πότε θα έρθουν τα από το πληκτρολόγιο; δεδομένα από το P1; P1 P2 πότε θα έρθουν τα δεδομένα από το P2 ή θα χτυπήσει το ξυπνητήρι μου; P3 ΙΙΙ 38 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) Αναμονή νήματος σε ουρά Αφύπνιση ενός (του πρώτου) νήματος που αναμένει στην ουρά Αφύπνιση όλων των νημάτων που αναμένουν στην ουρά ΙΙΙ 39 lalis@inf.uth.gr

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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