Διεργασίες - Σύνοψη. Διακοπές, προνομιούχος κατάσταση Κλήσεις συστήματος. Ορισμός, μεταβάσεις κατάστασης κύκλος ζωής

Σχετικά έγγραφα
Διεργασίες και Νήματα (2/2)

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

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

Διαχείριση Διεργασιών και Διαδιεργασιακή Επικοινωνία

Διαχείριση Διεργασιών και Διαδιεργασιακή Επικοινωνία

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

UNIX System Programming

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

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

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

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

ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ II. Υφαντόπουλος Νικόλαος Υποψήφιος Διδάκτορας Contact:

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

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

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

Λύβας Χρήστος Αρχική επιµέλεια Πιτροπάκης Νικόλαος και Υφαντόπουλος Νικόλαος

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

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

Εικονική Μνήμη (1/2)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Δίκτυα Επικοινωνιών ΙΙ: Network Programming UDP Sockets, Signals

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

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

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

Δημιουργία & Τερματισμός Διεργασιών. Προγραμματισμός II 1

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

Δημιουργία & Τερματισμός Διεργασιών. Προγραμματισμός II 1

Προγραμματισμός συστημάτων UNIX/POSIX. Σήματα (signals)

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

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

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

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

Λειτουργικά Συστήματα 7ο εξάμηνο, Ακαδημαϊκό Έτος Κανονική Εξέταση Λύσεις

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

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

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

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

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

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

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

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

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

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

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

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

Ντίρλης Νικόλαος- ΕΤΥ 2 ο Φροντιστήριο Παρασκευή, 18/10/2013 Β4. Λειτουργικά Συστήματα- Φροντιστήριο 2

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

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

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

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

Αντικειμενοστρεφής Προγραμματισμός

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

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

Εργαστήριο Λειτουργικών Συστημάτων 8o εξάμηνο, Ροή Υ, ΗΜΜΥ

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

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

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

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

Μάθημα 8: Επικοινωνία Συσκευών με τον Επεξεργαστή

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

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

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

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

Διαχείριση Κύριας Μνήμης

Προγραμματισμός συστημάτων UNIX/POSIX

Δομημένος Προγραμματισμός

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

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

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

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

Αντικειμενοστρεφής Προγραμματισμός

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

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

ΕΘΝΙΚΟ ΜΕΤΣΟΒΙΟ ΠΟΛΥΤΕΧΝΕΙΟ

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

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

Νήµατα. ιεργασίες και νήµατα Υλοποίηση νηµάτων Ελαφριές διεργασίες Αξιοποίηση νηµάτων. Κατανεµηµένα Συστήµατα 10-1

Σχεδίαση και Υλοποίηση Μηχανισμού Μεταφοράς Δεδομένων από Συσκευές Αποθήκευσης σε Δίκτυο Myrinet, Χωρίς τη Μεσολάβηση της Ιεραρχίας Μνήμης

Διαδιεργασιακή επικοινωνία (inter-process communication IPC) Προγραμματισμός II 1

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

Οργάνωση Υπολογιστών (IΙI)

Ι.Ε.Κ. Χαϊδαρίου ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ ΙΙ. Σημειώσεις Θεωρίας

Θέτοντας και επιστρέφοντας την τιµή της προτεραιότητας διεργασίας

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

ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ. Διεργασίες και Νήματα Εργαστηριακές Ασκήσεις

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

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

Transcript:

Άδεια Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons. Για εκπαιδευτικό υλικό, όπως εικόνες, που υπόκειται σε άδεια χρήσης άλλου τύπου, αυτή πρέπει να αναφέρεται ρητώς.

Διεργασίες - Σύνοψη Οργάνωση ενός σύγχρονου ΛΣ Διακοπές, προνομιούχος κατάσταση Κλήσεις συστήματος Διεργασία Process Ορισμός, μεταβάσεις κατάστασης κύκλος ζωής Πίνακας Ελέγχου Διεργασίας Χρονοδρομολόγηση σε συστήματα καταμερισμού χρόνου Λειτουργίες διεργασιών Δημιουργία διεργασιών - το μοντέλο του UNIX Διαδιεργασιακή Επικοινωνία

Διεργασίες - Σύνοψη Οργάνωση ενός σύγχρονου ΛΣ Διακοπές, προνομιούχος κατάσταση Κλήσεις συστήματος Διεργασία Process Ορισμός, μεταβάσεις κατάστασης κύκλος ζωής Πίνακας Ελέγχου Διεργασίας Χρονοδρομολόγηση σε συστήματα καταμερισμού χρόνου Λειτουργίες διεργασιών Δημιουργία διεργασιών - το μοντέλο του UNIX Διαδιεργασιακή Επικοινωνία

