Λειτουργικά Συστήματα: Three Easy Pieces. Μέρος 2: Αφαίρεση: Διαδικασία (μετάφραση)

Εισαγωγή στα Λειτουργικά Συστήματα

Γεια σου Χαμπρ! Θα ήθελα να επιστήσω την προσοχή σας μια σειρά άρθρων-μεταφράσεων μιας ενδιαφέρουσας κατά τη γνώμη μου λογοτεχνίας - της ΟΣΤΕΠ. Αυτό το υλικό εξετάζει αρκετά βαθιά τη δουλειά λειτουργικών συστημάτων που μοιάζουν με unix, δηλαδή την εργασία με διεργασίες, διάφορους χρονοπρογραμματιστές, μνήμη και άλλα παρόμοια στοιχεία που συνθέτουν ένα σύγχρονο λειτουργικό σύστημα. Μπορείτε να δείτε το πρωτότυπο όλων των υλικών εδώ εδώ. Σημειώστε ότι η μετάφραση έγινε αντιεπαγγελματικά (αρκετά ελεύθερα), αλλά ελπίζω να διατήρησα το γενικό νόημα.

Εργαστήριο για αυτό το θέμα μπορείτε να βρείτε εδώ:

Άλλα μέρη:

Μπορείτε επίσης να δείτε το κανάλι μου στο τηλεγράφημα =)

Ας δούμε την πιο θεμελιώδη αφαίρεση που παρέχει το λειτουργικό σύστημα στους χρήστες: τη διαδικασία. Ο ορισμός της διαδικασίας είναι αρκετά απλός - είναι τρέχον πρόγραμμα. Το ίδιο το πρόγραμμα είναι ένα άψυχο πράγμα που βρίσκεται στο δίσκο - είναι ένα σύνολο οδηγιών και πιθανώς κάποια στατικά δεδομένα που περιμένουν να εκκινηθούν. Είναι το λειτουργικό σύστημα που παίρνει αυτά τα byte και τα εκτελεί, μετατρέποντας το πρόγραμμα σε κάτι χρήσιμο.
Τις περισσότερες φορές, οι χρήστες θέλουν να εκτελούν περισσότερα από ένα προγράμματα ταυτόχρονα, για παράδειγμα, μπορείτε να εκτελέσετε ένα πρόγραμμα περιήγησης, ένα παιχνίδι, ένα πρόγραμμα αναπαραγωγής πολυμέσων, ένα πρόγραμμα επεξεργασίας κειμένου και παρόμοια στον φορητό υπολογιστή σας. Στην πραγματικότητα, ένα τυπικό σύστημα μπορεί να εκτελέσει δεκάδες ή εκατοντάδες διεργασίες ταυτόχρονα. Αυτό το γεγονός κάνει το σύστημα πιο εύκολο στη χρήση, δεν χρειάζεται ποτέ να ανησυχείτε για το αν η CPU είναι δωρεάν, απλά εκτελείτε προγράμματα.

Αυτό εγείρει το πρόβλημα: πώς να παρέχουμε την ψευδαίσθηση πολλών CPU; Πώς μπορεί το λειτουργικό σύστημα να δημιουργήσει την ψευδαίσθηση ενός σχεδόν άπειρου αριθμού CPU, ακόμα κι αν έχετε μόνο μία φυσική CPU;

