2010-05-11 10 views
3

La fonction qui crée la mémoire partagée dans la programmation * inux prend une clé comme l'un de ses paramètres.Mémoire partagée Linux

Quelle est la signification de cette clé? Et comment puis-je l'utiliser?

Edit:

Non partagé id mémoire

Répondre

4

Il est juste une clé System V IPC (communication inter-processus) si différents processus peuvent créer ou attacher au même bloc de mémoire partagée. La clé est généralement créée avec ftok() qui transforme un nom de fichier et un ID de projet entièrement spécifiés en une clé utilisable. Comme une application peut généralement utiliser le même nom de fichier dans tous ses différents processus (le nom de fichier est souvent un fichier de configuration associé à votre application), chaque processus différent reçoit la même clé (ou plus probablement si vous utilisez l'ID du projet pour spécifier plusieurs segments de mémoire partagée, le même ensemble de clés). Par exemple, nous avions une application qui utilisait un fichier de configuration traité par notre code lex/yacc. Nous avons donc utilisé ce chemin et un identifiant de projet pour chaque bloc de mémoire partagée (il y en avait trois ou quatre selon le but du processus en question). Cela a effectivement fait beaucoup de sens car ce sont les données analysées et évaluées de ce fichier de configuration qui a été stocké dans les blocs de mémoire partagée.

Étant donné qu'aucune autre application sur le système ne doit utiliser notre fichier de configuration pour créer une clé, il n'y a pas eu de conflit. La clé elle-même n'est pas limitée à la mémoire partagée, elle pourrait également être utilisée pour les sémaphores et d'autres mécanismes IPC.

+0

Oui, la clé est en général créée avec 'ftok' (voir http://netbsd.gw.com/cgi-bin/man-cgi?ftok+3+NetBSD-current), et utilisée depuis' shmget' . Avec la clé, 'shmget' peut soit créer le segment partagé, soit obtenir le segment existant identifié avec la clé, en fonction des indicateurs que vous passez (voir http://netbsd.gw.com/cgi-bin/man-cgi ? shmget + 2 + NetBSD-current). – tonio

0

Les fonctions de mémoire partagée Posix (shm_open et friends) ont une interface plus conviviale en ce sens qu'elles peuvent accepter un nom de fichier unique qui doit être utilisé par les applications pour ouvrir le même bloc de mémoire partagée. Cela dit, il est généralement également possible d'ouvrir un fichier dans/dev/shm sous Linux, puis de le mettre en mmap avec MAP_SHARED, ce qui correspond à peu près au même résultat.

Questions connexes