Κοινή χρήση τεχνολογίας

Επικοινωνία μεταξύ διεργασιών - σωλήνες

2024-07-11

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

Εισαγάγετε την περιγραφή της εικόνας εδώ

1. Εισαγωγή στη διαδικασία επικοινωνίας

1.1 Γιατί απαιτείται επικοινωνία μεταξύ των διαδικασιών

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

Γεγονός: Οι διεργασίες είναι ανεξάρτητες, διεργασία = δομή δεδομένων πυρήνα, κώδικας και δεδομένα διεργασίας

Σκοπός της διαδικασίας επικοινωνίας:

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

1.2 Πώς επικοινωνούν οι διαδικασίες

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

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

  1. Πρέπει πρώτα να επικοινωνήσει μια συγκεκριμένη διαδικασία και να αφήσει το λειτουργικό σύστημα να δημιουργήσει έναν κοινόχρηστο πόρο.
  2. Το λειτουργικό σύστημα πρέπει να παρέχει πολλές κλήσεις συστήματος για να επιτρέπει στις διεργασίες να εφαρμόζουν πόρους συστήματος μέσω κλήσεων συστήματος.
    Διαφορετικοί κοινόχρηστοι πόροι που δημιουργούνται από το λειτουργικό σύστημα και διαφορετικές διεπαφές κλήσεων συστήματος καθορίζουν τους διαφορετικούς τύπους επικοινωνίας μεταξύ διεργασιών.

Εισαγάγετε την περιγραφή της εικόνας εδώ

2. Αγωγός

2.1 Ανώνυμος αγωγός

2.1.1 Διοχέτευση κατανόησης περιγραφέα αρχείων

Εισαγάγετε την περιγραφή της εικόνας εδώ

Μια διοχέτευση είναι ουσιαστικά ένα αρχείο σε επίπεδο μνήμης που δεν χρειάζεται να ξεπλυθεί στο δίσκο.
Πρώτον, η γονική διαδικασία ανοίγει ένα αρχείο δύο φορές σε λειτουργία ανάγνωσης και εγγραφής Ο λόγος για το άνοιγμα του αρχείου δύο φορές είναι να ληφθούν δύο αντικείμενα αρχείου struct, έτσι ώστε να υπάρχουν δύο δείκτες ανάγνωσης και εγγραφής για ένα αρχείο, έτσι ώστε οι λειτουργίες ανάγνωσης και εγγραφής. Χρησιμοποιήστε ανεξάρτητους δείκτες Με αυτόν τον τρόπο, η ανάγνωση και η γραφή δεν θα επηρεάσουν η μία την άλλη.Ο δείκτης ανάγνωσης-εγγραφής καταγράφει την τρέχουσα θέση ανάγνωσης ή εγγραφής του αρχείου, αstruct file Υπάρχει μόνο ένας δείκτης ανάγνωσης-εγγραφής στο αρχείο Κατά την εγγραφή (ή την ανάγνωση) στο αρχείο, ο δείκτης ανάγνωσης-εγγραφής θα μετακινηθεί και, στη συνέχεια, θα διαβάσει (εγγραφή) ξανά στην αρχική θέση και δεν μπορεί να διαβάσει το περιεχόμενο που μόλις γράφτηκε, επομένως πρέπει να ανοίξετε το ίδιο αρχείο δύο φορές με διαφορετικούς τρόπους. Στη συνέχεια, δημιουργήστε μια θυγατρική διεργασία Η διεργασία μπορεί να περάσει τον περιγραφέα του αρχείου Νο. 4 στο αρχείο Κατά την εγγραφή στο αρχείο, η γονική διαδικασία μπορεί να διαβάσει από το αρχείο μέσω του περιγραφέα αρχείου Νο. 3. Αυτή τη στιγμή, οι διεργασίες γονέα και θυγατρικές πραγματοποιούν τη μετάδοση δεδομένων, δηλαδή την επικοινωνία. . Οι διεργασίες γονέα και θυγατρική βλέπουν το ίδιο buffer μνήμης, το οποίο ονομάζουμε αρχείο σωλήνα εδώ. Οι σωλήνες επιτρέπουν μόνο μονόδρομη επικοινωνία λόγω απλότητας.

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


Η διαδικασία θα ανοίξει τρεις τυπικές εισόδους και τυπικές εξόδους από προεπιλογή: 0, 1, 2... Πώς να ανοίξετε τα 0, 1, 2 από προεπιλογή;
Όλες οι εντολές είναιbashδιαδικασία του παιδιού, εφόσονbashΌταν είναι ενεργοποιημένο, όλες οι θυγατρικές διεργασίες είναι ενεργοποιημένες από προεπιλογή.


Γιατί η θυγατρική διαδικασία κλείνει ενεργά (0/1/2) χωρίς να επηρεάζεται η συνεχής χρήση του αρχείου παρακολούθησης από τη γονική διαδικασία;
μέτρηση αναφοράς σε επίπεδο μνήμης--, όταν ο αριθμός αναφοράς σε επίπεδο μνήμης μειωθεί στο 0, οι πόροι του αρχείου απελευθερώνονται.


Η διαδικασία γονέα-παιδιού κλείνει περιττούς περιγραφείς αρχείων, γιατί έπρεπε να ανοίξουν πριν;
Προκειμένου να επιτραπεί στη διαδικασία του παιδιού να κληρονομήσει. Δεν χρειάζεται να κλείσει, αλλά συνιστάται να το κλείσετε για να αποφευχθεί η τυχαία γραφή.


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

2.1.2 Χρήση διεπαφής

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

int pipe(int pipefd[2]);