Χρονοπρογραμματισμός Διεργασιών (Process Scheduling)
Περίληψη Χρονοπρογραμματισμός διεργασιών και κριτήρια Κατηγορίες χρονοπρογραμματιστών Αλγόριθμοι χρονοπρογραμματισμού
Χρονοπρογραμματισμός Η πολιτική με την οποία το ΛΣ αποφασίζει ποια διεργασία θα εκτελεστείς την επόμενη χρονική στιγμή Οι απαιτήσεις από τον χρονοπρογραμματιστή διαφέρουν σύμφωνα με την εφαρμογή Σε παλαιότερα συστήματα τύπου batch η δουλεία του χρονοπρογραμματιστή ήταν σχετικά απλή… Σε συστήματα με πολλαπλούς χρήστες (time sharing or multi-user) η δουλεία του χρονοπρογραμματιστή είναι πιο δύσκολη… Ποια η δουλεία του χρονοπρογραμματιστή σε έναν προσωπικό υπολογιστή; Στην περίπτωση των δικτυωμένων εξυπηρετητών ο χρονοπρογραμματιστής παίζει μεγάλο ρόλο στην απόδοση του συστήματος Interactive and background processes.
Χρονοπρογραμματισμός Κόστος αλλαγής διεργασίας Αποθήκευσης της κατάστασης μιας διεργασίας Επιλογή της επόμενης, Φόρτωση της κατάστασης της επόμενης και Επαναδραστηριοποίηση Πότε θα πάρει απόφαση ο χρονοπρογραμματιστής; Όταν μια διεργασία δημιουργήσει ένα παιδί (child process). Όταν μια διεργασία τελειώσει τότε ο χρονοπρογραμματιστής θα επιλέξει την επόμενη διεργασία Όταν μια διεργασία μπλοκάρει (Ε/Ε ή σηματοφόρος) Όταν συμβεί κάποιο σήμα διακοπής (interrupt) Σήμα διακοπής από Ε/Ε Σήμα διακοπής από χρονομέτρη (timer)
Χρονοπρογραμματισμός Preemptive vs. non-preemptive Preemptive: μια διεργασία μπορεί να διακοπεί και ο επεξεργαστής να δοθεί σε μια νέα διεργασία. Non-preemptive: μια διεργασία δεν διακόπτεται. Εάν δεν υπάρχει ρολόι τότε non-preemptive είναι η μόνη επιλογή εκτός εάν υπάρχουν διεργασίες με διαφορετικές προτεραιότητες.
Στόχοι Χρονοπρογραμματιστή Αυτοί εξαρτώνται από το περιβάλλον της εφαρμογής Σε όλα τα συστήματα Δικαιοσύνη Όλες οι διεργασίες παίρνουν ένα «δίκαιο» μερίδιο από την υπολογιστική δυνατότητα του επεξεργαστή Εφαρμογή της πολιτικής Ισοζυγισμός Όλα τα μέρη του υπολογιστή πρέπει να χρησιμοποιούνται
Στόχοι Χρονοπρογραμματιστή Συστήματα τύπου batch Διεκπεραιωτική ικανότητα (throughput) Πόσες διεργασίες τελειώνουν σε κάθε χρονική περίοδο (π.χ., κάθε ώρα). Χρόνος ολοκλήρωσης ή χρόνος στο σύστημα (turnaround time) Ο χρόνος από τη στιγμή που κατατίθεται η διεργασία μέχρι τη στιγμή διεκπεραίωσης. Συμπεριλαμβάνει το χρόνο αναμονής και επεξεργασίας. Χρήση του επεξεργαστή (CPU utilization) Ποσοστό του χρόνου κατά το οποίο ο επεξεργαστής είναι απασχολημένος.
Στόχοι Χρονοπρογραμματιστή Διαδραστικά Συστήματα (Interactive) Χρόνος απόκρισης Χρόνος από τη στιγμή που θα υπάρξει κάποια εντολή μέχρις ότου εκτελεστεί Αναλογικότητα (proportionality) Απόκριση του συστήματος είναι σύμφωνα με την αντίληψη του χρήστη. Μας ενδιαφέρει το ποσοστό χρήσης του επεξεργαστή; Συστήματα Πραγματικού Χρόνου (real-time) Οι διεργασίες πρέπει να τελειώνουν μέσα στα δεδομένα χρονικά πλαίσια (deadlines) Η απόκριση του συστήματος πρέπει να είναι προβλέψιμη (predictable)
Στόχοι Χρονοπρογραμματιστή Οι απαιτήσεις πολλές φορές είναι αντιφατικές Ελαχιστοποίηση του χρόνου ολοκλήρωσης (turnaround) δεν σημαίνει και μεγιστοποίηση της διεκπεραιωτικής ικανότητας του συστήματος Υποθέστε ένα σύστημα με πολλές σύντομες και μεγάλες διεργασίες Μεγιστοποίηση Διεκπεραιωτικής ικανότητας συνεπάγεται εκτέλεση όλων των σύντομων διεργασιών πρώτα που κατά συνέπεια μεγαλώνει το χρόνο ολοκλήρωσης των μεγάλων διεργασιών.
Τύποι Χρονοπρογραμματιστών Μακροπρόθεσμος (admission scheduler) Πόσες και ποιες διεργασίες θα εκτελεσθούν Επηρεάζει το επίπεδο του πολυπρογραμματισμού Μεσοπρόθεσμος (memory scheduler) Πόσες και ποιες διεργασίες θα φορτωθούν στη κύρια μνήμη Βραχυπρόθεσμος (dispatcher or CPU scheduler) Πια διεργασία θα εκτελεστεί αμέσως μετά. Χρονοπρογραμματισμός συσκευών Ε/Ε
Τύποι Χρονοπρογραμματιστών
Κριτήρια Πόσο χρόνος πέρασε από την στιγμή που μια διεργασία μπήκε ή βγήκε από την επεξεργαστή Πόσος χρόνος του επεξεργαστή κατανεμήθηκε πρόσφατα στη κάθε διεργασία Πόσο μεγάλη είναι η διεργασία Πόσο σημαντική είναι η διεργασία (priority).
Πολιτική FIFO First-In-First-Out ή First Come First Serve Ο χρονοπρογραμματιστής επιλέγει την διεργασία που ήταν στην ουρά τον περισσότερο χρόνο και την τρέχει μέχρι να τελειώσει. Πλεονεκτήματα Είναι απλή Καμιά διεργασία δεν υποφέρει από παρατεταμένη στέρηση Μειονεκτήματα Ο εξυπηρετητής μπορεί να μείνει αχρησιμοποίητος ενώ εκτελούνται εντολές Ε/Ε Δεν παρουσιάζει καλή απόκριση Μια «μικρή» διεργασία μπορεί να περιμένει πολλή ώρα εάν φτάσει ακριβώς μετά από μια μεγάλη διεργασία Όταν ο χρόνος εκτέλεσης των διεργασιών παρουσιάζει μεγάλη διασπορά (variance) τότε ο χρόνος απόκρισης μπορεί να είναι μεγάλος
Παράδειγμα Πολιτικής FIFO Διερ. Άφ. Eπ. Α 3 Β 2 6 Γ 4 Δ 5 Ε 8 Διερ. ΧΟ ΧΟ/Επ. Α Β Γ Δ Ε 3 1 7 7/6 9 9/4 12 12/5 6 Μέσος χρόνος στο σύστημα =8.6 Μέσος ΧΟ/Επ. =2.56 Ε Δ Γ B A 5 10 15 20
Πολιτική Round-Robin Ο χρονοπρογραμματιστής επιλέγει ένα διάστημα q και εκτελεί κάθε διεργασία για q χρονικές μονάδες και στη συνέχεια εναλλάσσει διεργασία. Πλεονεκτήματα Είναι απλή Είναι δίκαιη Καμιά διεργασία δεν υποφέρει από παρατεταμένη στέρηση Παρουσιάζει καλή απόκριση για μικρές διεργασίες (μικρές διεργασίες δεν περιμένουν πολύ πίσω από μεγάλες διεργασίες) Μειονεκτήματα Πιθανόν να έχει μειωμένη διεκπεραιωτική ικανότητα εάν το q είναι πολύ μικρό. Δίνει προτεραιότητα στις διεργασίας με περισσότερους υπολογισμούς παρά σε διεργασίες με Ε/Ε Διεργασίες με πολλές λειτουργίες Ε/Ε μπορεί να μην εκμεταλλεύονται ολόκληρο το q και μετά θα «χάνουν» τη σειρά τους
Παράδειγμα Πολιτικής Round-Robin (q=1) Διερ. Άφ. Eπ. Α 3 Β 2 6 Γ 4 Δ 5 Ε 8 4 4/3 16 16/6 13 13/4 14 14/5 7 7/2 Διερ. ΧΟ ΧΟ/Επ. Α Β Γ Δ Ε Μέσος χρόνος στο σύστημα =10.8 Μέσος ΧΟ/Επ. =2.71 Ε Ε Δ Δ Δ Δ Γ Γ Γ Γ B B B B B B A A 5 10 15 20
Παράδειγμα Πολιτικής Round-Robin (q=4) Διερ. Άφ. Eπ. Α 3 Β 2 6 Γ 4 Δ 5 Ε 8 3 1 15 15/6 7 7/4 14 14/5 11 11/2 Διερ. ΧΟ ΧΟ/Επ. Α Β Γ Δ Ε Μέσος χρόνος στο σύστημα =10.0 Μέσος ΧΟ/Επ. =2.71 Ε Δ Δ Γ B B A 5 10 15 20
Πολιτική Shortest Process Next (SPN) Ο χρονοπρογραμματιστής επιλέγει την πιο μικρή διεργασία που περιμένει στην ουρά την οποία εκτελεί μέχρι το τέλος. Πλεονεκτήματα Έχει αυξημένη διεκπεραιωτική ικανότητα Πολύ καλή απόδοση (απόκριση) για μικρές διεργασίες Μειονεκτήματα Μεγάλες διεργασίες μπορούν να υποφέρουν από παρατεταμένη στέρηση Είναι γενικά δύσκολο να υπολογίσουμε το χρόνο που χρειάζεται η κάθε διεργασία
Παράδειγμα Πολιτικής Shortest Process Next Διερ. Άφ. Eπ. Α 3 Β 2 6 Γ 4 Δ 5 Ε 8 Διερ. ΧΟ ΧΟ/Επ. Α Β Γ Δ Ε 3 1 7 7/6 11 11/4 14 14/5 3/2 Μέσος χρόνος στο σύστημα =7.6 Μέσος ΧΟ/Επ. =1.84 Ε Δ Γ B A 5 10 15 20
Υπολογισμός του Χρόνου Εκτέλεσης μιας Διεργασίας Υπολογίζουμε το χρόνο εκτέλεσης σύμφωνα με το χρόνο εκτέλεσης της διεργασίας στο παρελθόν. Ti: ο χρόνος εκτέλεσης της διεργασίας την φορά i (μέτρηση). Si: ο υπολογισμένος (προβλεπόμενος) χρόνος για την εκτέλεση i. Μέσος όρος Εκθετικός μέσος όρος
Πολιτική Shortest Remaining Time (SRT) Ο χρονοπρογραμματιστής επιλέγει την διεργασία που της έχει μείνει ο λιγότερος χρόνος μέχρι να τελειώσει. Σε περίπτωση που φτάσει μικρότερη διεργασία, τότε την εναλλάσσει με αυτήν που τρέχει. Πλεονεκτήματα Έχει αυξημένη διεκπεραιωτική ικανότητα Πολύ καλή απόδοση (απόκριση) για μικρές διεργασίες Σε σύγκριση με την SPN, δίνει αμέσως προτεραιότητα στις μικρές διεργασίες Μειονεκτήματα Μεγάλες διεργασίες μπορούν να υποφέρουν από παρατεταμένη στέρηση Είναι γενικά δύσκολο να υπολογίσουμε το χρόνο που χρειάζεται η κάθε διεργασία. Επίσης πρέπει να κρατούμε στοιχεία για το χρόνο που υπολείπεται η κάθε διεργασία.
Παράδειγμα Πολιτικής Shortest Remaining Time (SRT) Διερ. Άφ. Eπ. Α 3 Β 2 6 Γ 4 Δ 5 Ε 8 Διερ. ΧΟ ΧΟ/Επ. Α Β Γ Δ Ε 3 1 13 13/6 4 14 14/5 2 Μέσος χρόνος στο σύστημα =7.2 Μέσος ΧΟ/Επ. =1.59 Ε Δ Γ Γ B B A A 5 10 15 20
Πολιτική Highest Response Ration Next (HRRN) Ορίζουμε Wi: ο χρόνος που πέρασε στην ουρά η διεργασία i. Si: ο υπολογισμένος χρόνος για την εκτέλεση της διεργασίας i. Ο χρονοπρογραμματιστής επιλέγει την διεργασία με το μεγαλύτερο Ri και την τρέχει μέχρι το τέλος. Πλεονεκτήματα Έχει αυξημένη διεκπεραιωτική ικανότητα Πολύ καλή απόδοση (απόκριση) Μεγάλες διεργασίες δεν μπορούν να υποφέρουν από παρατεταμένη στέρηση Μειονεκτήματα Είναι γενικά δύσκολο να υπολογίσουμε το χρόνο που χρειάζεται η κάθε διεργασία. Σε κάθε βήμα πρέπει να υπολογίζουμε τα Ri για όλες τις διεργασίες
Παράδειγμα Πολιτικής Highest Response Ratio Next Διερ. Άφ. Eπ. Α 3 Β 2 6 Γ 4 Δ 5 Ε 8 Διερ. ΧΟ ΧΟ/Επ. Α Β Γ Δ Ε 3 1 7 7/6 9 9/4 14 14/5 7/2 Μέσος χρόνος στο σύστημα =8.0 Μέσος ΧΟ/Επ. =2.14 Ε Δ Γ B A 5 10 15 20
Πολιτικές με Κάποιας Μορφής Ανάδραση Σκεπτικό: Πολλές φορές είναι δύσκολο να υπολογιστεί ο χρόνος επεξεργασίας που χρειάζεται μια διεργασία. Οπόταν ορίζουμε μια διαδικασία κατά την οποία μεγάλες διεργασίες θα καθυστερούν περισσότερο απ’ ότι οι μικρές. Ο χρονοπρογραμματιστής επιλέγει ένα διάστημα q και εκτελεί κάθε διεργασία για q χρονικές μονάδες και στη συνέχεια εναλλάσσει διεργασία. Σε αντίθεση με τη πολιτική Round-Robin επιλέγει την διεργασία που μέχρι τώρα είχε τη λιγότερη ώρα στον επεξεργαστή. Πλεονεκτήματα Δίνει προτεραιότητα σε διεργασίες με Ε/Ε Δεν χρειάζεται εκτίμηση του χρόνου εκτέλεσης κάθε διεργασίας Μειονεκτήματα Πιθανόν να έχει μειωμένη διεκπεραιωτική ικανότητα εάν το q είναι πολύ μικρό. Μεγάλες διεργασίες κινδυνεύουν με παρατεταμένη στέρηση.
Παράδειγμα Πολιτικής Με Ανάδραση (q=1) Διερ. Άφ. Eπ. Α 3 Β 2 6 Γ 4 Δ 5 Ε 8 Διερ. ΧΟ ΧΟ/Επ. Α Β Γ Δ Ε 11 11/3 18 3 12 13 13/5 2 1 Μέσος χρόνος στο σύστημα =11.2 Μέσος ΧΟ/Επ. =2.65 Ε Δ Δ Δ Δ Γ Γ Γ B B B B B B A A A 5 10 15 20
Άλλες Μετρικές Απόδοσης Χρήση (utilization) του επεξεργαστή Σε όλα τα παραδείγματα η χρήση του επεξεργαστή είναι 100% Σε γενικές γραμμές είναι επιθυμητό ένα υψηλό ποσοστό χρήσης αλλά το 100% είναι «επικίνδυνο». Διεκπεραιωτική ικανότητα (throughput) Σε όλα τα παραδείγματα η διεκπεραιωτική ικανότητα ήταν 5 διεργασίες στις 20 χρονικές μονάδες Όλα τα παραδείγματα αγνοούσαν δύο πτυχές του προβλήματος του χρονοπρογραμματισμού Το κόστος εναλλαγής διεργασιών Διεργασίες με εντολές Ε/Ε
Χρονοπρογραμματισμός με Προτεραιότητες Οι διεργασίες μπορεί να κατανεμηθούν σε διάφορες ουρές οι οποίες έχουν διαφορετικές προτεραιότητες. Παραδείγματα Ο επεξεργαστής δεν παίρνει ποτέ διεργασίες από την ουρά k+1 εάν υπάρχουν διεργασίες στη k. Preemptive or non-preemptive Generalized Processor Sharing … CPU … k k+1 Οι προτεραιότητα κάθε διεργασίας μπορεί να υπολογίζεται δυναμικά ανάλογα με τους στόχους του συστήματος Π.χ., μια διεργασία που επιστρέφει από Ε/Ε εντολές μπορεί να πάρει ψηλότερη προτεραιότητα
Χρονοπρογραμματισμός με Λαχνούς Ο χρονοπρογραμματιστής επιλέγει τυχαία την επόμενη διεργασία. Εάν όλες οι διεργασίες έχουν την ίδια προτεραιότητα, τότε μακροπρόθεσμα θα πάρουν κατά μέσο όρο 1/n του χρόνου του επεξεργαστή. Εναλλακτικά, στην κάθε διεργασία μπορούμε να δώσουμε ένα αριθμό από «λαχνούς» οι οποίοι θα καθορίζουν την πιθανότητα να επιλεχθεί η συγκεκριμένη διεργασία Διεργασίες με περισσότερους λαχνούς έχουν μεγαλύτερη πιθανότητα επιλογής και επομένως ψηλότερη προτεραιότητα Αυτός ο αλγόριθμος επιλύει το δύσκολο πρόβλημα του καθορισμού της προτεραιότητας της κάθε διεργασίας με ένα σχετικά απλό τρόπο.
Χρονοπρογραμματισμός για Δίκαιο Μερίδιο (Fair Share) Υποθέστε ένα υπολογιστή με δύο χρήστες. Ο χρήστης 1 (Χ1) τρέχει τη διεργασία Α Ο χρήστης 2 (Χ2) τρέχει τις διεργασίες Β, Γ, Δ, Ε. Εάν χρησιμοποιήσουμε Round-Robin με ίσα διαστήματα q, τότε πιθανόν οι διεργασίες να εκτελεσθούν Α,Β,Γ,Δ,Ε,Α,Β,Γ,Δ,Ε,… Σαν αποτέλεσμα ο Χ1 παίρνει μόνο 20% του επεξεργαστή ενώ ο Χ2 τα υπόλοιπα 80%! Εναλλακτικά εάν υποχρεώσουμε το σύστημα να δίνει ίσο χρόνο στους δύο χρήστες, τότε οι διεργασίες θα εκτελεσθούν Α,Β,Α,Γ,Α,Δ,Α,Ε,Α,Β,Α,Γ,Α,Δ,… Εάν δώσουμε διπλάσιο χρόνο στον Χ2 από αυτόν του Χ1 Α,Β,Γ,Α,Δ,Ε, Α,Β,Γ,Α,Δ,Ε,…
Χρονοπρογραμματισμός στο Linux SCHED_FIFO για υποδιεργασίες πραγματικού χρόνου (real-time threads). SCHED_RR (round-robin) επίσης για υποδιεργασίες πραγματικού χρόνου. SCHED_OTHER για υποδιεργασίες μη πραγματικού χρόνου (non-real-time threads) Κάθε κατηγορία πραγματικού χρόνου έχει προτεραιότητα που κυμαίνεται μεταξύ 0-99 και κάθε SCHED_OTHER μεταξύ 100-139 Μικρότερος αριθμός σημαίνει μεγαλύτερη προτεραιότητα.
Χρονοπρογραμματισμός στο Linux: SCHED_FIFO Το ΛΣ δεν διακόπτει (non-preemptive) διεργασία αυτής της κατηγορίας εκτός από τις ακόλουθες περιπτώσεις Διεργασία SCHED_FIFO με ψηλότερη προτεραιότητα μπήκε στην κατάσταση «έτοιμη». Η διεργασία η οποία εκτελείται μπήκε στη κατάσταση «blocked». Η διεργασία η οποία εκτελείται εθελοντικά σταματά (sched_yield) Όταν η διεργασία η οποία εκτελείται διακόπτεται μπαίνει σε ουρά αντίστοιχη με την προτεραιότητα της. Όταν η διεργασία επανέρχεται στην κατάσταση «έτοιμη» τότε Εάν η διεργασία η οποία εκτελείται είναι χαμηλότερης προτεραιότητας τότε τη διακόπτει και παίρνει τον επεξεργαστή. Εάν περιμένουν περισσότερες από μια διεργασίες με την ίδια προτεραιότητα, τότε εκτελείται αυτή η οποία περίμενε περισσότερο.
Χρονοπρογραμματισμός στο Linux: SCHED_RR Παρόμοια με την SCHED_FIFO με μόνη διαφορά την ύπαρξη των χρονικών διαστημάτων q. Μόλις μια διεργασία συμπληρώσει το διάστημα της, διακόπτεται και επιλέγεται να εκτελεστεί μια διεργασία με προτεραιότητα μεγαλύτερη ή ίση με αυτή της διεργασίας που μόλις διακόπηκε. Διεργασίες με μεγαλύτερη προτεραιότητα μπορεί να έχουν μεγαλύτερο διάστημα απ’ ότι διεργασίες με μικρότερη προτεραιότητα.
Παράδειγμα Χρονοπρογραμματισμού στο Linux Διεργασία Κλάση Επεξεργασία Α SCHED_FIFO 3 Β SCHED_RR 6 Γ 4 Δ SCHED_OTHER 5 Ε 2 Ε Ε Δ Δ Δ Δ Δ Γ Γ Γ Γ B B B B B B A 5 10 15 20
Χρονοπρογραμματισμός στο Linux Το Linux χρησιμοποιεί δύο δομές (active and expired) για κάθε επεξεργαστή όπως πιο κάτω Struct prio_array { int nr_active; /*number of active processes*/ unsigned long bitmap[BITMAP_SIZE]; struct list_head queue[MAX_PRIO]; /*priority queues*/ } Υπάρχει μια ουρά για κάθε προτεραιότητα (MAX_PRIO=140) Το bitmap δείχνει ποίες ουρές είναι άδειες Το nr_active δείχνει το συνολικό αριθμό από ενεργοποιημένες διεργασίες
Χρονοπρογραμματισμός στο Linux Εκτελούνται πάντα οι διεργασίες στη δομή active. Όταν μια διεργασία συμπληρώσει το διάστημα της τότε μεταφέρεται στη δομή expired στην αντίστοιχη προτεραιότητα. Εάν η διεργασία διακοπεί πριν τον προβλεπόμενο χρόνο, τότε επιστρέφει πίσω στη δομή active. Μόλις αδειάσει η δομή active, τότε απλά η expired γίνεται η νέα active και η expired αρχικοποιείται σε άδεια και ο κύκλος επαναλαμβάνεται. Διεργασίες πραγματικού χρόνου επιστρέφουν πάντα στην δομή active. To Linux δίνει περισσότερη προτεραιότητα σε διεργασίες με εντολές Ε/Ε Αυξάνει την προτεραιότητα διεργασιών που περνούν πολλή ώρα μπλοκαρισμένες. Το διάστημα επεξεργασίας κάθε διεργασίας κυμαίνεται από 10 έως 200 ms.