Το λειτουργικό σύστημα δημιουργεί αυτή την ψευδαίσθηση μέσω της εικονικοποίησης της CPU. Ξεκινώντας μια διαδικασία, στη συνέχεια σταματώντας την, ξεκινώντας μια άλλη διαδικασία και ούτω καθεξής, το λειτουργικό σύστημα μπορεί να διατηρήσει την ψευδαίσθηση ότι υπάρχουν πολλές εικονικές CPU, ενώ στην πραγματικότητα θα υπάρχουν ένας ή περισσότεροι φυσικοί επεξεργαστές. Αυτή η τεχνική ονομάζεται διαίρεση των πόρων της CPU κατά χρόνο. Αυτή η τεχνική επιτρέπει στους χρήστες να εκτελούν όσες ταυτόχρονες διεργασίες θέλουν. Το κόστος αυτής της λύσης είναι η απόδοση - αφού εάν η CPU μοιράζεται από πολλές διεργασίες, κάθε διεργασία θα υποβάλλεται σε επεξεργασία πιο αργά.
Για να υλοποιηθεί η εικονικοποίηση της CPU, και ειδικά για να γίνει καλά, το λειτουργικό σύστημα χρειάζεται υποστήριξη χαμηλού και υψηλού επιπέδου. Ονομάζεται υποστήριξη χαμηλού επιπέδου μηχανισμών είναι μέθοδοι ή πρωτόκολλα χαμηλού επιπέδου που υλοποιούν το απαιτούμενο μέρος της λειτουργικότητας. Ένα παράδειγμα τέτοιας λειτουργικότητας είναι η εναλλαγή περιβάλλοντος, η οποία δίνει στο λειτουργικό σύστημα τη δυνατότητα να σταματήσει ένα πρόγραμμα και να εκτελέσει ένα άλλο πρόγραμμα στον επεξεργαστή. Αυτή η χρονική διαίρεση εφαρμόζεται σε όλα τα σύγχρονα λειτουργικά συστήματα.
Πάνω από αυτούς τους μηχανισμούς υπάρχει κάποια λογική ενσωματωμένη στο λειτουργικό σύστημα, με τη μορφή «πολιτικών». Πολιτική είναι ένας συγκεκριμένος αλγόριθμος λήψης αποφάσεων για το λειτουργικό σύστημα. Τέτοιες πολιτικές, για παράδειγμα, αποφασίζουν ποιο πρόγραμμα πρέπει να ξεκινήσει πρώτα (από μια λίστα εντολών). Έτσι, για παράδειγμα, αυτό το πρόβλημα θα λυθεί με μια πολιτική που ονομάζεται χρονοπρογραμματιστής (πολιτική προγραμματισμού) και κατά την επιλογή μιας λύσης, θα καθοδηγείται από δεδομένα όπως: ιστορικό εκκίνησης (ποιο πρόγραμμα ξεκίνησε τη μεγαλύτερη διάρκεια τα τελευταία λεπτά), τι φορτίο φέρει αυτή η διαδικασία (ποιοι τύποι προγραμμάτων κυκλοφόρησαν), μετρήσεις απόδοσης (αν το σύστημα είναι βελτιστοποιημένη για διαδραστική αλληλεπίδραση ή για απόδοση ) και ούτω καθεξής.

Αφαίρεση: διαδικασία

Η αφαίρεση ενός τρέχοντος προγράμματος που εκτελείται από το λειτουργικό σύστημα είναι αυτό που λέμε διαδικασία. Όπως αναφέρθηκε προηγουμένως, μια διαδικασία είναι απλώς ένα πρόγραμμα που εκτελείται, σε οποιαδήποτε στιγμιαία χρονική περίοδο. Ένα πρόγραμμα με το οποίο μπορούμε να λάβουμε συνοπτικές πληροφορίες από διάφορους πόρους συστήματος που έχει πρόσβαση ή επηρεάζει αυτό το πρόγραμμα κατά την εκτέλεσή του.
Για να κατανοήσετε τα στοιχεία της διαδικασίας, πρέπει να κατανοήσετε τις καταστάσεις του συστήματος: τι μπορεί να διαβάσει ή να αλλάξει το πρόγραμμα κατά τη λειτουργία του. Σε κάθε δεδομένη στιγμή, πρέπει να κατανοήσετε ποια στοιχεία του συστήματος είναι σημαντικά για την εκτέλεση του προγράμματος.
Ένα από τα προφανή στοιχεία του συστήματος δηλώνει ότι η διαδικασία περιλαμβάνει είναι память. Οι οδηγίες βρίσκονται στη μνήμη. Τα δεδομένα που διαβάζει ή γράφει το πρόγραμμα βρίσκονται επίσης στη μνήμη. Έτσι, η μνήμη που μπορεί να απευθύνει μια διεργασία (που ονομάζεται χώρος διευθύνσεων) είναι μέρος της διαδικασίας.
Επίσης μέρος της κατάστασης του συστήματος είναι τα μητρώα. Πολλές οδηγίες στοχεύουν στην αλλαγή της τιμής των καταχωρητών ή στην ανάγνωση της τιμής τους, και έτσι οι καταχωρητές γίνονται επίσης σημαντικό μέρος της λειτουργίας της διαδικασίας.
Πρέπει να σημειωθεί ότι η κατάσταση μηχανής σχηματίζεται επίσης από κάποιους ειδικούς καταχωρητές. Για παράδειγμα, IP - δείκτης εντολών — ένας δείκτης στην εντολή που εκτελεί το πρόγραμμα αυτήν τη στιγμή. Υπάρχει επίσης δείκτης στοίβας και σχετίζονται με αυτό δείκτη πλαισίου, τα οποία χρησιμοποιούνται για τη διαχείριση: παραμέτρων συνάρτησης, τοπικές μεταβλητές και διευθύνσεις επιστροφής.
Τέλος, τα προγράμματα έχουν συχνά πρόσβαση στη ROM (μνήμη μόνο για ανάγνωση). Αυτές οι πληροφορίες "I/O" (εισόδου/εξόδου) θα πρέπει να περιλαμβάνουν μια λίστα αρχείων που είναι ανοιχτά αυτήν τη στιγμή από τη διαδικασία.

