Programmation.c : IPC: mmap() vs shmget()

Posté par Mildred (Jabber id, page perso, ) le 23 avril 2008
0

Bonsoir,



Jusqu'à présent j'avait toujours associé des segments de mémoire partagés avec l'appel système mmap. Mais cette année, j'ai eu un cours système où on m'a introduit les IPC Système V, et je me demande jusqu'a quel points ils sont utilisés.



Les IPC système V s'utilisent en créant un token avec ftok(). À partir de là il est possible de créer des files de messages (msgget) des segments de mémoire partagés (shmget) ou des sémaphores (semget). Et la commande ipcs permet de lister tous les IPC présent sur le système.



Or sur mon système, lorsque je lance ipcs, j'ai:



------ Shared Memory Segments --------

key shmid owner perms bytes nattch status

0x00005d8b 32768 root 777 388 2

0x00000000 65537 mildred 600 393216 2 dest

0x00000000 98306 mildred 600 393216 2 dest

0x00000000 91324419 mildred 600 2160333 3 dest

0x00000000 88932356 mildred 600 393216 2 dest

0x00000000 196613 mildred 600 393216 2 dest

0x00000000 229382 mildred 600 393216 2 dest

0x00000000 262151 mildred 600 393216 2 dest

0x00000000 294920 mildred 600 393216 2 dest

0x00000000 327689 mildred 600 393216 2 dest

0x00000000 360458 mildred 600 393216 2 dest

0x00000000 393227 mildred 600 393216 2 dest

0x00000000 425996 mildred 600 393216 2 dest

0x00000000 458765 mildred 600 393216 2 dest

0x00000000 91357198 mildred 600 393216 2 dest

0x00000000 524303 mildred 600 393216 2 dest

0x00000000 720912 mildred 600 393216 2 dest

0x00000000 95911953 mildred 600 393216 2 dest

0x00000000 622610 mildred 600 393216 2 dest

0x00000000 917524 mildred 600 393216 2 dest

0x00000000 1245205 mildred 600 393216 2 dest

0x00000000 884758 mildred 600 393216 2 dest

0x00000000 88965143 mildred 600 393216 2 dest

0x00000000 94601240 mildred 600 393216 2 dest

0x00000000 94634009 mildred 600 393216 2 dest

0x00000000 88997914 mildred 600 12288 2 dest

0x00000000 1474587 mildred 600 393216 2 dest

0x00000000 94666780 mildred 600 393216 2 dest

0x00000000 94699549 mildred 600 393216 2 dest

0x00000000 92536863 mildred 600 393216 2 dest

0x00000000 92962850 mildred 600 393216 2 dest

0x00000000 92995620 mildred 600 12288 2 dest

0x00000000 93028389 mildred 600 393216 2 dest

0x00000000 93061158 mildred 600 12288 2 dest

0x00000000 93093927 mildred 600 393216 2 dest

0x00000000 93126696 mildred 600 12288 2 dest

0x00000000 93159465 mildred 600 393216 2 dest

0x00000000 93192234 mildred 600 12288 2 dest



------ Semaphore Arrays --------

key semid owner perms nsems



------ Message Queues --------

key msqid owner perms used-bytes messages







Donc en gros, je vois que le système dispose de quelques segments de mémoire partagés (peut être bien créés avec mmap, lorsque je vois que tous les tokens ou presque sont nuls) mais que les autres IPC restent inutilisées (si ce n'est lors de mes TP).



Ma question est la suivante: dans quelle mesure ces appels systèmes sont vraiment utilisés, et dans quelle mesure on préfère rester avec des IPC plus classiques comme les sockets ou les pipes ?



Merci



Mildred

> Lire le message (4 commentaires, moyenne: 2,8).  

Vous avez demandé le commentaire #925335.

POSIX shared memory

Posté par castorpilot () le 24/04/2008 à 12:09. (lien). Évalué à 2.

Je ne sais trop quoi repondre à cette grande question metaphysique ...
Par contre, je prefere shm_open, qui " Create/open or unlink POSIX shared memory objects", et qui a le bon gout d'etre appelé par un nom, et pas par une clef.