Maison  >  Article  >  Opération et maintenance  >  Techniques classiques de communication inter-processus Linux

Techniques classiques de communication inter-processus Linux

WBOY
WBOYavant
2022-02-09 17:38:571886parcourir

Cet article vous apporte des connaissances pertinentes sur la communication inter-processus Linux, y compris les canaux, les canaux anonymes, la mémoire partagée et d'autres problèmes connexes. J'espère qu'il sera utile à tout le monde.

Techniques classiques de communication inter-processus Linux

·Communication inter-processus : La méthode fournie par le système d'exploitation pour que le système implémente la communication inter-processus

Les processus ne peuvent pas communiquer directement car chaque processus possède un espace d'adressage virtuel indépendant et accède au sien. adresse virtuelle, le processus est donc indépendant et ne peut pas communiquer directement

Selon le scénario de communication, différentes méthodes de communication sont fournies

Types de méthodes de communication inter-processus : tuyaux, mémoire partagée, file d'attente de messages, sémaphore

·Pipeline

Caractéristiques : Communication semi-duplex - communication unidirectionnelle avec la direction que vous pouvez choisir

Essence : Ouvrir un tampon dans le noyau (un morceau de mémoire dans l'espace du noyau)

Principe : Plusieurs processus communiquent en accédant au buffer dans le même noyau (en copiant le handle d'opération du buffer)

Catégorie : Pipe anonyme : Le buffer n'a pas d'identifiant et ne peut être utilisé que pour la communication inter-processus avec affinité

Pipe nommée : Le buffer a un identifiant et peut être utilisé pour toute communication inter-processus sur le même hôte

Tout sous Linux est un fichier - tout est exploité comme un fichier (y compris les tubes), et l'accès au tube se fait via des opérations d'E/S

·Pipeline anonyme

Valeur de retour : renvoie 0 avec succès ; l'échec renvoie -1

Caractéristiques : ne peut être utilisé que pour la communication inter-processus avec des relations associées

Les canaux anonymes n'ont aucun identifiant et ne peuvent pas être trouvés par d'autres processus. Ils peuvent uniquement copier le. parent à travers le processus de l'enfant Obtenez la poignée d'opération à travers le processus pour parvenir à la communication

Fonctionnalités de lecture et d'écriture : s'il n'y a pas de données dans le canal, la lecture bloquera

                                          using using ‐ ‐                       ' ' s ' ‐ down ‐ ‐ ‐ ‐ ‐                                                , provoquant le blocage du processus et exit

                                                                étant fermé avec les extrémités d'écriture de tous les tubes. Si vous continuez à lire, 0 sera renvoyé après la lecture des données et il ne sera plus bloqué.

                                           Une fois la direction sélectionnée, la fin inutilisée devrait être fermé.

·

Tube nommé : Essentiellement, il s'agit d'un tampon dans le noyau, avec un identifiant qui peut être trouvé par d'autres processus, il peut donc être utilisé pour toute communication inter-processus sur le même hôte Pipe nommée L'identifiant est un fichier de type pipe visible dans le système de fichiers Plusieurs processus communiquent en ouvrant le même fichier pipe et en accédant au tampon dans le même noyau

Opération de commande : mkfifo filename Créer un fichier pipe nommé

Fonctionnement de la fonction :int mkfifo(const char *pathname, mode_t mode);

Pathname : nom du fichier ; mode : autorisation de création

Valeur de retour : 0 est renvoyé en cas de succès ; -1 est renvoyé en cas d'échec

·Résumé :

L'essence du pipeline : Un tampon dans l'espace noyau Principe : Plusieurs processus réalisent la transmission de données en accédant au même tampon Catégorie : canaux anonymes, canaux nommés

Tubes anonymes : ne peuvent être utilisés que pour la communication inter-processus avec des relations de parenté

Tubes nommés : peuvent être utilisés pour toute communication inter-processus sur le même hôte

Caractéristiques : ① Communication semi-duplex - communication unidirectionnelle avec la direction que vous pouvez choisir

Fournit un service de transmission de flux d'octets : commandé , fiable, basé sur la connexion Une sorte de transmission en streaming

Basé sur la connexion : si toutes les extrémités de lecture sont fermées, l'écriture sera anormale si toutes les extrémités d'écriture sont fermées, la lecture renverra 0

② Livré avec synchronisation et exclusion mutuelle :

Synchronisation : le seul accès aux ressources critiques via le même processus et en même temps Réaliser des opérations d'accès sécurisées

                                                                                                                                                                   mis en œuvre.对 Le mode de réalisation de l'exclusion mutuelle : La taille de l'opération d'écriture du pipeline ne dépasse pas la taille du PIPE_BUF-4096, alors l'atomicité du fonctionnement de l'opération est synchronisée. Le cycle de vie suit le processus : sans intervention humaine, après que tous les processus qui ouvrent la sortie du tuyau, le tampon du tuyau est libéré

·Mémoire partagée :

Utilisée pour réaliser le partage de données entre les processus

Essence : un morceau de mémoire physique Principe : Ouvrir un espace mémoire physique , plusieurs processus mappent le même bloc sur leur propre espace d'adressage virtuel et y accèdent directement via l'adresse virtuelle, réalisant ainsi le partage de données

Caractéristiques : La méthode de communication inter-processus la plus rapide, le cycle de vie suit le noyau               touchant dans, , , , , , , , , , , , , , et , deux opérations de copie de données en moins

.

Remarque : les problèmes de sécurité doivent être pris en compte lors de l'utilisation de la mémoire partagée

Processus opérationnel :

①Créer ou ouvrir une mémoire partagée

②Mappez la mémoire partagée sur l'espace d'adressage virtuel du processus ③Grâce à l'espace d'adressage virtuel mappé adresse Effectuer diverses opérations de mémoire

④Démapper la relation de mappage

⑤Supprimer la mémoire partagée

int shmget(key_t key, size_t size, int shmflg);

key : identifiant (plusieurs processus ouvrent la même mémoire partagée via le même identifiant)

size : la taille de l'espace ouvert lors de la création (en mémoire Pages)

                                                                                     utiliser utiliser utiliser utiliser utiliser ' s ‑ ‑ ‑ ‑               

void *shmat(int shmid, const void *shmaddr, int shmflg); Méthode d'accès ; SHM_RDONLY -Lecture seule ; 0-lecture-écriture                                                                                                                                                       L'échec peut revenir (vide *)-1                                    

int shmdt(const void *shmaddr);

int shmctl(int shmid, int cmd, struct shmid_ds *buf); buf : pour IPC_RMID, renvoie 0 avec succès, renvoie -1 en cas d'échec

·Message Queue

Essence : une file d'attente prioritaire dans le noyau. Plusieurs processus accèdent à la même file d'attente et ajoutent ou obtiennent des nœuds à la file d'attente pour obtenir un transfert de données inter-processus Caractéristiques : Livré avec synchronisation et exclusion mutuelle, le cycle de vie suit le noyau

·Sémaphore

. Essence : Un compteur dans le noyau + file d'attente PCB

Fonction : Utilisé pour réaliser la synchronisation entre les processus Avec exclusion mutuelle, coordonner l'accès du processus aux ressources critiques Opération P : Compteur -1, juger si le décompte est inférieur à 0, bloquer le processus

Opération V : Compteur +1, réveiller un processus bloqué

Utiliser son propre compteur pour accéder aux ressources Un comptage est effectué pour déterminer si l'acquisition de ressources par le processus est raisonnable. Si elle n'est pas raisonnable, elle sera bloquée. . Après avoir attendu qu'une ressource soit générée, réveillez le processus bloqué

Implémentation synchrone : comptez la ressource via un compteur, et effectuez l'opération P avant d'acquérir la ressource Implémentation mutuellement exclusive : le compteur est 1, indiquant qu'il n'y a que une ressource, avant que le processus n'accède à la ressource. Effectuez l'opération P et effectuez l'opération V après avoir terminé la visite

Recommandations associées : "Tutoriel vidéo Linux"

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer