Διαφορά μεταξύ ευχάριστων προτεραιοτήτων στο Linux και RT προτεραιότητες

Στο Linux, ο χρονοπρογραμματιστής ελέγχει ποια ροή εκτελείται και πόσο καιρό. Πρέπει να αντιμετωπιστούν δύο αντικρουόμενες απαιτήσεις: είσοδος / έξοδος και υπολογιστική αγωγιμότητα.

Η σειρά εκτέλεσης βασίζεται στην πολιτική και τον προγραμματισμό της προτεραιότητας κάθε κλωστής. Στην έκδοση 2.2 του Linux, εφαρμόζεται μια πολιτική πίνακα. Το Linux παρέχει 6 πολιτικές: SCHED_FIFO, SCHED_RR, SCHED_DEADLINE, SCHED_DEADLINE, SCHED_OTHER, SCHED_BATCH και SCHED_IDLE. Αυτές οι πολιτικές χωρίζονται σε 2 ομάδες, εκτός από το SCHED_DEADLINE. Τα SCHED_OTHER, SCHED_IDLE και SCHED_BATCH ανήκουν στην κανονική πολιτική και SCHED_FIFO, SCHED_RR είναι σε πραγματικό χρόνο. Τα θέματα SCHED_DEADLINE είναι ειδικά θέματα και θέματα προτεραιότητας.

Κάθε νήμα έχει μια τιμή "sched_priority" και θέματα με υψηλότερη τιμή "sched_priority" από άλλα. Η sched_priority ονομάζεται μερικές φορές προτεραιότητα σε πραγματικό χρόνο, επειδή χρησιμοποιείται κυρίως για την επιλογή της σειράς εκτέλεσης των νημάτων χρησιμοποιώντας την πολιτική πραγματικού χρόνου. Οι κανονικές τιμές εκτέλεσης πολιτικής προτεραιότητας_πίνακας είναι 0, ενώ τα νήματα σε πραγματικό χρόνο είναι συνήθως 1 έως 99. συστήματος. Η τιμή του Sched_priority μπορεί να οριστεί από τη συνάρτηση sched_setscheduler καθώς και από την πολιτική και μπορεί να ελεγχθεί από τη λειτουργία sched_getscheduler.

Εάν η τιμή Sched_priority αντιστοιχεί σε ροές πραγματικού χρόνου, το προκαθορισμένο νήμα για άλλα θέματα ονομάζεται καλή τιμή. Το αγαπημένο εύρος είναι -20 (υψηλή προτεραιότητα) έως +19 (χαμηλή προτεραιότητα). Η αξία ευχαρίστησης μπορεί να οριστεί μέσω μιας ωραίας λειτουργίας ή μιας συνάρτησης προκαθορισμού και να ελεγχθεί από τη λειτουργία getpriority.

Πώς εκτελεί το Linux τεμάχια σε πραγματικό χρόνο και σύμφωνα με τις αγαπημένες σας προτεραιότητες; Σε πραγματικό χρόνο, δεν υπάρχουν περιορισμοί στο χρόνο εκτέλεσης και το Linux ουσιαστικά εκτελεί ένα νήμα με την υψηλότερη προτεραιότητα σε πραγματικό χρόνο είτε πριν το νήμα ολοκληρώσει την αυτο-εκτέλεση είτε πριν χρησιμοποιήσει ένα νήμα υψηλότερης προτεραιότητας. Ωστόσο, αυτό συχνά προκαλεί προβλήματα, διότι εάν οι ανεπιθύμητες ροές πραγματικού χρόνου αρχίσουν να δουλεύουν και δεν τελειώνουν ποτέ, ο μόνος τρόπος να σταματήσουμε την ροή είναι να πάμε σε άλλες προτεραιότητες. Έτσι, από την έκδοση 2.6.25, υπάρχουν άλλα χαρακτηριστικά για να σταματήσετε την ανεπιθύμητη ροή σε πραγματικό χρόνο, όπως τον προ-περιορισμό του χρόνου αναπαραγωγής χρησιμοποιώντας το RLMIT_RTTIME. Ωστόσο, δεν συνιστάται η προσεκτική χρήση του σε πραγματικό χρόνο, επειδή το Linux διαθέτει ένα έξυπνο σύστημα προγραμματισμού που ονομάζεται "CFS (Full Fair Planner)" για απλές ροές που εισήχθησαν στην έκδοση 2.6.23 του πυρήνα του Linux. Το CFS καθορίζει ποιο νήμα πρέπει να εκτελέσει και πόσο καιρό.

