2024-07-11
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Απαιτείται συνεργασία μεταξύ των διαδικασιών. Για παράδειγμα, όλα τα επίπεδα διοίκησης σε ένα σχολείο είναι αλληλένδετα και δεν είναι δυνατή η κάθετη διαχείριση. Ακριβώς επειδή οι διαδικασίες πρέπει να συνεργάζονται είναι ότι οι διαδικασίες πρέπει να επικοινωνούν με κατηγορίες.
Γεγονός: Οι διεργασίες είναι ανεξάρτητες, διεργασία = δομή δεδομένων πυρήνα, κώδικας και δεδομένα διεργασίας
Σκοπός της διαδικασίας επικοινωνίας:
Το κόστος της επικοινωνίας μεταξύ των διαδικασιών μπορεί να είναι ελαφρώς υψηλότερο: οι διεργασίες είναι ανεξάρτητες και τυχόν πόροι που ανοίγονται από μια διεργασία δεν είναι ορατοί σε μια άλλη διαδικασία. Όταν μιλήσαμε για τη διαδικασία γονέα-παιδιού, τα δεδομένα της γονικής διαδικασίας κληρονομήθηκαν από τη διαδικασία του παιδιού και να είναι πάντα σε θέση να μεταδώσει πληροφορίες.
Η αρχή της επικοινωνίας μεταξύ των διεργασιών: αφήστε πρώτα διαφορετικές διεργασίες να δουν τον ίδιο πόρο (λειτουργικό σύστημα) ("ένα κομμάτι μνήμης"). Οι δύο διεργασίες είναι ανεξάρτητες Για να επιτευχθεί η επικοινωνία, χρειάζεται ένα εργαλείο, δηλαδή το λειτουργικό σύστημα, για να μπορέσουν οι δύο διεργασίες να έχουν την ίδια μνήμη. Ο λόγος για τον οποίο το λειτουργικό σύστημα το κάνει αυτό καθορίζεται από τον χρήστη.
Πώς να πείτε στο λειτουργικό σύστημα να δημιουργήσει πόρους:
Μια διοχέτευση είναι ουσιαστικά ένα αρχείο σε επίπεδο μνήμης που δεν χρειάζεται να ξεπλυθεί στο δίσκο.
Πρώτον, η γονική διαδικασία ανοίγει ένα αρχείο δύο φορές σε λειτουργία ανάγνωσης και εγγραφής Ο λόγος για το άνοιγμα του αρχείου δύο φορές είναι να ληφθούν δύο αντικείμενα αρχείου struct, έτσι ώστε να υπάρχουν δύο δείκτες ανάγνωσης και εγγραφής για ένα αρχείο, έτσι ώστε οι λειτουργίες ανάγνωσης και εγγραφής. Χρησιμοποιήστε ανεξάρτητους δείκτες Με αυτόν τον τρόπο, η ανάγνωση και η γραφή δεν θα επηρεάσουν η μία την άλλη.Ο δείκτης ανάγνωσης-εγγραφής καταγράφει την τρέχουσα θέση ανάγνωσης ή εγγραφής του αρχείου, αstruct file
Υπάρχει μόνο ένας δείκτης ανάγνωσης-εγγραφής στο αρχείο Κατά την εγγραφή (ή την ανάγνωση) στο αρχείο, ο δείκτης ανάγνωσης-εγγραφής θα μετακινηθεί και, στη συνέχεια, θα διαβάσει (εγγραφή) ξανά στην αρχική θέση και δεν μπορεί να διαβάσει το περιεχόμενο που μόλις γράφτηκε, επομένως πρέπει να ανοίξετε το ίδιο αρχείο δύο φορές με διαφορετικούς τρόπους. Στη συνέχεια, δημιουργήστε μια θυγατρική διεργασία Η διεργασία μπορεί να περάσει τον περιγραφέα του αρχείου Νο. 4 στο αρχείο Κατά την εγγραφή στο αρχείο, η γονική διαδικασία μπορεί να διαβάσει από το αρχείο μέσω του περιγραφέα αρχείου Νο. 3. Αυτή τη στιγμή, οι διεργασίες γονέα και θυγατρικές πραγματοποιούν τη μετάδοση δεδομένων, δηλαδή την επικοινωνία. . Οι διεργασίες γονέα και θυγατρική βλέπουν το ίδιο buffer μνήμης, το οποίο ονομάζουμε αρχείο σωλήνα εδώ. Οι σωλήνες επιτρέπουν μόνο μονόδρομη επικοινωνία λόγω απλότητας.
Γιατί οι επεξεργασίες γονέα-παιδιού εκτυπώνουν δεδομένα στο ίδιο τερματικό οθόνης;
Επειδή η αντίστοιχη θυγατρική διαδικασία θα κληρονομήσει τον πίνακα περιγραφής αρχείου που αντιστοιχεί στη γονική διεργασία και στη συνέχεια θα δείχνει στο ίδιο αρχείο, πράγμα που σημαίνει ότι η γονική διαδικασία θα πληκτρολογήσει ένα αρχείο και η θυγατρική διαδικασία θα πληκτρολογήσει επίσης ένα αρχείο και Το ίδιο θα γραφτεί σε ένα buffer, το λειτουργικό σύστημα θα ξεπλύνει στην ίδια οθόνη.
Η διαδικασία θα ανοίξει τρεις τυπικές εισόδους και τυπικές εξόδους από προεπιλογή: 0, 1, 2... Πώς να ανοίξετε τα 0, 1, 2 από προεπιλογή;
Όλες οι εντολές είναιbash
διαδικασία του παιδιού, εφόσονbash
Όταν είναι ενεργοποιημένο, όλες οι θυγατρικές διεργασίες είναι ενεργοποιημένες από προεπιλογή.
Γιατί η θυγατρική διαδικασία κλείνει ενεργά (0/1/2) χωρίς να επηρεάζεται η συνεχής χρήση του αρχείου παρακολούθησης από τη γονική διαδικασία;
μέτρηση αναφοράς σε επίπεδο μνήμης--
, όταν ο αριθμός αναφοράς σε επίπεδο μνήμης μειωθεί στο 0, οι πόροι του αρχείου απελευθερώνονται.
Η διαδικασία γονέα-παιδιού κλείνει περιττούς περιγραφείς αρχείων, γιατί έπρεπε να ανοίξουν πριν;
Προκειμένου να επιτραπεί στη διαδικασία του παιδιού να κληρονομήσει. Δεν χρειάζεται να κλείσει, αλλά συνιστάται να το κλείσετε για να αποφευχθεί η τυχαία γραφή.
Γιατί οι σωλήνες είναι μονόδρομη επικοινωνία;
Η μέθοδος είναι απλή, μειώνει το κόστος ανάπτυξης και επιτρέπει μόνο μονόδρομη επικοινωνία Οποιοδήποτε αρχείο ανανεώνεται στο buffer και στη συνέχεια τα δεδομένα ανανεώνονται στο αρχείο.
Οι απλοί σωλήνες που βλέπουμε στη ζωή είναι όλοι μονόδρομοι, όπως οι σωλήνες νερού, με μία είσοδο και μία έξοδο, η οποία είναι σύμφωνη με τα χαρακτηριστικά των αγωγών.
μπορεί να χρησιμοποιηθείpipe
Για να δημιουργήσετε έναν σωλήνα χωρίς όνομα, οι παράμετροι δεν απαιτούν διαδρομή αρχείου και όνομα αρχείου
int pipe(int pipefd[2]);