API διαδικασίας

Προκειμένου να βελτιώσουμε την κατανόησή μας για το πώς λειτουργεί η διαδικασία, ας μελετήσουμε παραδείγματα κλήσεων συστήματος που πρέπει να περιλαμβάνονται σε οποιαδήποτε διεπαφή λειτουργικού συστήματος. Αυτά τα API είναι διαθέσιμα με τη μία ή την άλλη μορφή σε οποιοδήποτε λειτουργικό σύστημα.

Δημιουργία (δημιουργία): Το ΛΣ πρέπει να περιλαμβάνει κάποια μέθοδο που σας επιτρέπει να δημιουργείτε νέες διεργασίες. Όταν εισάγετε μια εντολή στο τερματικό ή εκκινείτε μια εφαρμογή κάνοντας διπλό κλικ σε ένα εικονίδιο, αποστέλλεται μια κλήση στο λειτουργικό σύστημα για τη δημιουργία μιας νέας διαδικασίας και στη συνέχεια εκκίνηση του καθορισμένου προγράμματος.
Μετακίνηση: Εφόσον υπάρχει μια διεπαφή για τη δημιουργία μιας διεργασίας, το λειτουργικό σύστημα θα πρέπει επίσης να παρέχει τη δυνατότητα επιβολής της κατάργησης μιας διεργασίας. Τα περισσότερα προγράμματα θα ξεκινήσουν και θα τερματιστούν φυσικά από μόνα τους καθώς εκτελούνται. Διαφορετικά, ο χρήστης θα ήθελε να είναι σε θέση να τους σκοτώσει και έτσι μια διεπαφή για να σταματήσει τη διαδικασία θα ήταν χρήσιμη.
Περιμένετε (αναμονή): Μερικές φορές είναι χρήσιμο να περιμένετε να ολοκληρωθεί μια διαδικασία, επομένως παρέχονται ορισμένες διεπαφές που παρέχουν τη δυνατότητα αναμονής.
Διάφορος έλεγχος (διάφορος έλεγχος): Εκτός από τη θανάτωση και την αναμονή της διαδικασίας, υπάρχουν και άλλες διάφορες μέθοδοι ελέγχου. Για παράδειγμα, τα περισσότερα λειτουργικά συστήματα παρέχουν τη δυνατότητα παγώματος μιας διεργασίας (διακοπή της εκτέλεσής της για ορισμένο χρονικό διάστημα) και στη συνέχεια συνέχισής της (συνέχιση της εκτέλεσης)
Κατάσταση (κατάσταση): Υπάρχουν διάφορες διεπαφές για τη λήψη ορισμένων πληροφοριών σχετικά με την κατάσταση μιας διεργασίας, όπως πόσο καιρό εκτελείται ή σε ποια κατάσταση βρίσκεται αυτήν τη στιγμή.

Λειτουργικά Συστήματα: Three Easy Pieces. Μέρος 2: Αφαίρεση: Διαδικασία (μετάφραση)

Δημιουργία Διαδικασίας: Λεπτομέρειες

Ένα από τα ενδιαφέροντα πράγματα είναι πώς ακριβώς τα προγράμματα μετατρέπονται σε διαδικασίες. Ειδικά πώς το λειτουργικό σύστημα παραλαμβάνει και εκτελεί το πρόγραμμα. Πώς ακριβώς δημιουργείται η διαδικασία.
Πρώτα απ 'όλα, το λειτουργικό σύστημα πρέπει να φορτώσει τον κώδικα προγράμματος και τα στατικά δεδομένα στη μνήμη (στο χώρο διευθύνσεων διεργασίας). Τα προγράμματα βρίσκονται συνήθως σε δίσκο ή μονάδα στερεάς κατάστασης σε κάποια εκτελέσιμη μορφή. Έτσι, η διαδικασία φόρτωσης προγράμματος και στατικών δεδομένων στη μνήμη απαιτεί από το λειτουργικό σύστημα να μπορεί να διαβάσει αυτά τα byte από το δίσκο και να τα τοποθετήσει κάπου στη μνήμη.

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