Το CFS χρησιμοποιεί ένα σύστημα δεδομένων κόκκινου-μαύρου δέντρου, ένα από τα δυαδικά δέντρα, για δίκαιους σχεδιασμούς. Το CFS έχει ένα χρονοδιάγραμμα για κάθε εργασία και το CFS δημιουργεί ένα κόκκινο-μαύρο δέντρο των εργασιών κατά τη διάρκεια εκτέλεσης. Το δέντρο επιλέγεται για την εκτέλεση της εργασίας με τον ελάχιστο χρόνο εκτέλεσης. Μετά την εφαρμογή, το CFS προσθέτει το χρόνο εκτέλεσης στην εργασία και το επιστρέφει στο κόκκινο-μαύρο δέντρο σύμφωνα με το χρόνο εκτέλεσης. Αυτό σας επιτρέπει να εκτελέσετε μακρά καθήκοντα ύπνου μόλις τα χρειαστείτε. Κάθε φορά που το CFS ολοκληρώνει μια εργασία, πρέπει να επιστρέψει την εργασία στο δέντρο και να αναζητήσει την επόμενη εργασία με τον ελάχιστο χρόνο εκτέλεσης. Αυτό απαιτεί τη δημιουργία μακροχρόνιων δομών δεδομένων, ακόμη και στο χειρότερο σενάριο. Αυτός είναι ένας από τους λόγους για τους οποίους υιοθετείται ένα κόκκινο δέντρο. Στο κόκκινο μαύρο δέντρο, κάθε κόμβος είναι κόκκινο ή μαύρο και τα παιδιά του κόκκινου κόμβου είναι πάντα μαύρα. Το πιο σημαντικό, κάθε διαδρομή από τον δεδομένο κόμβο στην επόμενη γενιά περιέχει τον ίδιο αριθμό μαύρων κόμβων. Αυτό έχει ως αποτέλεσμα ένα κρίσιμο χαρακτηριστικό του κόκκινου-μαύρου δέντρου, όπου η διαδρομή από τη ρίζα στο μακρύτερο φύλλο είναι διπλάσια από τη διαδρομή από τη ρίζα στο πλησιέστερο φύλλο δεν είναι διπλάσια από την αναζήτηση, εγγυάται τη χειρότερη στιγμή για να μπείτε. , και O (log n) διαγράφονται και χρησιμοποιούνται για την ενημέρωση του σχεδίου τους για το CFS.

Τώρα που γνωρίζουμε πώς ο CFS ορίζει την εντολή εκτέλεσης, προχωράμε στον τρόπο με τον οποίο ο CFS ορίζει κάθε χρόνο εκτέλεσης. Κάθε χρόνος εκτέλεσης υπολογίζεται υπολογίζοντας το υπόλοιπο 4 παραγόντων: ο χρόνος αναμονής στόχου, η ελάχιστη κοκκινότητα, ο αναμενόμενος αριθμός εργασιών και οι ευχάριστες αξίες των εργασιών. Το χρονικό όριο στόχου είναι ο χρόνος κατά τον οποίο κάθε εργασία πρέπει να ολοκληρωθεί τουλάχιστον μία φορά. Το ελάχιστο βάθος είναι ο μικρότερος χρόνος εκτέλεσης, κάτω από το χρόνο εκτέλεσης, ο οποίος έχει ως αποτέλεσμα ένα υψηλό κόστος αλλαγής περιβάλλοντος. Βασικά, το χρονικό όριο στόχων υποδιαιρείται σε κάθε εργασία σύμφωνα με τις επιθυμητές τιμές, έτσι ώστε κάθε εργασία να είναι μικρότερη από το ελάχιστο. Η υψηλή λανθάνουσα στόχος έχει ως αποτέλεσμα μεγαλύτερους χρόνους εκτέλεσης, ειδικά για υψηλότερες προτεραιότητες, και η υψηλότερη κοκκοποίηση οδηγεί σε ίσο χρόνο εκτέλεσης ανεξάρτητα από τις ευνοϊκές τιμές.

Συνοπτικά, η διαφορά μεταξύ μιας ευχάριστης προτεραιότητας και μιας προτεραιότητας σε πραγματικό χρόνο έχει ως εξής. Πρώτον, καλή προτεραιότητα για κανονικές εργασίες, προτεραιότητα σε πραγματικό χρόνο είναι για εργασίες σε πραγματικό χρόνο σε μια καθαρή εικόνα. Δεύτερον, μια ευχάριστη προτεραιότητα είναι ο χρόνος που χρειάζεται για να εκτελεστεί και η σειρά εκτέλεσης που θα οριστεί από το CFS. Από την άλλη πλευρά, προτεραιότητα σε πραγματικό χρόνο είναι η αξία για τον καθορισμό της σειράς εκτέλεσης και ο χρόνος εκτέλεσης των εργασιών σε πραγματικό χρόνο δεν περιορίζεται μέχρι να επιτευχθεί με άλλα καθήκοντα που αποτελούν προτεραιότητα. Παρόλο που και οι δύο ονομάζονται προτεραιότητα, καλή προτεραιότητα είναι για το χρόνο και για την παραγγελία προτεραιότητας σε πραγματικό χρόνο.