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

Γνώση Υπολογιστών >> Λειτουργικά συστήματα >  >> Unix

Πώς δημιουργούνται και διαγράφονται οι διαδικασίες στο λειτουργικό σύστημα UNIX;

Οι διαδικασίες σε λειτουργικά συστήματα τύπου UNIX (συμπεριλαμβανομένου του Linux, MacOS, BSD κ.λπ.) δημιουργούνται και διαγράφονται μέσω ενός συνδυασμού κλήσεων συστήματος και μηχανισμών εσωτερικού πυρήνα.

Δημιουργία διαδικασίας:

Ο πρωταρχικός τρόπος που δημιουργείται μια νέα διαδικασία είναι μέσω της κλήσης συστήματος `fork (). `Fork ()` δημιουργεί ένα σχεδόν πανομοιότυπο αντίγραφο της διαδικασίας κλήσης (η διαδικασία * γονέας *). Τόσο ο γονέας όσο και η πρόσφατα δημιουργημένη * παιδική διαδικασία * συνεχίζουν την εκτέλεση από το σημείο του `call ()` `call. Η βασική διαφορά είναι η τιμή επιστροφής του `Fork ()`:

* Στη διαδικασία γονέων: `Fork ()` Επιστρέφει το αναγνωριστικό της διαδικασίας (PID) της παιδικής διαδικασίας. Αυτό το PID είναι ένα μοναδικό αναγνωριστικό για το παιδί.

* Στη διαδικασία του παιδιού: `Fork ()` Επιστρέφει 0.

Μετά το `fork ()`, οι διαδικασίες γονέων και παιδιών συνήθως ακολουθούν διαφορετικές διαδρομές εκτέλεσης. Η παιδική διαδικασία χρησιμοποιεί συχνά την `exec ()` Οικογένεια κλήσεων συστήματος (`execl`,` execv`, `execvp` κ.λπ.) για να αντικαταστήσει την τρέχουσα εικόνα του με ένα νέο πρόγραμμα. `exec ()` Αντικατοπτρίζει το χώρο μνήμης του παιδιού με τον κωδικό και τα δεδομένα του νέου προγράμματος. Εάν το παιδί δεν χρησιμοποιεί `exec ()`, συνεχίζει να εκτελεί τον ίδιο κώδικα με τον γονέα, δημιουργώντας έναν πραγματικό κλώνο.

Δημιουργούνται άλλες διαδικασίες που δημιουργούνται περιλαμβάνουν:

* `vfork ()` (λιγότερο κοινό και δυνητικά προβληματικό): Παρόμοια με το `fork ()`, αλλά με λεπτές διαφορές στην κοινή χρήση μνήμης. Γενικά αποφεύγεται λόγω πιθανών αδιέξοδο.

* `clone ()` (πιο προηγμένο): Προσφέρει λεπτότερο έλεγχο των πόρων που μοιράζονται μεταξύ των γονικών και των παιδιών. Χρησιμοποιείται στις βιβλιοθήκες και τα προηγμένα μοντέλα σπειρώματος.

* Αρχικοποίηση συστήματος: Η διαδικασία init (PID 1) είναι ο πρόγονος όλων των άλλων διαδικασιών του συστήματος. Είναι υπεύθυνο για την έναρξη άλλων διαδικασιών κατά τη διάρκεια της εκκίνησης.

* `pthread_create ()`: Αυτή η λειτουργία χρησιμοποιείται για τη δημιουργία νημάτων μέσα σε μια διαδικασία. Ενώ τα νήματα μοιράζονται τον ίδιο χώρο μνήμης με τη διαδικασία των γονέων τους, εξακολουθούν να θεωρούνται ξεχωριστές μονάδες εκτέλεσης που διαχειρίζεται ο πυρήνας.

Διαγραφή διεργασίας (τερματισμός):

Η διαδικασία τερματίζεται (διαγράφεται) υπό διάφορες περιπτώσεις:

* Κανονικός τερματισμός: Η διαδικασία ολοκληρώνει την εκτέλεση της και καλεί την κλήση `exit ()` `. Αυτό σηματοδοτεί το λειτουργικό σύστημα που έχει τελειώσει. Η κατάσταση εξόδου μπορεί να χρησιμοποιηθεί για να μεταφέρει την επιτυχία ή την αποτυχία.

* Μη φυσιολογική τερματισμός: Η διαδικασία καταρρέει λόγω σφάλματος κατάτμησης, παράνομης διδασκαλίας ή άλλου σφάλματος. Ο πυρήνας τερματίζει τη διαδικασία.

* Τερματισμός σήματος: Μια άλλη διαδικασία (ή ο ίδιος ο πυρήνας) μπορεί να στείλει ένα σήμα (π.χ. `sigterm`,` sigkill`) σε μια διαδικασία, αναγκάζοντας τον τερματισμό του. Το «Sigterm» επιτρέπει τη διαδικασία να καθαρίσει πριν από την έξοδο, ενώ το «Sigkill» τερματίζει αμέσως τη διαδικασία χωρίς καθαρισμό.

* Τερματισμός της γονικής διαδικασίας: Εάν τερματιστεί μια γονική διαδικασία, οι διαδικασίες των παιδιών του ενδέχεται να τερματιστούν επίσης, ανάλογα με τις ρυθμίσεις του λειτουργικού συστήματος (συχνά κληρονομούνται από την ομάδα διαδικασιών του γονέα). Η διαδικασία `init` υιοθετεί συνήθως ορφανά παιδιά.

Ο ρόλος του πυρήνα:

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

Συνοπτικά, η δημιουργία και η διαγραφή των διαδικασιών στο UNIX ενορχηστρώνεται προσεκτικά από τον πυρήνα και περιλαμβάνει ένα σύνολο κλήσεων συστήματος που επιτρέπουν στους προγραμματιστές να ελέγχουν τον κύκλο ζωής της διαδικασίας. Το `fork ()` και `exec ()` οικογένεια (για δημιουργία) και `exit ()` και τα σήματα (για διαγραφή) είναι τα βασικά συστατικά.

Συναφής σύστασή

Πνευματικά δικαιώματα © Γνώση Υπολογιστών Όλα τα δικαιώματα κατοχυρωμένα