Οργάνωση ενός ΛΣ Διεργασία 1 Διεργασία 2 Διεργασία 3 κλήσεις συστήματος Χώρος Χρήστη Υπηρεσίες ΛΣ Οδηγοί Συσκευών Υλικό Χώρος Πυρήνα Υλικό

Λειτουργία ενός Σύγχρονου Συστήματος (1) Βασισμένη σε αιτήματα / συμβάντα / διακοπές Το ΛΣ ενεργοποιείται όταν γίνει κάτι από τα παρακάτω: Αίτηση διακοπής από το λογισμικό (trap, software interrupt) Ολοκλήρωση λειτουργίας Ε/Ε (διακοπή υλικού, hardware interrupt) Εσφαλμένη ή μη επιτρεπόμενη εντολή, π.χ. διαίρεση με το μηδέν, (exception, εξαίρεση ) Ο έλεγχος περνάει σε προκαθορισμένο κώδικα του ΛΣ, ανάλογα με τη διακοπή (άνυσμα διακοπών), την αίτηση ή την εξαίρεση Ρουτίνα εξυπηρέτησης διακοπής Μετά το τέλος της, επιστροφή στο προηγούμενο σημείο, υπό προϋποθέσεις

Λειτουργία ενός Σύγχρονου Συστήματος (2) νήματα εκτέλεσης Ν CPU(s) κρυφή μνήμη εκτέλεση εντολών εντολές και δεδομένα μνήμη αίτηση Ε/Ε δεδομένα διακοπή Απευθείας Πρόσβαση στη Μνήμη (DMA) μονάδες Ε/Ε

Λειτουργία ενός Σύγχρονου Συστήματος (3) Ανάγκη για Προστασία / Απομόνωση Των υπόλοιπων προγραμμάτων Των δομών του ΛΣ Από κακογραμμένο / κακόβουλο κώδικα Λύση: Δύο καταστάσεις λειτουργίας Κατάσταση Χρήστη User Mode Κατάσταση Επόπτη Supervisor / Kernel Mode Πρέπει να παρέχεται από το Υλικό (x86;) Ορισμένες εντολές είναι προνομιούχες (privileged) Οι ρουτίνες εξυπηρέτησης διακοπών τρέχουν σε κατάσταση επόπτη

Οργάνωση ενός ΛΣ Διεργασία 1 Διεργασία 2 Διεργασία 3 κλήσεις συστήματος Χώρος Χρήστη Υπηρεσίες ΛΣ Οδηγοί Συσκευών Υλικό Χώρος Πυρήνα Υλικό

Κλήση Συστήματος Χώρος Χρήστη compute Init syscall ret from syscall compute trap return from interrupt t service syscall Χώρος Πυρήνα Αίτηση προς το ΛΣ (π.χ. Ε/Ε από συσκευή ή αρχείο, αναμονή συμβάντος, διαχείριση διεργασιών) Μετάβαση από κατάσταση χρήστη σε κατάσταση πυρήνα (privileged mode) Κι αν χρειάζεται να περιμένει έως ότου ολοκληρωθεί μια λειτουργία Ε/Ε; Πόσο είναι το κόστος της κλήσης; Υπάρχουν κι άλλοι τρόποι. SYSENTER / SYSEXIT interrupt User Kernel

Διεργασίες - Σύνοψη Οργάνωση ενός σύγχρονου ΛΣ Διακοπές, προνομιούχος κατάσταση Κλήσεις συστήματος Διεργασία Process Ορισμός, μεταβάσεις κατάστασης κύκλος ζωής Πίνακας Ελέγχου Διεργασίας Χρονοδρομολόγηση σε συστήματα καταμερισμού χρόνου Λειτουργίες διεργασιών Δημιουργία διεργασιών - το μοντέλο του UNIX Διαδιεργασιακή Επικοινωνία

Διεργασία Process Διεργασία: ένα πρόγραμμα υπό εκτέλεση Ένα ζωντανό πρόγραμμα, φορτωμένο στη μνήμη Διεργασία = κώδικας + κατάσταση Πολλές διεργασίες μπορεί να έχουν κοινό πρόγραμμα, κοινό κώδικα Κάθε μία έχει τη δική της, χωριστή κατάσταση Πολλές διεργασίες εκτελούνται ταυτόχρονα κάτω από ΛΣ καταμερισμού χρόνου Multiprogramming με time sharing Αναγνωρίζεται από μοναδικό Process ID (PID)

