Διαφορά μεταξύ Προληπτικού και Μη Προληπτικού Προγραμματισμού σε Λειτουργικά Συστήματα Η διαφορά μεταξύ
Προγραμματισμός επεξεργαστών (ή Προγραμματισμός CPU ) καθορίζει ποιες διεργασίες αντιστοιχίζονται και αφαιρούνται από τη CPU, βάσει μοντέλων προγραμματισμού όπως Preemptive και Non
Τα παλαιότερα συστήματα θα μπορούσαν να λειτουργούν σε απλές αυτόνομες λειτουργίες, αλλά με την αυξανόμενη η ανάγκη για ευαίσθητα, ευέλικτα συστήματα, καθώς και η εικονικοποίηση, η αποτελεσματική διαχείριση της πολλαπλής επεξεργασίας παρέχει ταχεία ανταπόκριση σε όλα τα αιτήματα επεξεργασίας εργασιών.
Οι μονάδες προγραμματισμού αναφέρονται συχνά ως εργασία και είναι η δουλειά του Scheduler για να τρέχει και να διαχειρίζεται αυτές τις εργασίες όποτε απαιτείται, ο Χρονοδιάγραμμα επιλέγει την εργασία που πρέπει να αφαιρεθεί και να εκχωρηθεί στην CPU για επεξεργασία, συμφωνία με το μοντέλο προγραμματισμού που χρησιμοποιήθηκε.
Πώς γνωρίζει το Scheduler ποιες εργασίες έχουν προτεραιότητα;
Ο προγραμματιστής πρέπει να διεξάγει μια δίκαιη και αποτελεσματική διαδικασία επιλογής, λαμβάνοντας υπόψη τις μεταβλητές, δυναμικές αιτήσεις επεξεργασίας και αξιοποιώντας στο μέγιστο τους κύκλους της CPU.
Οι εργασίες μπορούν να είναι σε δύο καταστάσεις κατά την επεξεργασία:
- Σε CPU Burst όπου η CPU εκτελεί υπολογισμούς για την επεξεργασία της εργασίας (η περίοδος για CPU Burst ποικίλλει από task to task) πρόγραμμα στο πρόγραμμα).
- Σε Έκρηξη εισόδου / εξόδου (I / O) αναμονή για λήψη ή αποστολή δεδομένων από το σύστημα.
Όταν η CPU είναι αδρανής, το Scheduler διαβάζει την ουρά Ready και επιλέγει την επόμενη εργασία που θα εκτελεστεί. Έπειτα, είναι ο Dispatcher που δίνει τον επιλεγμένο έλεγχο εργασιών της CPU, οπότε πρέπει να είναι γρήγορος! Οποιαδήποτε στιγμή που αναλαμβάνει ο Dispatcher είναι γνωστή ως Latency Dispatch .
Υπάρχουν διαφορετικές δομές και προσαρμοσμένες παράμετροι για τον ορισμό της σειράς Ready, καθώς και αρκετές μέθοδοι που μπορούν να χρησιμοποιηθούν για τη διαχείριση της πολυπλοκότητας της διαδικασίας προγραμματισμού.
Γενικά, η βελτιστοποίηση και η μεγιστοποίηση της αξιοποίησης της CPU, της απόδοσης κ.λπ.
Ο προγραμματιστής πρέπει να αποφασίσει κατά τη διάρκεια ενός από τα ακόλουθα στάδια:
- Όταν η εργασία αλλάζει από Running σε κατάσταση αναμονής (για παράδειγμα, αναμονή κατά τη διάρκεια ενός αιτήματος εισόδου / εξόδου).
- Όταν η εργασία αλλάζει από Εκτέλεση σε Έτοιμη (για παράδειγμα, η απάντηση σε διακοπή).
- Όταν η εργασία αλλάζει από Αναμονή σε Έτοιμο (για παράδειγμα, ολοκληρώθηκε μια αίτηση εισόδου / εξόδου).
- Όταν η ενέργεια Task
πρέπει να επιλεγεί μια νέα εργασία, εάν το στάδιο 1 ή 4 συμβεί να διασφαλιστεί η πλήρης αξιοποίηση της CPU και στις δύο φάσεις 2 και 3, η εργασία μπορεί να συνεχίσει να λειτουργεί ή νέα επιλεγμένο.
Αφού κατανοήσουμε πώς επεξεργάζεται μια εργασία, ας δούμε δύο μοντέλα προγραμματισμού που ασχολούνται με τις διακοπές της CPU.
Και οι δύο έχουν παρόμοια χαρακτηριστικά με τις εργασίες, τις καταστάσεις εργασιών, τις ουρές και τις προτεραιότητες (στατική ή δυναμική):
- Ο μη προληπτικός προγραμματισμός είναι όταν μια εργασία εκτελείται μέχρι να σταματήσει (εθελοντικά) ή να τελειώσει. Τα Windows® είχαν Μη Προληπτικό Προγραμματισμό μέχρι τα Windows 3. x, μετά τα οποία άλλαξε σε Preemptive από τα Windows 95.
- Ο Προληπτικός Προγραμματισμός είναι όπου μια εργασία μπορεί να ανασταλεί με βία από διακοπή της CPU, αντίθετα με την Non-Preemptive όπου η η εργασία εκτελείται μέχρι να απελευθερωθεί ο έλεγχος της CPU.
Μη Προληπτικός Προγραμματισμός
Οι εργασίες σε ένα μη προληπτικό σύστημα θα διαρκέσουν μέχρι να ολοκληρωθούν.
Στη συνέχεια, ο Χρονοπρογραμματιστής ελέγχει τις καταστάσεις όλων των εργασιών και προγραμματίζει την επόμενη εργασία υψηλότερης προτεραιότητας με κατάσταση Έτοιμη.
Με τον μη προληπτικό προγραμματισμό, όταν μια εργασία έχει ανατεθεί στην CPU, δεν μπορεί να αφαιρεθεί, ακόμα και αν οι σύντομες εργασίες πρέπει να περιμένουν να ολοκληρωθούν περισσότερες εργασίες.
Η διαχείριση του προγραμματισμού σε όλες τις εργασίες είναι "δίκαιη" και οι χρόνοι απόκρισης είναι προβλέψιμοι, καθώς οι εργασίες υψηλής προτεραιότητας δεν μπορούν να χτυπήσουν τις εργασίες αναμονής πιο κάτω στην ουρά.
Ο Χρονοδιακόπτης διασφαλίζει ότι κάθε εργασία παίρνει το μερίδιο της CPU, αποφεύγοντας τυχόν καθυστέρηση σε οποιαδήποτε εργασία. Το «χρονικό διάστημα» που διατίθεται στην CPU μπορεί να μην είναι απαραιτήτως ίσο, καθώς εξαρτάται από το πόσο χρόνο χρειάζεται η εργασία για να ολοκληρωθεί.
Προληπτικός προγραμματισμός
Αυτό το μοντέλο προγραμματισμού επιτρέπει την διακοπή εργασιών - σε αντίθεση με τον μη προληπτικό προγραμματισμό που έχει μια προσέγγιση "run-to-completion".
Οι διακοπές, οι οποίες θα μπορούσαν να ξεκινήσουν από εξωτερικές κλήσεις, καλούν το Scheduler να διακόψει μια εργασία που εκτελείται για να διαχειριστεί μια άλλη εργασία υψηλότερης προτεραιότητας - έτσι ώστε να μπορεί να προληφθεί ο έλεγχος της CPU.
Η εργασία με την υψηλότερη προτεραιότητα σε μια κατάσταση Ready εκτελείται, επιτρέποντας την ταχεία απόκριση σε συμβάντα σε πραγματικό χρόνο.
Ορισμένα από τα μειονεκτήματα με Preemptive Scheduling συνεπάγονται την αύξηση των γενικών εξόδων για τους πόρους κατά τη χρήση διακοπών και μπορεί να προκύψουν προβλήματα με δύο εργασίες που μοιράζονται δεδομένα, καθώς μπορεί να διακοπεί κατά την ενημέρωση των δομών δεδομένων και να επηρεάσει αρνητικά την ακεραιότητα των δεδομένων.
Από την άλλη πλευρά, είναι πρακτικό να μπορείτε να διακόψετε μια εργασία για να διαχειριστείτε ένα άλλο που θα μπορούσε να είναι κρίσιμο.
Στην Περίληψη
Μπορούν να οριστούν πολλές διαφορές και εξαρτήσεις σε διαφορετικές πολιτικές, όπως η χρήση "Στρογγυλής Ρομπίν Πολιτικής [i]" όπου κάθε εργασία (με την ίδια προτεραιότητα) που βρίσκεται στο τέλος της ουράς, για τον επόμενο κύκλο.
Άλλες πολιτικές περιλαμβάνουν First-In-First-Out , Πιο σύντομη εργασία-πρώτη, κλπ. Η ανάλυση των ιστορικών δεδομένων μπορεί να παρέχει πληροφορίες σχετικά με τις πτυχές, όπως ο ρυθμός με τον οποίο φθάνουν τα νέα καθήκοντα, οι CPU και I / O Bursts κλπ. Έτσι οι κατανομές πιθανοτήτων μπορούν να υπολογίζουν τα χαρακτηριστικά των χρόνων αναμονής των εργασιών, διαχειριστές με σχετικά δεδομένα για τον ορισμό μοντέλων προγραμματισμού.