Mémoire partagée Posix vs fichiers mappés

Ayant appris un peu sur le sujet, quelqu'un peut-il dire, quelle est la vraie différence entre la mémoire partagée POSIX (shm_open) et les fichiers mappés POSIX (mmap)?

Les deux semblent utiliser le sous-système/dev / tmpfs, plutôt que l'ancien mécanisme IPC.

Y a-t-il donc un avantage à utiliser le fichier mmap sur la mémoire partagée?

Merci.

24
demandé sur skaffman 2010-02-15 00:16:33

3 réponses

La distinction n'est pas toujours claire. La mémoire partagée peut être implémentée via des fichiers mappés en mémoire. une excellente écriture à ce sujet peut être trouvée ici (appliquée à la programmation C / C++).

15
répondu ennuikiller 2010-02-14 21:22:09

Ma compréhension est que cette mémoire partagée est construite au-dessus des fichiers mappés, mais cette Page semble indiquer que la possibilité d'utiliser des fichiers mappés en mémoire en tant que mémoire partagée est conditionnelle.

L'utilisation de la fonction mmap() est limitée par la valeur système QSHRMEMCTL. Lorsque cette valeur système est 0, la fonction mmap() peut ne pas créer un mappage partagé avec la capacité PROT_WRITE. Essentiellement, cela empêche la création d'une carte mémoire qui pourraient modifier la contenu du flux de fichier mappé. Si le paramètre flags indique MAP_SHARED, le paramètre prot spécifie PROT_WRITE et la valeur système QSHRMEMCTL est 0, alors les fonctions mmap() échoueront et un numéro d'erreur d'EACCES résultera.

2
répondu John Knoeller 2010-02-14 21:28:25

Fondamentalement, la mémoire partagée est une forme D'IPC.La région partagée est créée dans / dev / shm qui est créée en mémoire uniquement (RAM) et ne nécessite aucune opération de disque, c'est donc une méthode plus rapide D'IPC.Bien que L'IPC puisse être fait en utilisant le fichier disque, puis en utilisant mmap aussi, mais il serait comparativement lent.Alternativement, vous pouvez toujours utiliser MAP_ANONYMOUS avec mmap qui ne sauvegarde avec aucun fichier disque.

0
répondu Rajat Paliwal 2011-10-02 18:08:56