Τι είναι μια Διεργασία; κώδικας - program text Αρχιτεκτονική κατάσταση Μετρητής προγράμματος (PC) Καταχωρητές CPU (%eax, %ebx, %ecx) Ιδιωτικός, απομονωμένος χώρος μνήμης Τμήμα δεδομένων (data segment) μεταβλητές Σωρός (heap) Στοίβα (stack) Χρησιμοποιούμενοι πόροι του συστήματος Ανοιχτά αρχεία, δικτυακές συνδέσεις

Στιγμιότυπο Διεργασίας στη Μνήμη 2ΤΒ Στοίβα Σωρός Δεδομένα 0 Κείμενο

Σύγχρονα ΛΣ καταμερισμού χρόνου Διεργασία: η βασική μονάδα εκτέλεσης σε σύγχρονα ΛΣ καταμερισμού χρόνου Ταυτόχρονη, απομονωμένη εκτέλεση Με τη δική της αρχιτεκτονική κατάσταση Σε δικό της, απομονωμένο χώρο μνήμης Αλληλεπίδραση με τον έξω κόσμο κλήσεις συστήματος Το ΛΣ δημιουργεί και συντηρεί την ψευδαίσθηση της αποκλειστικής χρήσης της μηχανής καταμερισμός χρόνου ανάμεσα στις υπό εκτέλεση διεργασίες Ανάγκη για χρονοδρομολόγηση (CPU Scheduling) Δυνητικά σε πολλούς επεξεργαστές (SMP/multicore) Με δίκαιη κατανομή πόρων ανάμεσα στις διεργασίες

Καταμερισμός Χρόνου: η γενική ιδέα tq CPU P 1 S P 2 S P 3 S P 1 timer timer timer t Ο υπολογιστικός χρόνος κατανέμεται ανάμεσα στις διεργασίες που είναι έτοιμες να τρέξουν (P1, P2, P3) Κάθε διεργασία τρέχει για χρόνο <= του κβάντου χρόνου (time quantum) Το χρονοδρομολογητή ενεργοποιούν διακοπές χρονιστή (timer interrupts) interrupt User Kernel

Κατάσταση Διεργασίας Μεταβάσεις Κάθε διεργασία μεταβαίνει από κατάσταση σε κατάσταση (process state) Νέα (New) δημιουργείται Υπό Εκτέλεση (Running) εκτελείται τώρα στη CPU Έτοιμη (Ready) έτοιμη προς εκτέλεση σε CPU, χρειάζεται χρόνο CPU Σε Αναμονή (Waiting) περιμένει να ολοκληρωθεί E/E, αναμονή συμβάντος, δεν είναι υποψήφια για εκτέλεση σε CPU Τερματισμένη (Terminated) η εκτέλεσή της έχει ολοκληρωθεί

Κύκλος Ζωής μιας Διεργασίας (1) Νέα (New) αποδοχή εκπνοή κβάντου χρόνου Τερματισμένη (Terminated) έξοδος Έτοιμη (Ready) Υπό Εκτέλεση (Running) επιλογή από χρονοδρομολογητή ολοκλήρωση Ε/Ε ή συμβάντος Σε Αναμονή (Waiting) αίτηση Ε/Ε ή αναμονή συμβάντος

Πίνακας Ελέγχου Διεργασίας (1) Process Control Block (PCB) Ταυτότητα διεργασίας (PID) Κατάσταση διεργασίας (process state) Νέα, Έτοιμη, Υπό Εκτέλεση, Σε Αναμονή, Τερματισμένη Αρχιτεκτονική κατάσταση (architectural state) Μετρητής προγράμματος, καταχωρητές CPU Πληροφορίες χρονοδρομολόγησης Προτεραιότητα, δείκτες σε ουρές χρονοδρομολογητή Πληροφορίες διαχείρισης μνήμης Δεσμευμένες περιοχές μνήμης, είδος και όρια πρόσβασης Πληροφορίες για έλεγχο πρόσβασης Ταυτότητα χρήστη, δικαιώματα πρόσβασης, δυνατότητες Πληροφορίες για τρέχουσα κατάσταση λειτουργιών Ε/Ε Πίνακας ανοιχτών αρχείων