Μόλις ο κώδικας και τα στατικά δεδομένα φορτωθούν στη μνήμη του λειτουργικού συστήματος, υπάρχουν μερικά ακόμη πράγματα που πρέπει να γίνουν για να εκτελεστεί η διαδικασία. Πρέπει να εκχωρηθεί κάποια ποσότητα μνήμης για τη στοίβα. Τα προγράμματα χρησιμοποιούν τη στοίβα για τοπικές μεταβλητές, παραμέτρους συναρτήσεων και διευθύνσεις επιστροφής. Το λειτουργικό σύστημα εκχωρεί αυτή τη μνήμη και τη δίνει στη διεργασία. Η στοίβα μπορεί επίσης να εκχωρηθεί με ορισμένα ορίσματα, συγκεκριμένα γεμίζει τις παραμέτρους της συνάρτησης main(), για παράδειγμα με έναν πίνακα argc και argv.

Το λειτουργικό σύστημα μπορεί επίσης να εκχωρήσει κάποια μνήμη στο σωρό του προγράμματος. Ο σωρός χρησιμοποιείται από προγράμματα για να ζητήσει ρητά δυναμικά εκχωρημένα δεδομένα. Τα προγράμματα ζητούν αυτόν τον χώρο καλώντας τη συνάρτηση malloc () και το διαγράφει ρητά καλώντας τη συνάρτηση Ελεύθερος(). Ο σωρός χρειάζεται για δομές δεδομένων όπως συνδεδεμένα φύλλα, πίνακες κατακερματισμού, δέντρα και άλλα. Αρχικά, μια μικρή ποσότητα μνήμης εκχωρείται στο σωρό, αλλά με την πάροδο του χρόνου, καθώς εκτελείται το πρόγραμμα, ο σωρός μπορεί να ζητήσει περισσότερη μνήμη μέσω της κλήσης malloc() του API της βιβλιοθήκης. Το λειτουργικό σύστημα εμπλέκεται στη διαδικασία εκχώρησης περισσότερης μνήμης για την ικανοποίηση αυτών των κλήσεων.

Το λειτουργικό σύστημα θα εκτελεί επίσης εργασίες αρχικοποίησης, ιδιαίτερα αυτές που σχετίζονται με I/O. Για παράδειγμα, σε συστήματα UNIX, κάθε διεργασία έχει από προεπιλογή 3 ανοιχτούς περιγραφείς αρχείων, για τυπική είσοδο, έξοδο και σφάλμα. Αυτές οι λαβές επιτρέπουν στα προγράμματα να διαβάζουν την είσοδο από το τερματικό καθώς και να εμφανίζουν πληροφορίες στην οθόνη.

Έτσι, φορτώνοντας κώδικα και στατικά δεδομένα στη μνήμη, δημιουργώντας και αρχικοποιώντας τη στοίβα και κάνοντας άλλες εργασίες που σχετίζονται με την εκτέλεση εργασιών I/O, το ΛΣ προετοιμάζει το στάδιο για την εκτέλεση της διαδικασίας. Τέλος, απομένει μια τελευταία εργασία: η εκτέλεση του προγράμματος μέσω του σημείου εισόδου του, που ονομάζεται συνάρτηση main(). Εκτελώντας τη συνάρτηση main(), το λειτουργικό σύστημα μεταφέρει τον έλεγχο της CPU στη διαδικασία που δημιουργήθηκε πρόσφατα, και έτσι το πρόγραμμα αρχίζει να εκτελείται.

Κατάσταση διαδικασίας

