Partage de technologie

Communication inter-processus - tuyaux

2024-07-11

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

Insérer la description de l'image ici

1. Introduction à la communication de processus

1.1 Pourquoi la communication est nécessaire entre les processus

La collaboration est requise entre les processus. Par exemple, tous les niveaux de gestion d’une école sont interconnectés et ne peuvent pas être gérés verticalement. C'est précisément parce que les processus doivent collaborer. La condition préalable à la collaboration est que les processus doivent communiquer. Certaines données sont prêtes à être notifiées, certaines données sont simplement des données transmises et d'autres sont des données liées au contrôle.

Fait : les processus sont indépendants, processus = structure de données du noyau, code et données du processus

Le but de la communication de processus :

  • Transfert de données : un processus doit envoyer ses données à un autre processus
  • Partage de ressources : partage des mêmes ressources entre plusieurs processus.
  • Événement de notification : un processus doit envoyer un message à un autre processus ou à un groupe de processus pour l'informer qu'un certain événement s'est produit (par exemple, notifier le processus parent lorsque le processus se termine).
  • Contrôle de processus : certains processus espèrent contrôler complètement l'exécution d'un autre processus (comme le processus de débogage). À ce stade, le processus de contrôle espère intercepter tous les pièges et exceptions d'un autre processus et être capable de connaître ses changements d'état dans le temps.

1.2 Comment les processus communiquent

Le coût de la communication entre les processus peut être légèrement plus élevé : les processus sont indépendants et les ressources ouvertes par un processus ne sont pas visibles par un autre processus. Lorsque nous avons parlé du processus parent-enfant auparavant, les données du processus parent ont été héritées par le processus enfant. Cela n'appartient pas à la communication. Il peut être hérité mais pas toujours. Il y a une différence entre pouvoir transmettre des informations. et toujours être capable de transmettre des informations.

Le principe de la communication inter-processus : laissez d'abord les différents processus voir la même ressource (du système d'exploitation) ("un morceau de mémoire"). Les deux processus sont indépendants. Pour parvenir à communiquer, il faut un outil, à savoir le système d'exploitation, pour permettre aux deux processus d'avoir la même mémoire. La raison pour laquelle le système d'exploitation fait cela est déterminée par l'utilisateur.
Comment demander au système d'exploitation de créer des ressources :

  1. Il faut qu'un certain processus doive d'abord communiquer et laisser le système d'exploitation créer une ressource partagée.
  2. Le système d'exploitation doit fournir de nombreux appels système pour permettre aux processus de demander des ressources système via des appels système.
    Différentes ressources partagées créées par le système d'exploitation et différentes interfaces d'appel système déterminent les différents types de communication inter-processus.

Insérer la description de l'image ici

2. Pipeline

2.1 Pipeline anonyme

2.1.1 Pipeline de compréhension du descripteur de fichier

Insérer la description de l'image ici

Un pipeline est essentiellement un fichier au niveau de la mémoire qui n'a pas besoin d'être vidé sur le disque.
Tout d'abord, le processus parent ouvre un fichier deux fois en mode lecture et écriture. La raison de l'ouverture du fichier deux fois est d'obtenir deux objets de fichier struct, de sorte qu'il y ait deux pointeurs de lecture et d'écriture pour un fichier, afin que les opérations de lecture et d'écriture soient effectuées. utilisez des pointeurs indépendants. De cette façon, la lecture et l’écriture ne s’influenceront pas.Le pointeur de lecture-écriture enregistre la position actuelle de lecture ou d'écriture du fichier, unstruct file Il n'y a qu'un seul pointeur de lecture-écriture dans le fichier. Lors de l'écriture (ou de la lecture) dans le fichier, le pointeur de lecture-écriture se déplacera, puis lira (écrira) à nouveau. À ce moment, le pointeur de lecture-écriture n'est plus. à la position d'origine et ne peut pas lire le contenu qui vient d'être écrit, vous devez donc ouvrir le même fichier deux fois de différentes manières. Créez ensuite un processus enfant. Le processus enfant héritera du fichier ouvert dans le processus parent, c'est-à-dire qu'il héritera de la table de descripteurs de fichier du processus parent. À ce stade, les processus parent et enfant partageront la même ressource de fichier. Le processus peut transmettre le descripteur de fichier n° 4 au fichier. Lors de l'écriture dans le fichier, le processus parent peut lire le fichier via le descripteur de fichier n° 3. À ce stade, les processus parent et enfant réalisent la transmission de données, c'est-à-dire la communication. . Les processus parent et enfant voient le même tampon mémoire, que nous appelons ici un fichier tube. Les tuyaux permettent uniquement une communication à sens unique en raison de leur simplicité.

Pourquoi les processus parent-enfant impriment-ils les données sur le même terminal de moniteur ?
Parce que le processus enfant correspondant héritera de la table de descripteurs de fichier correspondant au processus parent, puis pointera vers le même fichier, ce qui signifie que le processus parent saisira un fichier, et le processus enfant saisira également un fichier, et le la même chose sera écrite dans un tampon, le système d’exploitation sera vidé sur le même moniteur.


Le processus ouvrira trois entrées standard et sorties standard par défaut : 0, 1, 2... Comment ouvrir 0, 1, 2 par défaut ?
Toutes les commandes sontbashprocessus enfant, à condition quebashLorsqu'il est activé, tous les processus enfants sont activés par défaut.


Pourquoi le processus enfant se ferme-t-il activement (0/1/2) sans affecter l'utilisation continue du fichier de surveillance par le processus parent ?
comptage de références au niveau de la mémoire--, lorsque le nombre de références au niveau de la mémoire diminue jusqu'à 0, les ressources du fichier sont libérées.


Le processus parent-enfant ferme les descripteurs de fichiers inutiles, pourquoi devaient-ils être ouverts auparavant ?
Afin de permettre au processus enfant d'hériter. Il n'est pas nécessaire de le fermer, mais il est recommandé de le fermer pour éviter toute écriture accidentelle.


Pourquoi les tuyaux communiquent-ils à sens unique ?
La méthode est simple, réduit les coûts de développement et permet uniquement une communication unidirectionnelle. Tout fichier est actualisé dans le tampon, puis les données sont actualisées dans le fichier. Ce processus lui-même est unidirectionnel.
Les conduites simples que nous voyons dans la vie sont toutes à sens unique, comme les conduites d'eau, avec une entrée et une sortie, ce qui est conforme aux caractéristiques des conduites.

2.1.2 Utilisation de l'interface

peut utiliserpipePour créer un canal sans nom, les paramètres ne nécessitent pas de chemin de fichier ni de nom de fichier

int pipe(int pipefd[2]);