Πίνακας Ελέγχου Διεργασίας (2) $ cat /usr/src/linux/include/linux/sched.h PCB... struct task_struct { ταυτότητα διεργασίας κατάσταση διεργασίας volatile long state; /* -1 unrunnable, 0 runnable, >0 stopped */ void *stack;... μετρητής προγράμματος int prio, static_prio, normal_prio; καταχωρητές CPU unsigned int rt_priority;... struct mm_struct *mm, *active_mm;... pid_t pid;... const struct cred *cred;... δεδομένα διαχείρισης μνήμης (περιοχές, όρια) πίνακας ανοιχτών αρχείων /* effective (overridable) subjective task * credentials (COW) */ δικαιώματα πρόσβασης (αριθμός χρήστη, δυνατότητες) /* open file information */ struct files_struct *files;... }; real-life Linux PCB in C

Διεργασίες - Σύνοψη Οργάνωση ενός σύγχρονου ΛΣ Διακοπές, προνομιούχος κατάσταση Κλήσεις συστήματος Διεργασία Process Ορισμός, μεταβάσεις κατάστασης κύκλος ζωής Πίνακας Ελέγχου Διεργασίας Χρονοδρομολόγηση σε συστήματα καταμερισμού χρόνου Λειτουργίες διεργασιών Δημιουργία διεργασιών - το μοντέλο του UNIX Διαδιεργασιακή Επικοινωνία

Καταμερισμός Χρόνου: η γενική ιδέα tq CPU P 1 S P 2 S P 3 S P 1 timer timer timer t Ο υπολογιστικός χρόνος κατανέμεται ανάμεσα στις διεργασίες που είναι έτοιμες να τρέξουν (P1, P2, P3) Κάθε διεργασία τρέχει για χρόνο <= του κβάντου χρόνου (time quantum) Το χρονοδρομολογητή ενεργοποιούν διακοπές χρονιστή (timer interrupts) interrupt User Kernel

Εναλλαγή Περιβάλλοντος Λειτουργίας (1) Context Switch: Η CPU αλλάζει από διεργασία σε διεργασία Αποθήκευση κατάστασης παλιάς (στο PCB της) Επαναφορά νέας διεργασίας (από το PCB της) Πόσο διαρκεί; Είναι χαμένος χρόνος για τη CPU Πόσο συχνά; το σύστημα πρέπει να είναι αποκρίσιμο

Εναλλαγή Περιβάλλοντος Λειτουργίας (2) P 0 P 1 διακοπή ή κλήση συστήματος Αποθήκευση κατάστασης στο PCB P 0 Επαναφορά κατάστασης από PCB P 1 Τι ποσοστό του χρόνου χάνεται στο context switch; διακοπή ή κλήση συστήματος Αποθήκευση κατάστασης στο PCB P 1 Επαναφορά κατάστασης από PCB P 0 interrupt User Kernel

Κύκλος Ζωής μιας Διεργασίας (2) create() / fork() Ουρά Έτοιμων Διεργασιών (Ready List) CPU exit() Εκπνοή κβάντου χρόνου I/O read() / write() Αίτηση I/Ο Διακοπή / άλλο συμβάν sleep() / wait() Αναμονή για συμβάν

Διεργασίες - Σύνοψη Οργάνωση ενός σύγχρονου ΛΣ Διακοπές, προνομιούχος κατάσταση Κλήσεις συστήματος Διεργασία Process Ορισμός, μεταβάσεις κατάστασης κύκλος ζωής Πίνακας Ελέγχου Διεργασίας Χρονοδρομολόγηση σε συστήματα καταμερισμού χρόνου Λειτουργίες διεργασιών Δημιουργία διεργασιών - το μοντέλο του UNIX Διαδιεργασιακή Επικοινωνία

Λειτουργίες Διεργασιών Δημιουργία και καταστροφή διεργασιών Δυναμική, κατά τη λειτουργία του συστήματος (fork()) Μέσω κλήσεων συστήματος Ιεραρχία διεργασιών Μια γονική διεργασία δημιουργεί διεργασίες-παιδιά (parent και children processes) Προκύπτει ιεραρχική οργάνωση, σε δέντρο διεργασιών Τερματισμός διεργασίας Οικειοθελής, όταν ολοκληρώσει το έργο της (exit()) Βίαιος, λόγω εξωτερικού παράγοντα Αποστολή σήματος (kill()) από άλλη διεργασία τερματισμός από το λειτουργικό λόγω εσφαλμένης λειτουργίας ( This program has performed an illegal operation στα Windows) Ο γονέας ενημερώνεται (wait()) Κι αν πεθάνει πριν από το παιδί του;

Δέντρο Διεργασιών στο Linux init (1) syslogd (2781) cupsd (3043) smbd (2978) smbd (3018) sshd (20484) sshd (678) bash (1835) vi (1892) firefox (1903) pstree (2001)