Τώρα που έχουμε κατανοήσει λίγο τι είναι μια διαδικασία και πώς δημιουργείται, ας παραθέσουμε τις καταστάσεις της διαδικασίας στις οποίες μπορεί να βρίσκεται. Στην απλούστερη μορφή της, μια διαδικασία μπορεί να βρίσκεται σε μία από αυτές τις καταστάσεις:
Τρέξιμο. Κατά την εκτέλεση, η διαδικασία εκτελείται στον επεξεργαστή. Αυτό σημαίνει ότι οι οδηγίες εκτελούνται.
Έτοιμος. Σε κατάσταση ετοιμότητας, η διαδικασία είναι έτοιμη να εκτελεστεί, αλλά για κάποιο λόγο το λειτουργικό σύστημα δεν την εκτελεί την καθορισμένη ώρα.
Αποκλεισμένοι. Στην κατάσταση αποκλεισμού, μια διεργασία εκτελεί ορισμένες λειτουργίες που την εμποδίζουν να είναι έτοιμη για εκτέλεση μέχρι να συμβεί κάποιο συμβάν. Ένα συνηθισμένο παράδειγμα είναι όταν μια διεργασία εκκινεί μια λειτουργία IO, μπλοκάρεται έτσι ώστε κάποια άλλη διεργασία να μπορεί να χρησιμοποιήσει τον επεξεργαστή.

Λειτουργικά Συστήματα: Three Easy Pieces. Μέρος 2: Αφαίρεση: Διαδικασία (μετάφραση)

Μπορείτε να φανταστείτε αυτές τις καταστάσεις με τη μορφή γραφήματος. Όπως βλέπουμε στην εικόνα, η κατάσταση της διαδικασίας μπορεί να αλλάξει μεταξύ RUNNING και READY κατά την κρίση του λειτουργικού συστήματος. Όταν η κατάσταση μιας διαδικασίας αλλάζει από ΕΤΟΙΜΗ σε ΕΚΤΕΛΕΣΗ, σημαίνει ότι η διαδικασία έχει προγραμματιστεί. Στην αντίθετη κατεύθυνση - αφαιρέθηκε από τη διάταξη. Τη στιγμή που μια διεργασία γίνεται ΜΠΛΟΚ, για παράδειγμα, εκκινώ μια λειτουργία IO, το λειτουργικό σύστημα θα τη διατηρήσει σε αυτήν την κατάσταση μέχρι να συμβεί κάποιο συμβάν, για παράδειγμα η ολοκλήρωση της IO. αυτή τη στιγμή η μετάβαση στην κατάσταση ΕΤΟΙΜΟ και πιθανώς αμέσως στην κατάσταση ΛΕΙΤΟΥΡΓΙΑΣ εάν το αποφασίσει το ΛΣ.
Ας δούμε ένα παράδειγμα για το πώς κινούνται δύο διεργασίες μέσα από αυτές τις καταστάσεις. Αρχικά, ας φανταστούμε ότι εκτελούνται και οι δύο διεργασίες και η καθεμία χρησιμοποιεί μόνο την CPU. Σε αυτή την περίπτωση, οι πολιτείες τους θα μοιάζουν με αυτό.

Λειτουργικά Συστήματα: Three Easy Pieces. Μέρος 2: Αφαίρεση: Διαδικασία (μετάφραση)

Στο παρακάτω παράδειγμα, η πρώτη διεργασία, μετά από κάποιο χρονικό διάστημα που εκτελείται, ζητά IO και εισέρχεται στην κατάσταση BLOCKED, επιτρέποντας την εκτέλεση μιας άλλης διεργασίας (ΣΧΗΜΑ 1.4). Το λειτουργικό σύστημα βλέπει ότι η διεργασία 0 δεν χρησιμοποιεί την CPU και ξεκινά τη διαδικασία 1. Ενώ εκτελείται η διαδικασία 1, το IO ολοκληρώνεται και η κατάσταση της διαδικασίας 0 αλλάζει σε ΕΤΟΙΜΟ. Τέλος, η διεργασία 1 έχει ολοκληρωθεί και μετά την ολοκλήρωση, η διεργασία 0 ξεκινά, εκτελεί και τελειώνει την εργασία της.

Λειτουργικά Συστήματα: Three Easy Pieces. Μέρος 2: Αφαίρεση: Διαδικασία (μετάφραση)

Δομή δεδομένων

Το ίδιο το λειτουργικό σύστημα είναι ένα πρόγραμμα και όπως κάθε άλλο πρόγραμμα, έχει κάποιες βασικές δομές δεδομένων που παρακολουθούν διάφορες σχετικές πληροφορίες. Για να παρακολουθείτε την κατάσταση κάθε διεργασίας, το λειτουργικό σύστημα θα υποστηρίζει ορισμένες λίστα διαδικασιών για όλες τις διεργασίες στην κατάσταση ΕΤΟΙΜΟ και ορισμένες πρόσθετες πληροφορίες για την παρακολούθηση διεργασιών που εκτελούνται αυτήν τη στιγμή. Επίσης, το λειτουργικό σύστημα θα πρέπει να παρακολουθεί τις μπλοκαρισμένες διαδικασίες. Μετά την ολοκλήρωση της IO, το λειτουργικό σύστημα πρέπει να ενεργοποιήσει την απαιτούμενη διαδικασία και να τη βάλει σε κατάσταση έτοιμη για εκτέλεση.

