1. Οντότητες προγραμματισμού:
* Διαδικασίες: Τη θεμελιώδη μονάδα προγραμματισμού. Κάθε διαδικασία παίρνει μια φέτα χρόνου CPU.
* Θέματα: Ελαφρύτερο βάρος από τις διαδικασίες, μοιράζοντας τον ίδιο χώρο μνήμης. Οι σύγχρονοι προγραμματιστές αντιμετωπίζουν τα νήματα παρόμοια με τις διαδικασίες, συχνά προγραμματίζουν ανεξάρτητα μέσα σε μια διαδικασία.
* Διαδικασίες σε πραγματικό χρόνο (προαιρετικά): Αυτές οι διαδικασίες έχουν αυστηρότερες απαιτήσεις χρονισμού και ενδέχεται να έχουν προτεραιότητα έναντι άλλων διαδικασιών. Διαχειρίζονται ένας ξεχωριστός μηχανισμός προγραμματισμού (π.χ. προγραμματισμός σε πραγματικό χρόνο).
2. Αλγόριθμοι προγραμματισμού (ιστορικά και επί του παρόντος):
Το Linux έχει εξελίξει τους αλγόριθμους προγραμματισμού με την πάροδο του χρόνου. Οι πρώτες εκδόσεις χρησιμοποίησαν απλούστερους αλγόριθμους, αλλά οι σύγχρονοι πυρήνες χρησιμοποιούν μια εξελιγμένη προσέγγιση:
* Πλήρως δίκαιος προγραμματιστής (CFS): Αυτός είναι ο προεπιλεγμένος προγραμματιστής στους σύγχρονους πυρήνες Linux (από το 2,6,23). Το CFS στοχεύει στην πλήρη δικαιοσύνη, δίνοντας σε κάθε διαδικασία ένα αναλογικό μερίδιο του χρόνου CPU με βάση το βάρος του *. Χρησιμοποιεί μια δομή δεδομένων κόκκινου μαύρου δέντρου για να διαχειριστεί αποτελεσματικά τις διαδικασίες που μπορούν να εκτελέσουν και να επιλέξουν το επόμενο για να εκτελεστεί. Η βασική ιδέα είναι να προσαρμόσετε δυναμικά το χρόνο εκτέλεσης των διαδικασιών για να εξασφαλίσετε τη δικαιοσύνη.
* Άλλοι αλγόριθμοι προγραμματισμού (ιστορικά ή εξειδικευμένα): Ενώ το CFS κυριαρχεί, υπάρχουν άλλοι αλγόριθμοι ή υπάρχουν για συγκεκριμένες ανάγκες (π.χ. παλαιότερα συστήματα που χρησιμοποιούνται προγραμματιστές O (N), λιγότερο αποτελεσματικοί από το CFS's O (log n)).
3. Βασικές έννοιες στο CFS:
* Εικονικός χρόνος εκτέλεσης (Vruntime): Το CFS παρακολουθεί τον εικονικό χρόνο εκτέλεσης κάθε διαδικασίας. Αυτό είναι ένα τεχνητό μέτρο για το πόσο χρόνο CPU έχει καταναλώσει μια διαδικασία. Χρησιμοποιείται για να καθορίσει ποια διαδικασία αξίζει περισσότερο την CPU στη συνέχεια. Μια διαδικασία με χαμηλότερη vruntime παίρνει προγραμματισμένη πρώτα.
* Βάρη: Οι διαδικασίες μπορούν να δοθούν βάρη για να επηρεάσουν το μερίδιό τους στο χρόνο CPU. Ένα υψηλότερο βάρος σημαίνει μεγαλύτερο μερίδιο. Αυτό επιτρέπει την ιεράρχηση συγκεκριμένων διαδικασιών.
* ωραίες τιμές: Ο χώρος χρήστη μπορεί να επηρεάσει τις προτεραιότητες προγραμματισμού των διαδικασιών μέσω * NICE * τιμές. Μια χαμηλότερη ωραία τιμή (π.χ. -20) δίνει μια διαδικασία υψηλότερη προτεραιότητα, ενώ μια υψηλότερη ωραία τιμή (π.χ. 19) δίνει χαμηλότερη προτεραιότητα. Αυτό επηρεάζει το βάρος που αντιστοιχεί στη διαδικασία.
* timeslices: Παρόλο που δεν καθορίζεται ρητά όπως σε μερικά παλαιότερα συστήματα, το CFS διαχειρίζεται σιωπηρά τις χρονικές περιόδους. Οι διαδικασίες εκτελούνται μέχρι να δείξουν ότι ο Vruntime τους υποδεικνύει ότι είχαν δίκαιη μετοχή. Επομένως, το μήκος ενός "χρονικού διαστήματος" είναι δυναμική.
* Runqueue: Κάθε πυρήνας της CPU διατηρεί το δικό του runqueue, μια δομή δεδομένων που κρατά τις διαδικασίες έτοιμες να τρέξουν σε αυτόν τον πυρήνα.
* Προτίμωση: Το CFS χρησιμοποιεί προληπτικό προγραμματισμό. Μια διαδικασία υψηλότερης προτεραιότητας μπορεί να διακόψει μια διαδικασία χαμηλότερης προτεραιότητας ανά πάσα στιγμή.
4. Αλληλεπιδράσεις με άλλα εξαρτήματα του πυρήνα:
Ο προγραμματιστής αλληλεπιδρά στενά με άλλα μέρη του πυρήνα, όπως:
* Χειρισμός διακοπής: Οι διακοπές μπορούν να προκαλέσουν διακόπτες περιβάλλοντος, ενδεχομένως να αλλάζουν τη τρέχουσα διαδικασία.
* Διαχείριση μνήμης: Ο προγραμματιστής πρέπει να γνωρίζει για την κατάσταση της μνήμης των διαδικασιών για να αποφευχθούν οι διαδικασίες προγραμματισμού που εμποδίζονται να περιμένουν τη μνήμη.
* υποσύστημα I/O: Όταν μια διαδικασία εκτελεί λειτουργίες I/O (π.χ. ανάγνωση από δίσκο), ο προγραμματιστής θα μεταβεί σε άλλη διαδικασία. Ο προγραμματιστής αλληλεπιδρά επίσης με τον προγραμματιστή I/O για τη διαχείριση της απόδοσης I/O δίσκου.
5. Προγραμματισμός σε πραγματικό χρόνο:
Για εφαρμογές που απαιτούν εγγυημένους χρόνους απόκρισης (π.χ. συστήματα βιομηχανικού ελέγχου), το Linux παρέχει επιλογές προγραμματισμού σε πραγματικό χρόνο. Αυτά συνήθως χρησιμοποιούν διαφορετικούς αλγόριθμους (π.χ. προγραμματισμό προθεσμίας) που δίνουν προτεραιότητα στις διαδικασίες σε πραγματικό χρόνο και εγγυώνται την έγκαιρη εκτέλεση τους.
Συνοπτικά, ο προγραμματισμός της διαδικασίας κοινής χρήσης του Linux είναι ένα εξελιγμένο σύστημα που εξισορροπεί δυναμικά τη δικαιοσύνη, την αποτελεσματικότητα και την ανταπόκριση. Ο αλγόριθμος CFS, μαζί με τις υποστηρικτικές δομές και τις αλληλεπιδράσεις του με άλλα συστατικά του πυρήνα, παρέχει μια ισχυρή και προσαρμοστική προσέγγιση για τη διαχείριση πολλαπλών διαδικασιών ταυτόχρονα. Η κατανόηση των αποχρώσεων του CFS και άλλων πολιτικών προγραμματισμού είναι ζωτικής σημασίας για τη βελτιστοποίηση της απόδοσης και της χρήσης των πόρων στα συστήματα Linux.
Πνευματικά δικαιώματα © Γνώση Υπολογιστών Όλα τα δικαιώματα κατοχυρωμένα