Δημιουργία στο μοντέλο του UNIX: fork() Δεδομένα : 987-1 p =? mypid =? Κείμενο: pid_t p, mypid; p = fork(); p = -1, 987 errno = if (p < 0) { ENOMEM perror( fork ); exit(1); } else if (p == 0) { mypid = getpid(); child(); } else { father(); } PID=981 Δεδομένα : 0 p =? mypid =? Κείμενο: pid_t p, mypid; p = fork(); p = 0 if (p < 0) { perror( fork ); exit(1); } else if (p == 0) { mypid = getpid(); child(); } else { father(); } PID=987 987

Δημιουργία στο μοντέλο του UNIX: fork() Όλες οι διεργασίες προκύπτουν με fork() [σχεδόν όλες] Ίδιο πρόγραμμα με γονική διεργασία, αντίγραφο χώρου μνήμης, κληρονομεί ανοιχτά αρχεία, συνδέσεις, δικαιώματα πρόσβασης Αντικατάσταση προγράμματος διεργασίας: execve() Η γονική διεργασία ενημερώνεται για το θάνατο του παιδιού με wait() συλλογή τιμής τερματισμού (exit status) Μέχρι τότε, παιδί που έχει καλέσει την exit() είναι zombie Αν ο γονέας πεθάνει πρώτα, η διεργασία γίνεται παιδί της init (PID = 1), που κάνει συνεχώς wait() prog-a 981 fork Prog-A 981 wait Prog-A 987 execve Prog-B 987 Prog-B exit 987 (zombie)

Διεργασίες - Σύνοψη Οργάνωση ενός σύγχρονου ΛΣ Διακοπές, προνομιούχος κατάσταση Κλήσεις συστήματος Διεργασία Process Ορισμός, μεταβάσεις κατάστασης κύκλος ζωής Πίνακας Ελέγχου Διεργασίας Χρονοδρομολόγηση σε συστήματα καταμερισμού χρόνου Λειτουργίες διεργασιών Δημιουργία διεργασιών - το μοντέλο του UNIX Διαδιεργασιακή Επικοινωνία

Διαδιεργασιακή Επικοινωνία (IPC) Inter-Process Communication (IPC) Διεργασίες που συνεργάζονται. Γιατί; Παράλληλη εκτέλεση, επιτάχυνση Δομημένη σχεδίαση, διαχωρισμός προνομίων Ταυτόχρονη πρόσβαση σε κοινά δεδομένα Διαφορετικοί Μηχανισμοί από ΛΣ σε ΛΣ Μοιραζόμενη Μνήμη (Shared Memory Segments) Μηνύματα (Microkernels - Mach, POSIX messages) Σήματα (UNIX) Pipes (UNIX, Win32)

Μοιραζόμενη Μνήμη Εικονική μνήμη P0 Εικονική μνήμη P1 Φυσική Μνήμη Πρόσβαση σε κοινό τμήμα μνήμης (shared memory segment) Για περισσότερες από μία διεργασίες Άμεση αλληλεπίδραση, με εντολές load/store Χωρίς κλήσεις συστήματος Ενημέρωση για αλλαγές; έλεγχος (polling) Πώς εξασφαλίζεται ότι δεν γράφουν στο ίδιο σημείο ταυτόχρονα; Το κοινό τμήμα απεικονίζεται στο χώρο εικονικής μνήμης των διεργασιών

Επικοινωνία με πέρασμα μηνυμάτων (1) Διεργασία 1 Μ Διεργασία 2 Μ Χώρος Χρήστη sendmsg() recvmsg() Μ Πυρήνας Χώρος Πυρήνα Επικοινωνία χωρίς μοιραζόμενη μνήμη μέσω κλήσεων συστήματος

Επικοινωνία με πέρασμα μηνυμάτων (2) Σχεδιαστικές αποφάσεις Άμεση ή έμμεση επικοινωνία; Σύγχρονη ή ασύγχρονη επικοινωνία; Προσωρινή αποθήκευση μηνυμάτων σε απομονωτές (buffering)

Επικοινωνία με πέρασμα μηνυμάτων (2) Ονοματολογία Άμεσα, συμμετρικά send(p, message); receive(q, message) όπου P, Q είναι Process IDs Άμεσα, ασύμμετρα send(p, message); receive(id, message) όπου το P δίνεται, το id τίθεται από την receive() Έμμεσα, με χρήση γραμματοθυρίδων (mailboxes) / θυρών (ports) send(a, message); receive(a, message) όπου Α το αναγνωριστικό της θυρίδας (π.χ. ένας ακέραιος) δημιουργία και καταστροφή θυρίδων;

