900 likes | 1.07k Views
Linux Process Scheduling. Student: KARPOUZIS ATHANASIOS. Διεργασία / Process (1). Μία διεργασία ( process) είναι στην ουσία μία συλλογή από δομές δεδομένων που περιγράφουν πόσο μακριά έχει φτάσει κάποιο πρόγραμμα που εκτελείται.
E N D
Linux Process Scheduling Student:KARPOUZIS ATHANASIOS
Διεργασία / Process (1) • Μία διεργασία (process) είναι στην ουσία μία συλλογή από δομές δεδομένων που περιγράφουν πόσο μακριά έχει φτάσει κάποιο πρόγραμμα που εκτελείται. • Μοιάζουν στην ουσία με τους ανθρώπους, γεννιούνται, έχουν κάποιο χρόνο ζωής, έχουν την δυνατότητα να δημιουργήσουν απογόνους – νέες διεργασίες και τελικά πεθαίνουν (κύκλος ζωής). • Μια διεργασία είναι: • Ένα πρόγραμμα σε εκτέλεση • Μια ασύγχρονη δραστηριότητα, • Μια εκτελούμενη διαδικασία που συσχετίζεται με την ύπαρξη μιας δομής δεδομένων στο ΛΣ, τον περιγραφέα διεργασίας (process descriptor) ή μπλοκ ελέγχου διεργασίας (Process Control Block).
Διεργασία / Process(2) • Μια διεργασία είναι μια οντότητα με τον δικό της χώρο διευθύνσεων, που αποτελείται από: την περιοχή κώδικα (text region), περιέχει τον κώδικα που εκτελεί ο επεξεργαστής • Την περιοχή δεδομένων (data region), όπου αποθηκεύονται οι μεταβλητές και η δυναμικά παραχωρούμενη μνήμηπου χρησιμοποιεί ο επεξεργαστής κατά τη διάρκεια της εκτέλεσης • Την περιοχή στοίβας (stack region), όπου αποθηκεύονται οι εντολές και οι τοπικές μεταβλητές για τις ενεργές κλήσεις διαδικασιών
Διεργασία / Process(3) • Οι διεργασίες μπορούν να προχωρήσουν μόνον όταν υπάρχει το μέσον που θα εκτελέσει τα σχετικά προγράμματα. Αυτό το μέσο είναι ο επεξεργαστής (processor). • Ανάλογα με τη φύση των εντολών, ο επεξεργαστής μπορεί να υλοποιηθεί αποκλειστικά με υλικό ή με συνδυασμό υλικού και λογισμικού. • Παράδειγμα: • μια CPU είναι ένας επεξεργαστής για εκτέλεση εντολών γλώσσας μηχανής, ενώ μια CPU μαζί με έναν διερμηνευτή (interpreter) μιας γλώσσας προγραμματισμού συνθέτουν έναν επεξεργαστή που εκτελεί εντολές της συγκεκριμένης γλώσσας προγραμματισμού.
Διεργασία / Process(4) • Ένας επεξεργαστής εκτελεί εντολές μηχανής που βρίσκονται στην κύρια μνήμη σε μορφή προγράμματος. • Για να εκτελεσθεί ένα πρόγραμμα δημιουργείται μια διεργασία για το συγκεκριμένο πρόγραμμα. • Κατά τη διάρκεια του χρόνου οι εντολές προγράμματος που εκτελούνται δημιουργούν μια λίστα που ονομάζεται αποτύπωση της διεργασίας. • Ένας επεξεργαστής μπορεί να απασχοληθεί σε διαφορετικές διεργασίες μέσω ενός αλγορίθμου χρονοδρομολόγησης (scheduling) που καθορίζει πότε και ποια διεργασία θα έχει κάθε φορά το δικαίωμα αποκλειστικής χρήσης του. • Το ζητούμενο είναι να εξισορροπηθούν οι ανταγωνιστικές απαιτήσεις για την αποδοτικότητα (efficiency) όλου του συστήματος και για τις σχέσεις δικαιοσύνης (fairness) μεταξύ των διεργασιών.
Χρονοδρομολογητής (1) • Όταν μια διεργασία βρίσκεται σε μια ουρά το Λ.Σ. με κάποιον τρόπο πρέπει να επιλέξει μια διεργασία από την ουρά, η λειτουργία αυτή επιτελείται από έναν χρονο-δρομολογητή. • Long-term scheduler (or job scheduler) – αποφασίζει και επιλέγει τις διεργασίες που θα περιληφθούν στην ουρά των έτοιμων προς εκτέλεση διεργασιών (ready queue). Ελέγχει τον βαθμό πολυπρογραμματισμού. • Short-term scheduler (or CPU scheduler) – επιλέγει ποια διεργασία θα είναι η επόμενη προς εκτέλεση και εκχωρεί τη χρήση της CPU. • Medium-term scheduler – χρησιμοποιείται ειδικά σε time-sharing συστήματα ως ένα ενδιάμεσο επίπεδο χρονοδρομολόγησης. Χρησιμοποιεί ένα σχήμα εναλλαγής που μετακινεί περιοδικά διεργασίες από τη μνήμη και τις εγκαθιστά αργότερα για να συνεχίσουν από το σημείο που είχαν σταματήσει.
Περιγραφέας Διεργασίας (Process Descriptor)
Περιγραφέας Διεργασίας (Process Descriptor) (1) • Πρόκειται για μία δομή που διατηρεί πληροφορίες όσον αφορά την προτεραιότητα της διεργασίας, των χώρο διευθύνσεων που της αντιστοιχεί (address space), την κατάσταση της διεργασίας κτλ. • Στην υλοποίηση του λειτουργικού συστήματος Linux είναι η struct task_struct. • struct task_struct { • 1118 volatile long state; /* -1 unrunnable, 0 runnable, >0 stopped */ • 1119 void *stack; • 1120 atomic_t usage; • 1121 unsigned int flags; /* per process flags, defined below */ • 1122 unsigned int ptrace; • 1123 • 1124 int lock_depth; /* BKL lock depth */ • 1125 • 1126#ifdef CONFIG_SMP • 1127#ifdef __ARCH_WANT_UNLOCKED_CTXSW • 1128 int oncpu; • 1129#endif • 1130#endif • 1131 • 1132 int prio, static_prio, normal_prio; • 1133 unsigned int rt_priority; • 1134 const struct sched_class *sched_class; • 1135 struct sched_entity se; • 1136 struct sched_rt_entity rt; • 1137 ……………….
Περιγραφέας Διεργασίας (Process Descriptor) (2) • Περιγραφέας Διεργασίας • Η δομή task_struct.
Περιγραφέας Διεργασίας (Process Descriptor) (3)Κατάσταση Διεργασίας (Process State) • Παρατηρούμε στην δομή του περιγραφέα διεργασίας το πεδίο state που δηλώνει την κατάσταση της διεργασίας. • Κάθε φορά η διεργασία μπορεί να έχει μόνο μία κατάσταση, η οποία μπορεί να αλλάζει. • Μαζί με την κατάσταση της διεργασίας υπάρχεις και η κατάσταση εξόδου της διεργασίας σε ξεχωριστό πεδίο.
Περιγραφέας Διεργασίας (Process Descriptor) (4)Κατάσταση Διεργασίας (Process State) • Καταστάσεις Διεργασίας: • TASK_RUNNING • Η διεργασία τρέχει στον επεξεργαστή η περιμένει στην ουρά για να εκτελεστεί. • TASK_INTERRUPTIBLE • Η διεργασία κοιμάται, μέχρι κάποιο σήμα που προέρχεται από μία κατάσταση που άλλαξε, να την ξυπνήσει. Η διεργασία μπορεί να περίμενε κάποιους πόρους, ή να έγινε κάποιο hardware interrupt, ή κάποιο άλλο σήμα. Γυρίζει σε κατάσταση TASK_RUNNING. • TASK_UNINTERRUPTIBLE • Όπως η παραπάνω κατάσταση με την διαφορά ότι κάποιο σήμα δεν ξυπνάει την διεργασία και παραμένει μπλοκαρισμένη. Γενικά είναι σπάνιο να βρεθεί διεργασία σε αυτή την κατάσταση.
Περιγραφέας Διεργασίας (Process Descriptor) (5)Κατάσταση Διεργασίας (Process State) • Καταστάσεις Διεργασίας: • TASK_STOPPED • H εκτέλεση της διεργασία σταματάει, η διεργασία σταματά κατόπιν κάποιων από αυτών των σημάτων • SIGSTOP • SIGTSTP • SIGTTIN • SIGTTOU • TASK_TRACED • Η εκτέλεση μια διεργασίας σταμάτησε από τον debugger. Όταν μια διεργασία παρακολουθείται από κάποια άλλη όπως πχ ένας debugger με την ptrace() κλήση συστήματος, κάποιο σήμα μπορεί να φέρει την διεργασία σε αυτή την κατάσταση.
Περιγραφέας Διεργασίας (Process Descriptor) (5α)Κατάσταση Διεργασίας (Process State)
Περιγραφέας Διεργασίας (Process Descriptor) (5β)Στιγμιότυπο Εκτέλεσης
Περιγραφέας Διεργασίας (Process Descriptor) (6)Κατάσταση Εξόδου Διεργασίας (Process State) • Καταστάσεις εξόδου (τερματισμού) διεργασίας: • EXIT_ZOMBIE • Η διεργασία τερματίστηκε αλλά η διεργασία πατέρας δεν έχει εκτελέσει την κλήση συστήματος waitpid ή wait ώστε να επιστρέψει πληροφορίες για την νεκρή διεργασία. Πριν ολοκληρωθεί η κλήση αυτή συστήματος ο πυρήνας δεν μπορεί να ελευθερώσει / απομακρύνει δεδομένα που αφορούν την νεκρή διεργασία γιατί ο πατέρας μπορεί να τα χρειάζεται. • EXIT_DEAD • Τελική κατάσταση, η διεργασία αφαιρείται από το σύστημα γιατί ο πατέρας πήρε αποτέλεσμα από την κλήση συστήματος waitpid ή wait.
Περιγραφέας Διεργασίας (Process Descriptor) (7)Αναγνωρίζοντας μία Διεργασία • Κάθε διεργασία έχει δείκτες σε περιγραφέα διεργασιών με μέγεθος32-bit • Κάθε διεργασία έχει το δικό της αναγνωριστικό διεργασίας (Process ID (PID))16-bit (~32767 για συμβατότητα) • Το σύστημα Linux αντιστοιχεί διαφορετικά PID με κάθε διεργασία. • Για να πάρουμε το αναγνωριστικό της διεργασίας χρησιμοποιούμε την κλήση συστήματος getpipd() και για να πάρουμε το αναγνωριστικό της διεργασίας πατέρα χρησιμοποιούμε την κλήση συστήματος getppid().
Περιγραφέας Διεργασίας (Process Descriptor) (8)Διάγραμμα Καταστάσεων στο Linux (Process State)
Αλλαγή Διεργασίας (Process Switch) (1) • Ο πυρήνας μπορεί να μπλοκάρει την εκτέλεση μίας διεργασίας που τρέχει στον επεξεργαστή ώστε να συνεχίσει την εκτέλεση κάποιας άλλης που προηγουμένως είχε μπλοκαριστεί. • Όλες οι διεργασίες μοιράζονται τους καταχωρητές του επεξεργαστή αλλά έχουν τον δικό τους χώρο διευθύνσεων (address space). Πριν συνεχίσει ο επεξεργαστής μία διεργασία που είχε μπλοκαριστεί πρέπει να φορτωθούν στους καταχωρητές οι τιμές που αφορούσαν την διεργασία αυτή. • Το σύνολο των δεδομένων που πρέπει να φορτωθούν στους καταχωρητές πριν συνεχίσει η διεργασία ονομάζεται hardware context. • Στο Linux ένα τμήμα του hardware context βρίσκεται στον file descriptor ενώ το υπόλοιπο αποθηκεύεται σε μία άλλη δομή την Kernel Mode Stack.
Αλλαγή Διεργασίας (Process Switch) (2) • Θα χρησιμοποιήσουμε δύο μεταβλητές: • Prev: τοπική μεταβλητή που αναφέρεται στον file descriptor της διεργασίας που βγαίνει. • Next: τοπική μεταβλητή που αναφέρεται στην διεργασία που μπαίνει για να εκτελεστεί. • Η αλλαγή διεργασίας συμβαίνει μόνο σε επίπεδο πυρήνα με τα ανώτερα δικαιώματα. • Οι παλαιότερες εκδόσεις του Linux εκμεταλλεύονται από την υποστήριξη σε υλικό που έδινε η αρχιτεκτονική 80x86 και μπορούσαν να κάνουν την αλλαγή διεργασίας με μία far jmp εντολή.
Αλλαγή Διεργασίας (Process Switch) (3) • Η αλλαγή της διεργασίας γίνεται βηματικά με ένα σύνολο από mov (move) εντολέςοι οποίες εξασφαλίζουν την εγκυρότητα των δεδομένων που φορτώνονται. • Ειδικά ελέγχονται οι τιμές των καταχωρητών ds, es που μπορεί να έχουν πειραχτεί από έναν κακόβουλο χρήστη. Αυτό το είδος ελέγχου δεν είναι δυνατό όταν πραγματοποιείται αλλαγή με την εντολή far jmp που αναφέρθηκε. • Το σύνολο του χρόνου που απαιτείται τόσο με την παλιά όσο και με την νέα μέθοδο είναι σχεδόν ο ίδιος. • Οι τιμές των καταχωρητών που χρησιμοποιούνται από την διεργασία σε επίπεδο χρήστη αποθηκεύονται όλες στην Kernel Mode Stack πριν γίνει η αλλαγή διεργασίας.
Αλλαγή Διεργασίας (Process Switch) (4)Εκτελώντας την Αλλαγή Διεργασίας • Γίνεται σε δύο (2) βήματα: • Αλλάζοντας το Page Global Directory για να εγκατασταθεί ένα νέο address space. • Αλλάζοντας το Kernel Mode Stack και το hardware context που διαθέτουν όλες τις πληροφορίες που χρειάζονται για να εκτελέσει ο πυρήνας την νέα διεργασία. (καταχωρητές επεξεργαστή) • Το δεύτερο βήμα γίνεται μέσω ενός macro του switch_to macro το οποίο δέχεται τρεις (3) παραμέτρους: prev, next, last. • Η τελευταία παράμετρος χρησιμοποιείται ώστε να διατηρήσει μία αναφορά στην διεύθυνση του file descriptor της τελευταίας ενεργής διεργασίας, ώστε να μπορεί ο πυρήνας να γράφει στους καταχωρητές τα δεδομένα που χρειάζεται στο process switching.
Αλλαγή Διεργασίας (Process Switch) (5)Εκτελώντας την Αλλαγή Διεργασίας • Η αλλαγή από την διεργασία Α->Β, διατηρεί την πληροφορία για την Α διεργασία στην διεύθυνση μνήμης που βρίσκεται η last μεταβλητή, ώστε να μπορούν να γραφτούν στον eaxκαταχωρητή τα δεδομένα για την τελευταία διεργασία που έχει μπλοκαριστεί.
Πολιτική Δρομολόγησης (1) • H πολιτική δρομολόγησης του Linux βασίζεται σε time sharing technique. • Πολλαπλές διεργασίες τρέχουν με τεχνικές πολυπλεξίας χρόνου καθώς ο επεξεργαστής διαιρείται σε τμήματα (slices), ένα για κάθε διεργασία που πρόκειται να εκτελεστεί. • Διακρίνουμε τρεις (3) κλάσεις από διεργασίες: • Interactive Processes • Batch Processes • Real – time Processes
Πολιτική Δρομολόγησης (2) • Interactive Processes: • Ασχολούνται συνεχώς με τους χρήστες και σπαταλούν πολύ χρόνο περιμένοντας για events όπως το πάτημα κουμπιών, κλικ ποντικιού κτλ. Όταν λάβουν είσοδο η διεργασία πρέπει να ξυπνήσει άμεσα, αλλιώς το σύστημα δεν θα ανταποκρίνεται στις αιτήσεις. • Batch Processes: • Δεν χρειάζονται την παρέμβαση του χρήστη και κυρίως τρέχουν στο παρασκήνιο εκτελώντας σημαντικές για το σύστημα διαδικασίες. • Real – Time Processes: • Έχουν μεγάλη σημασία για το σύστημα, δεν μπορούν να μπλοκαριστούν από χαμηλότερης προτεραιότητας διεργασίες και πρέπει να τρέχουν όσο το δυνατόν συντομότερα. (video or audio processing)
Πολιτική Δρομολόγησης (3)Κλήσεις Συστήματος που αφορούν την δρομολόγηση
Πολιτική Δρομολόγησης (4) • Αλλαγή διεργασίας για δύο (2) λόγους: • Διεργασία με μεγαλύτερη προτεραιότητα από την τρέχουσα διεργασία • Αλλαγή διεργασίας όταν λήξει τοκβάντο χρόνου που της έχει δοθεί από το σύστημα (time quantum). Όταν συμβαίνει αυτό το TIF_NEED_RESCHED πεδίο στην δομή thread_infoπαίρνει λογική τιμή true οπότε ο χρονοδρομολογητήςαναλαμβάνει την αλλαγή. • Οι διεργασίες στο Linux είναι preemptive ενώ σε αντίθεση με την προηγούμενη έκδοση την 2.5 που δεν είναι preemptive. • Preemptive: Το να μπορείς να τρέχεις πολλαπλές διεργασίες / νήματα στον ίδιο επεξεργαστή δίνοντας την εντύπωση πως τρέχουν παράλληλα, η κάθε μία στο κβάντο χρόνου που της αντιστοιχεί.
Πολιτική Δρομολόγησης (5)Thread info Structure
Αλγόριθμος Δρομολόγησης (Scheduling Algorithm)
Πότε συμβαίνει μία δρομολόγηση (2) • Χρειαζόμαστε όλους τους επεξεργαστές στο σύστημα να δουλεύουν • Συνήθως έχουμε πολλές διεργασίες που είναι στην ουρά των έτοιμων προς εκτέλεση διεργασιών και περιμένουν τον επεξεργαστή. • Δεν πρέπει να καταναλώνει μία διεργασία πλήρως τον επεξεργαστή για μεγάλο χρονικό διάστημα. • Ο πυρήνας του Linux 2.6 είναι preemptive αλλά χρησιμοποιεί spinlocks(SMP), έχει δε την δυνατότητα να απενεργοποιεί την δυνατότητα του αυτή σε ειδικές περιστάσεις.
Ο αλγόριθμος δρομολόγησης (1) • Στις πρώτες εκδόσεις Linux ήταν απλός και ευθύς, σε κάθε αλλαγή διεργασίας ο πυρήνας έψαχνε μέσα σε όλες τις διεργασίες που βρίσκονταν σε κατάσταση εκτέλεσης (runnable processes), υπολόγιζε σε αυτές τις προτεραιότητες τους και επέλεγε την καλύτερη από αυτές, αυτή με την μεγαλύτερη προτεραιότητα. • Μειονέκτημα εδώ αφορούσε τον χρόνο επιλογής της κατάλληλης διεργασίας καθώς βρίσκεται σε άμεση εξάρτηση με τον αριθμό των διεργασιών που σαρώνονται από τον πυρήνα (χιλιάδες διεργασίες συνεπάγεται σε μεγάλη σπατάλη χρόνου). • Δεν γινόταν βέλτιστη αξιοποίηση πολλαπλών επεξεργαστών σε μεγάλα υπολογιστικά συστήματα (high end systems).
Ο αλγόριθμος δρομολόγησης (2) • Στις νεότερες εκδόσεις δηλαδή στην έκδοση του Linux 2.6 ο αλγόριθμος βελτιώθηκε, έγινε περισσότερο πολύπλοκος. • Δυνατότητα επιλογής της διεργασίας που θα τρέξει σε πολύ γρηγορότερο χρονικό διάστημα, συγκεκριμένα με χρονική πολυπλοκότητα Ο(1) (constant time) χωρίς ουσιαστικά να εξαρτάται από το σύνολο των διεργασιών που βρίσκονται στο σύστημα. • Βελτιώθηκε η διαχείριση πολλαπλών επεξεργαστών καθώς κάθε επεξεργαστής έχει το δικό του σύνολο (ουρά) από διεργασίες που βρίσκονται σε φάση εκτέλεσης.
Ο αλγόριθμος δρομολόγησης (3) • Τρεις (3) κλάσεις δρομολόγησης: • SCHED_FIFO • SCHED_RR • SCHED_NORMAL
Ο αλγόριθμος δρομολόγησης (4) • SCHED_FIFO • First in First Out (FIFO) σε πραγματικό χρόνο διεργασία.Όταν ο χρονοδρομολογητήςβάζει μία διεργασία στον επεξεργαστή αφήνει τον περιγραφέα διεργασίας στην τωρινή θέση στην λίστα με τις διεργασίες που βρίσκονται για εκτέλεση. • SCHED_RR • Round Robin σε πραγματικό χρόνο διεργασία. Όταν ο χρονοδρομολογητήςβάζει μία διεργασία στον επεξεργαστή αφήνει τον περιγραφέα διεργασίας στην τελική θέση στην λίστα με τις διεργασίες που βρίσκονται για εκτέλεση. • SCHED_NORMAL • Συμβατική διεργασία με κβάντα χρόνου.
Ο αλγόριθμος δρομολόγησης (5) • Στατική προτεραιότητα, είναι μια τιμή που χρησιμοποιεί ο χρονοδρομολογητήςγια να δηλώσει την προτεραιότητα της διεργασίας. • Εύρος τιμών • 100 = μέγιστη προτεραιότητα • 139 = ελάχιστη προτεραιότητα • Μια νέα διεργασία κληρονομεί την στατική προτεραιότητα του πατέρα, όμως κάποιος χρήστης μπορεί να αλλάξει την τιμή αυτή με τις κλήσεις συστήματος nice() ή set_priority().
Ο αλγόριθμος δρομολόγησης (6)Base time Quantum • Είναι το κβάντο χρόνου που δίνει ο χρονοδρομολογητής σε μία διεργασία που έχει καταναλώσει το προηγούμενο κβάντο. • Μαθηματικός τύπος για την στατική προτεραιότητα και το κβάντο χρόνου: • Παρατηρούμε ότι όσο μεγαλύτερη στατική προτεραιότητα τόσο μεγαλύτερο και το κβάντο χρόνου.
Ο αλγόριθμος δρομολόγησης (7)Τυπικές τιμές στατικής προτεραιότητας για μία συμβατική διεργασία
Ο αλγόριθμος δρομολόγησης (8)Δυναμική Προτεραιότητα και μέσος χρόνος αδράνειας • Πέρα από την στατική προτεραιότητα ορίζεται και η δυναμική προτεραιότητα που είναι και αυτός ένας αριθμός από το 100-139 και ορίζεται από την παρακάτω φόρμουλα: • Dynamic priority = max (100, min( static_priority – bonus + 5, 139) ) • H τιμή bonus κυμαίνεται από 0 έως 10. • Τιμή μικρότερη από 5 δηλώνει penalty και μειώνει την δυναμική προτεραιότητα ενώ τιμή μεγαλύτερη από 5 δηλώνει premium και αυξάνει την δυναμική προτεραιότητα. • Η τιμή του bonus εξαρτάται από τις προηγούμενες τιμές της διεργασίας, μάλιστα από τις τιμές του μέσου χρόνου όπου η διεργασία βρίσκεται σε κατάσταση αδράνειας (sleep time).
Ο αλγόριθμος δρομολόγησης (10) • Για να αποφασιστεί αν μία διεργασία είναι interactive ή batch χρησιμοποιείται η ακόλουθη φόρμουλα: • Είναι interactive εάν: • dynamic_priority <= 3* static_priority/4+28 • Που είναι ισοδύναμο με: • Bonus-5 >=static_priority/4-28 • Ο όρος static_priority/4-28 ονομάζεται interactive delta και τιμές του αυτού παρουσιάζονται στον παρακάτω πίνακα.
Ο αλγόριθμος δρομολόγησης (12)Ενεργές(Active) / Περατωμένες(Expired) Διεργασίες • Ενεργές ονομάζονται οι διεργασίες που δεν έχουν ξεπεράσει το κβάντο χρόνου που τους έχει ανατεθεί και για αυτό τον λόγο μπορούν να τρέχουν. • Περατωμένες ονομάζονται οι διεργασίες που έχουν ολοκληρώσει το κβάντο χρόνου τους και για αυτό το λόγο πρέπει να περιμένουν μέχρι κάποια από τις ενεργές διεργασίες τελειώσει. • Περιοδικά, ο ρόλος των διεργασιών αλλάζει δυναμικά.
Ο αλγόριθμος δρομολόγησης (13)Real time process scheduling • Κάθε διεργασία πραγματικού χρόνου σχετίζεται με μία τιμή προτεραιότητας πραγματικού χρόνου που είναι μία τιμή που κυμαίνεται: • 1 = μέγιστη προτεραιότητα • 99 = ελάχιστη προτεραιότητα • Οι διεργασίες πραγματικού χρόνου θεωρούνται πάντα ενεργές με την μέγιστη προτεραιότητα η οποία μπορεί να αλλάξει από την χρήστη με την βοήθεια κλήσεων συστήματος όπως οι: • sched_setparam( ) • sched_set_scheduler( )
Ο αλγόριθμος δρομολόγησης (14)Real time process schedulingreplacement (1) • Μια διεργασία πραγματικού χρόνου αντικαθίσταται μόνο όταν ικανοποιούνται κάποια ή κάποιες από τις παρακάτω συνθήκες: • Η διεργασία αντικαθίσταται από μία άλλη με μεγαλύτερη προτεραιότητα • Η διεργασία εκτελεί μία διαδικασία μπλοκαρίσματος και μπαίνει σε κατάσταση αδράνειας (TASK_INTERRUPTIBLE ή TASK_UNINTERRUPTIBLE) • Η διεργασία σταματά (TASK_STOPPED ήTASK_TRACED), ή σκοτώνεται με κατάσταση (EXIT_ZOMBIE ή EXIT_DEAD). • Η διεργασία εθελοντικά απελευθερώνει τον επεξεργαστή καλώντας την κλήση συστήματος sched_yield( )
Ο αλγόριθμος δρομολόγησης (15)Real time process schedulingreplacement (2) • Μια διεργασία πραγματικού χρόνου αντικαθίσταται μόνο όταν ικανοποιούνται κάποια ή κάποιες από τις παρακάτω συνθήκες: • Η διεργασία είναι Round Robin (SCHED_RR) και έχει εξαντλήσει το χρονικό κβάντο της. • Οι κλήσεις συστήματος nice( ) και setpriority( ) όταν εφαρμόζονται σε μία διεργασία τύπου Round Robin δεν αλλάζουν την προτεραιότητα της σε πραγματικό χρόνο, αλλά αλλάζουν το χρονικό κβάντο της διεργασίας. • Το βασικό κβάντο αυτών των διεργασιών δεν εξαρτάται από την προτεραιότητα σε πραγματικό χρόνο των διεργασιών αυτών, αλλά από την στατική προτεραιότητα.
Ο αλγόριθμος δρομολόγησης (16)Δομές που χρησιμοποιούνται από τον χρονοδρομολογητή (1) • Σημαντικότερη από όλες τις δομές είναι η δομή Runqueue για τον χρονοδρομολογητήσε Linux λειτουργικά συστήματα με πυρήνα 2.6 • Κάθε επεξεργαστής στο σύστημα έχει την δική του δομή Runqueue. • Όλες οι Runqueue δομές αποθηκεύονται σε μεταβλητές ανά επεξεργαστή τύπου Runqueue. • this_rq( ) macro: Δηλώνει την διεύθυνση στην μνήμη της δομής για τον τοπικό επεξεργαστή • cpu_rq(n) macro: Δηλώνει την διεύθυνση στην μνήμη της δομής για τον επεξεργαστή με αναγνωριστικό (n).