Για παράδειγμα, το λειτουργικό σύστημα πρέπει να διατηρήσει την κατάσταση των καταχωρητών επεξεργαστή. Τη στιγμή που σταματά η διαδικασία, η κατάσταση των καταχωρητών αποθηκεύεται στο χώρο διευθύνσεων της διαδικασίας και τη στιγμή που συνεχίζεται η λειτουργία της, οι τιμές των καταχωρητών αποκαθίστανται και έτσι συνεχίζεται η εκτέλεση αυτής της διαδικασίας.

Εκτός από τις έτοιμες, μπλοκαρισμένες, καταστάσεις λειτουργίας, υπάρχουν και κάποιες άλλες καταστάσεις. Μερικές φορές, τη στιγμή της δημιουργίας, μια διεργασία μπορεί να βρίσκεται σε κατάσταση INIT. Τέλος, μια διαδικασία μπορεί να τοποθετηθεί στην ΤΕΛΙΚΗ κατάσταση όταν έχει ήδη ολοκληρωθεί, αλλά οι πληροφορίες της δεν έχουν ακόμη διαγραφεί. Στα συστήματα UNIX αυτή η κατάσταση ονομάζεται διαδικασία ζόμπι. Αυτή η κατάσταση είναι χρήσιμη για περιπτώσεις όπου μια γονική διαδικασία θέλει να μάθει τον κωδικό επιστροφής ενός παιδιού, για παράδειγμα, συνήθως το 0 σηματοδοτεί μια επιτυχία και το 1 ένα σφάλμα, αλλά οι προγραμματιστές μπορούν να εκδώσουν πρόσθετους κωδικούς εξόδου για να σηματοδοτήσουν διαφορετικά προβλήματα. Όταν η γονική διαδικασία τερματίζεται, πραγματοποιεί μια τελική κλήση συστήματος, όπως wait(), για να περιμένει να τερματιστεί η θυγατρική διεργασία και σηματοδοτεί στο λειτουργικό σύστημα ότι μπορεί να διαγράψει τυχόν δεδομένα που σχετίζονται με την τερματισμένη διαδικασία.

Λειτουργικά Συστήματα: Three Easy Pieces. Μέρος 2: Αφαίρεση: Διαδικασία (μετάφραση)

Βασικά σημεία της διάλεξης:

διαδικασία — η κύρια αφαίρεση ενός προγράμματος που εκτελείται στο λειτουργικό σύστημα. Ανά πάσα στιγμή, μια διεργασία μπορεί να περιγραφεί από την κατάστασή της: τα περιεχόμενα της μνήμης στο χώρο διευθύνσεών της, τα περιεχόμενα των καταχωρητών του επεξεργαστή, συμπεριλαμβανομένου του δείκτη εντολών και του δείκτη στοίβας, και πληροφορίες IO, όπως τα ανοιχτά αρχεία που διαβάζονται ή γράφονται.
API διαδικασίας αποτελείται από κλήσεις που μπορούν να κάνουν τα προγράμματα σε διεργασίες. Συνήθως πρόκειται για δημιουργία, διαγραφή ή άλλες κλήσεις.
● Η διαδικασία βρίσκεται σε μία από τις πολλές καταστάσεις, συμπεριλαμβανομένης της εκτέλεσης, της ετοιμότητας, της αποκλεισμένης. Διάφορα συμβάντα όπως ο προγραμματισμός, οι εξαιρέσεις από τον προγραμματισμό ή οι αναμονές μπορούν να αλλάξουν την κατάσταση μιας διαδικασίας από το ένα στο άλλο.
Λίστα διαδικασιών περιέχει πληροφορίες για όλες τις διαδικασίες στο σύστημα. Κάθε καταχώρηση σε αυτό ονομάζεται μπλοκ ελέγχου διαδικασίας, το οποίο στην πραγματικότητα είναι μια δομή που περιέχει όλες τις απαραίτητες πληροφορίες για μια συγκεκριμένη διαδικασία. 

Πηγή: www.habr.com

Προσθέστε ένα σχόλιο