Επικοινωνία με πέρασμα μηνυμάτων (3) Συγχρονισμός Αποστολές με ή χωρίς αναμονή (blocking / non-blocking send) Λήψη με ή χωρίς αναμονή (blocking / non-blocking receive) Σύγχρονος ή ασύγχρονος τρόπος λειτουργίας (rendez-vous) Προσωρινή αποθήκευση σε απομονωτές Χωρίς προσωρινή αποθήκευση (σύγχρονα) Πεπερασμένη χωρητικότητα ο αποστολέας μπλοκάρει όταν ο απομονωτής γεμίσει Απεριόριστη χωρητικότητα με δυναμική δέσμευση χώρου

Σήματα στο UNIX (1) Ενσωματωμένα ήδη από τις πρώτες εκδόσεις του UNIX (Έκδοση 7) Ασύγχρονη Ειδοποίηση για Εξωτερικό Γεγονός Κάθε σήμα έχει ένα συμβολικό όνομα SIGINT, SIGTSTP, SIGCONT, SIGSTOP, SIGFPE, SIGSEGV, SIGABRT, SIGQUIT, SIGWINCH, SIGTERM, SIGKILL Και διαφορετική σημασία, π.χ. Διακοπή Πληκτρολογίου, Ctrl-C (SIGINT) Αναστολή από το πληκτρολόγιο (SIGTSTP) Τερματισμός (SIGTERM) Βίαιος Τερματισμός (SIGKILL) Κάποια αποστέλλονται αυτόματα από το ΛΣ, κάποια από άλλη διεργασία (kill())

Σήματα στο UNIX (2) Για εισερχόμενο σήμα, εκτελείται προκαθορισμένη ενέργεια (συνήθως τερματισμός) Η wait() επιστρέφει ανάλογο status Το σήμα μπορεί να συλληφθεί, οπότε εκτελείται συνάρτηση χειρισμού του (signal(), sigaction()) π.χ., όταν πατηθεί Ctrl-C, σώσε το ανοιχτό αρχείο Τα SIGSTOP και SIGKILL δεν πιάνονται Αναξιόπιστος μηχανισμός επικοινωνίας Ασύγχρονος, με race conditions Το POSIX προβλέπει αξιόπιστα σήματα (sigprocmask(), sigsuspend())

Σωληνώσεις στο UNIX (1) Διεργασία write fd[1] άκρο εγγραφής M read fd[0] Χώρος Χρήστη Χώρος Πυρήνα άκρο ανάγνωσης int fd[2]; Ένας από τους βασικότερους μηχανισμούς στο UNIX int num1, num2; Μονόδρομη μεταφορά δεδομένων Από το άκρο εγγραφής στο άκρο ανάγνωσης pipe(fd); Δημιουργία με pipe(), επικοινωνία με write() και read() write(fd[1], &num1, sizeof(num1)); Αν η σωλήνωση είναι άδεια; η read() μπλοκάρει read(fd[0], &num2, sizeof(num2));

Σωληνώσεις στο UNIX (2) Διεργασία πατέρας write fd[1] read fd[0] άκρο εγγραφής M Διεργασία παιδί write fd[1] read fd[0] Χώρος Χρήστη Χώρος Πυρήνα άκρο ανάγνωσης pipe(fd); fork(); ο πατέρας κλείνει το άκρο ανάγνωσης το παιδί κλείνει το άκρο εγγραφής

Νήματα - Σύνοψη Ορισμός νημάτων, σχέση με διεργασίες Πλεονεκτήματα πολυνηματισμού Μοντέλα πολυνηματισμού Υλοποίηση σε χώρο χρήστη, πυρήνα, συνδυασμού τους Βιβλιοθήκες και APIs πολυνηματισμού POSIX Threads, Win32, Java Threads

Νήματα - Σύνοψη Ορισμός νημάτων, σχέση με διεργασίες Πλεονεκτήματα πολυνηματισμού Μοντέλα πολυνηματισμού Υλοποίηση σε χώρο χρήστη, πυρήνα, συνδυασμού τους Βιβλιοθήκες και APIs πολυνηματισμού POSIX Threads, Win32, Java Threads

