Mémoire partagée et IPC

Je lisais un didacticiel sur la mémoire partagée et trouvai la déclaration suivante: “Si un processus souhaite notifier à un autre processus que de nouvelles données ont été insérées dans la mémoire partagée, il devra utiliser des signaux, des files d’attente de messages, des tuyaux, des sockets ou autres. types de CIB. “. Quel est donc le principal avantage de l’utilisation de la mémoire partagée et d’un autre type d’IPC pour la notification uniquement au lieu d’utiliser un IPC qui ne nécessite aucun autre type d’IPC, comme la queue de messages et le socket, par exemple?

La distinction ici concerne les mécanismes IPC pour la signalisation par rapport à l’état partagé.

La signalisation (signaux, files de messages, tuyaux, etc.) convient aux informations qui ont tendance à être courtes, opportunes et dirigées. Les événements liés à ces mécanismes ont tendance à réveiller ou à interrompre un autre programme. L’analogie serait: “qu’est-ce qu’un programme SMS à un autre?”

  • Hey, j’ai ajouté une nouvelle entrée à la table de hachage!
  • Hey, j’ai fini ce travail que tu m’as demandé de faire!
  • Hé, voici une photo de mon chat. N’est-il pas mignon?
  • Hé, voudriez-vous sortir ce soir? Il y a ce nouvel endroit appelé le disque dur.

La mémoire partagée , par rapport à ce qui précède, est plus efficace pour le partage d’objects relativement grands et stables qui changent peu ou sont lus de manière répétée. Les programmes peuvent consulter la mémoire partagée de temps à autre ou après avoir reçu un autre signal. Réfléchissez à ce qu’une famille de programmes écrirait sur un (grand) tableau blanc dans la cuisine de leur maison.

  • Nos recettes préférées.
  • Des choses que nous soaps.
  • Les numéros de téléphone de nos amis et autres informations de contact.
  • Le dernier manuscrit de l’illustre histoire de notre famille, organisé par peine de prison.

Avec ces exemples, vous pouvez dire que la mémoire partagée est plus proche d’un fichier que d’un mécanisme IPC au sens le plus ssortingct, les exceptions évidentes étant que la mémoire partagée est

  1. Accès aléatoire, alors que les fichiers sont séquentiels.
  2. Volatiles, alors que les fichiers ont tendance à survivre aux plantages du programme.

Une table de hachage partagée (ou un arbre ou une autre structure composée) constitue un exemple de mémoire partagée. Chaque processus peut recevoir des messages de mise à jour et une copie privée de la structure, ou vous pouvez stocker la table de hachage en mémoire partagée et utiliser des sémaphores pour le locking.

La mémoire partagée est très rapide – c’est le principal avantage et la raison pour laquelle vous l’utiliseriez. Vous pouvez utiliser une partie de la mémoire pour conserver les indicateurs / horodatages concernant la validité des données, mais vous pouvez utiliser d’autres formes d’IPC pour signaler si vous souhaitez éviter d’interroger la mémoire partagée.

La mémoire partagée est utilisée pour transférer les données entre les processus (et également pour lire / écrire rapidement des fichiers de disque). Si vous n’avez pas besoin de transférer les données et devez uniquement notifier un autre processus, n’utilisez pas de mémoire partagée – utilisez plutôt d’autres mécanismes de notification (sémaphores, événements, etc.).

Selon la quantité de données à transmettre d’un processus à l’autre, la mémoire partagée serait plus efficace car vous réduiriez le nombre de fois où les données seraient copiées de la mémoire utilisateur dans la mémoire du kernel, puis de nouveau dans la mémoire utilisateur.