Comment un système d’exploitation de type unix implémente-t-il la mémoire partagée IPC?

les gars. Je me demande comment les systèmes d’exploitation de type Unix implémentent la mémoire partagée? Quelle est la différence entre l’access à une mémoire utilisateur normale entre l’access à un unix de mémoire dans la mémoire partagée IPC de système?

La mémoire de processus est protégée: en dehors de votre programme, personne ne peut y accéder normalement. Cela implique des astuces “importantes”: votre programme doit croire qu’il a tout l’espace adressable utilisable pour lui-même, ce qui n’est pas le cas. Si je comprends bien, l’espace d’adressage d’un processus est divisé en pages (4 k, je pense), et le kernel a une sorte d’index pour ces pages, qui les mappe à la mémoire physique ou à d’autres périphériques (comme votre disque dur). comment vous faites des fichiers mappés en mémoire). Chaque fois que votre processus essaie d’accéder à une adresse mémoire, il va d’abord sur cette carte pour voir où l’adresse pointe réellement, puis effectue les access comme demandé. Et chaque fois que le processus tente d’accéder à une page que le kernel n’a pas mappée n’importe où, vous obtenez une erreur de segmentation.

Comme la mémoire est quelque peu abstraite, le kernel peut faire toutes sortes de trucs. La mémoire partagée doit être une sorte de cas particulier où le kernel est invité à mapper des pages de l’espace d’adressage de différents processus vers le même emplacement physique.