Νήματα Threads Νήματα: χωριστές ροές εκτέλεσης μέσα στην ίδια διεργασία Κατάσταση διεργασίας = αρχιτεκτονική κατάσταση + πόροι ΛΣ Χωριστή αρχιτεκτονική κατάσταση για κάθε νήμα Μετρητής Προγράμματος, Καταχωρητές CPU, Στοίβα Όλα τα νήματα ζουν μέσα στην ίδια διεργασία Μοιράζονται τους πόρους του ΛΣ Κοινή μνήμη, κοινά ανοιχτά αρχεία, κοινά δικαιώματα Άμεση πρόσβαση σε κοινά δεδομένα

Πολυνηματική Διεργασία Κείμενο Δεδομένα Πόροι ΛΣ (π.χ. ανοιχτά αρχεία) Κείμενο Δεδομένα Πόροι ΛΣ (π.χ. ανοιχτά αρχεία) Καταχωρητές Καταχωρητές Καταχωρητές Καταχωρητές Μετρητής Προγράμματος Στοίβα PC PC PC Στοίβα Στοίβα Στοίβα νήμα εκτέλεσης νήμα 1 νήμα 2 νήμα 3

Νήματα - Σύνοψη Ορισμός νημάτων, σχέση με διεργασίες Πλεονεκτήματα πολυνηματισμού Μοντέλα πολυνηματισμού Υλοποίηση σε χώρο χρήστη, πυρήνα, συνδυασμού τους Βιβλιοθήκες και APIs πολυνηματισμού POSIX Threads, Win32, Java Threads

Νήματα Γιατί; Αποκρισιμότητα Διαφορετικά νήματα κάνουν διαφορετικά πράγματα, π.χ. νήμα αλληλεπίδρασης με χρήστη και νήματα υπολογισμού Οικονομία πόρων Μικρότερο κόστος δημιουργίας/καταστροφής νημάτων Ένα νήμα θέλει λιγότερους πόρους ΛΣ από μια διεργασία Παράλληλος υπολογισμός Μικρό κόστος επικοινωνίας ανάμεσα σε νήματα Χρονοδρομολόγηση νημάτων προσαρμοσμένη στην εφαρμογή Ευκολότερος προγραμματισμός Πολυνηματικοί εξυπηρετητές Κάθε νήμα έχει τη δική του κατάσταση νήμα ανά πελάτη Ασύγχρονη λειτουργία με σύγχρονες κλήσεις συστήματος Κάθε νήμα αναστέλλεται ανεξάρτητα από τα υπόλοιπα

Νήματα - Σύνοψη Ορισμός νημάτων, σχέση με διεργασίες Πλεονεκτήματα πολυνηματισμού Μοντέλα πολυνηματισμού Υλοποίηση σε χώρο χρήστη, πυρήνα, συνδυασμού τους Βιβλιοθήκες και APIs πολυνηματισμού POSIX Threads, Win32, Java Threads

Μοντέλα Πολυνηματισμού Προγραμματιστικά μοντέλα και APIs για πολυνηματισμό POSIX Threads, Win32 API, Java threads, OpenMP Πώς υλοποιείται η υποστήριξη νημάτων; Στο χώρο πυρήνα, στο χώρο χρήστη, με συνεργασία και των δύο; Νήματα χώρου χρήστη νήματα χώρου πυρήνα Ο χρονοδρομολογητής του ΛΣ βλέπει μόνο νήματα πυρήνα Πλεονεκτήματα / μειονεκτήματα της κάθε προσέγγισης;

Ν:1 - Νήματα σε επίπεδο χρήστη (1) user thread Χώρος Χρήστη k kernel thread Χώρος Πυρήνα Δημιουργία νημάτων σε επίπεδο χρήστη Με φορητό τρόπο, πχ. swapcontext(), setjmp/longjmp() Ο πυρήνας δεν γνωρίζει τίποτε για αυτά Η χρονοδρομολόγηση γίνεται από κώδικα χρήστη Είτε με διακοπτό (SIGALRM) είτε συνεργατικά, με μη-διακοπτό τρόπο

Ν:1 - Νήματα σε επίπεδο χρήστη (2) user thread Χώρος Χρήστη k kernel thread Χώρος Πυρήνα Μικρό κόστος διαχείρισης νημάτων Χρονοδρομολόγηση προσαρμοσμένη στην εφαρμογή Τι γίνεται με κλήσεις συστήματος που προκαλούν αναστολή της εκτέλεσης; Αν ένα νήμα μπλοκάρει σε read(), όλη η διεργασία μπλοκάρει

