Comment les programmes communiquent-ils entre eux?

Comment les processus communiquent-ils entre eux? En utilisant tout ce que j’ai appris jusqu’à présent avec la programmation, je suis incapable d’expliquer comment fonctionnent les sockets, les systèmes de fichiers et autres éléments liés à l’envoi de messages entre les programmes.

Btw J’utilise un OS basé sur Linux si vous voulez append quelque chose de spécifique au système d’exploitation. Merci d’avance. La question me harcèle depuis des lustres. Je suppose aussi que le kernel a quelque chose à voir avec cela.

Dans le cas de la plupart des mécanismes IPC (InterProcess Communication), la réponse générale à votre question est la suivante: le processus A appelle le kernel en transmettant un pointeur vers un tampon contenant les données à transférer. Le processus B appelle le kernel sur un appel au kernel) en passant un pointeur sur un tampon à remplir avec les données du processus A.

Cette description générale est vraie pour les sockets , les pipes , les files de messages System V , les fichiers ordinaires, etc. Comme vous pouvez le constater, le coût de la communication est élevé car il implique au moins un changement de contexte.

Les signaux constituent un mécanisme IPC asynchrone dans lequel un processus peut envoyer une simple notification à un autre processus déclenchant un gestionnaire enregistré par le second processus (ou ne rien faire, arrêter ou arrêter ce processus si aucun gestionnaire n’est enregistré, en fonction du signal).

Pour transférer une grande quantité de données, il est possible d’utiliser la mémoire partagée System V, auquel cas deux processus peuvent accéder à la même partie de la mémoire principale. Notez que même dans ce cas, il faut utiliser un mécanisme de synchronisation, comme les sémaphores System V , qui donnent également lieu à des changements de contexte.

C’est pourquoi lorsque les processus doivent souvent communiquer, il est préférable de les transformer en un seul processus.