Παράδειγμα υλοποίησης Ν:1 - GNU Pth Πολυνηματική βιβλιοθήκη σε επίπεδο χρήστη, με υποστήριξη και του Pthreads API Μη-διακοπτός καταμερισμός χρόνου (non-preemptive multitasking) Δεν χρειάζεται υποστήριξη από τον πυρήνα Διαχείριση νημάτων με κλήσεις POSIX makecontext() / swapcontext(), setjmp()/longjmp() Φορητότητα, μικρό κόστος διαχείρισης νημάτων Προσαρμοσμένη σε πολυνηματικούς εξυπηρετητές, όχι παράλληλο υπολογισμό Προβλήματα: διαχείριση κλήσεων συστήματος, υποστήριξη πολυπεξεργαστών; On the other hand, it cannot benefit from the existence of multiprocessors, because for this, kernel support would be needed. In practice, this is no problem, because multiprocessor systems are rare [GNU Pth manual]

1:1 - Νήματα σε επίπεδο πυρήνα user thread Χώρος Χρήστη k k k kernel thread Χώρος Πυρήνα Υποστήριξη πολυεπεξεργαστών, χωριστά νήματα σε χωριστούς πυρήνες πολυπύρηνων επεξεργαστών Ακριβότερη διαχείριση νημάτων Απλούστερη υλοποίηση Linux NPTL, Win32 σε Windows NT/XP/2k, Solaris 9+

Παράδειγμα υλοποίησης 1:1 Linux NPTL Linux Native POSIX Threads Library Υλοποίηση της POSIX 1003.1c σε επίπεδο πυρήνα Βασισμένη στο μηχανισμό συγχρονισμού futex και την κλήση συστήματος clone() Διάφορα clone() flags: CLONE_FILES, CLONE_SIGHAND, CLONE_VM Η fork() υλοποιείται ως clone() Ο πυρήνας βλέπει tasks, που μοιράζονται σχεδόν τα πάντα (νήματα) ή τίποτε (διεργασίες)

Μ:Ν Συνδυασμός νημάτων χρήστη/πυρήνα user thread Χώρος Χρήστη k k k kernel thread Χώρος Πυρήνα Ένας αριθμός από νήματα χρήστη τρέχει πάνω σε περισσότερα του ενός νήματα πυρήνα Διεπίπεδη χρονοδρομολόγηση Πολύπλοκη υλοποίηση Solaris έκδοσης < 9

Παράδειγμα υλοποίησης Μ:Ν Solaris user thread Χώρος Χρήστη LWP LWP LWP PCB πολυνηματικής διεργασίας k k k kernel thread Χώρος Πυρήνα Μια πολυνηματική διεργασία αποτελείται από πολλές ελαφρές διεργασίες LightWeight Processes (LWPs) Ο χρονοδρομολογητής χώρου χρήστη βλέπει εικονικούς επεξεργαστές Ο χρονοδρομολογητής χώρου πυρήνα βλέπει νήματα πυρήνα Ανάγκη για upcalls: Ο πυρήνας ενημερώνει το χώρο χρήστη όταν ένα LWP πρόκειται να μπλοκάρει εκτέλεση έτοιμου νήματος σε νέο LWP

Νήματα - Σύνοψη Ορισμός νημάτων, σχέση με διεργασίες Πλεονεκτήματα πολυνηματισμού Μοντέλα πολυνηματισμού Υλοποίηση σε χώρο χρήστη, πυρήνα, συνδυασμού τους Βιβλιοθήκες και APIs πολυνηματισμού POSIX Threads, Win32, Java Threads

Δημιουργία νημάτων στα POSIX Threads Δημιουργία με pthread_create() int pthread_create(pthread_t * thread, pthread_attr_t * attr, void * (*start_routine)(void *), void * arg); π.χ. pthread_create(&tid, &attr, thread_fn, arg) Αναμονή για τερματισμό (pthread_exit()) με pthread_join() thread1 pthread_create thread1 pthread_join thread1 thread2 Compute thread2 pthread_exit thread2 (stopped)

Ερωτήσεις; και στη λίστα: OS@lists.cslab.ece.ntua.gr

Χρηματοδότηση Το παρόν εκπαιδευτικό υλικό έχει αναπτυχθεί στα πλαίσια του εκπαιδευτικού έργου του διδάσκοντα. Το έργο «Ανοικτά Ακαδημαϊκά Μαθήματα» του ΕΜΠ έχει χρηματοδοτήσει μόνο την αναδιαμόρφωση του υλικού. Το έργο υλοποιείται στο πλαίσιο του Επιχειρησιακού Προγράμματος «Εκπαίδευση και Δια Βίου Μάθηση» και συγχρηματοδοτείται από την Ευρωπαϊκή Ένωση (Ευρωπαϊκό Κοινωνικό Ταμείο) και από εθνικούς πόρους.