90 votes

IPC System V vs IPC POSIX

  1. Quelles sont les différences entre System V IPC y POSIX IPC ?
  2. Pourquoi avons-nous deux normes ?
  3. Comment décider des fonctions IPC à utiliser ?

2 votes

Il y a une raison qui m'a poussé à choisir les files de messages sysv plutôt que posix. La possibilité de délivrer des messages par mtype n'est pas supportée dans les files de messages posix. J'avais sur le blog à ce sujet..

0 votes

Dans le livre intitulé Linux Programming Unleashed 2nd Edition par Kurt Wall page 382, il est dit : System V IPC is well known and commonly used, but the Linux implementation of it is badly broken. Je ne sais pas si des améliorations ont été apportées à Linux pour résoudre ce problème, si quelqu'un le sait, dites-le. Aujourd'hui, je suis aussi confronté au même choix entre IPC Posix o Système V IPC et mon approche consiste à bien comprendre le type de primitive IPC qui va être utilisé, car il y a des avantages à l'un par rapport à l'autre. Par exemple, un processus peut mourir brusquement et que se passe-t-il alors ?

112voto

Philip Semanchuk Points 396

Les deux ont les mêmes outils de base : sémaphores, mémoire partagée et files de messages. Ils offrent une interface légèrement différente pour ces outils, mais les concepts de base sont les mêmes. Une différence notable est que POSIX offre certaines fonctionnalités de notification pour les files d'attente de messages que Sys V n'offre pas. (Voir mq_notify() .)

Le Sys V IPC existe depuis plus longtemps, ce qui a quelques implications pratiques --

Premièrement, l'IPC POSIX est moins largement implémenté. J'ai écrit un wrapper Python pour POSIX IPC et sa documentation liste ce que je sais des implémentations POSIX IPC sur diverses plateformes .

Sur toutes les plateformes listées dans cette documentation, l'IPC Sys V est complètement implémenté AFAIK, alors que vous pouvez voir que l'IPC POSIX ne l'est pas.

La deuxième implication de leur âge relatif est que POSIX IPC a été conçu après que Sys V IPC ait été utilisé pendant un certain temps. Par conséquent, les concepteurs de l'API POSIX ont pu tirer des enseignements des forces et des faiblesses de l'API Sys V. En conséquence, l'API POSIX est plus simple et plus facile à utiliser. et plus facile à utiliser, et je la recommande plutôt que l'API Sys V.

Je dois noter que je n'ai jamais effectué de tests de performance pour comparer les deux. J'aurais pensé que l'ancienne API (Sys V) aurait eu plus de temps pour améliorer les performances, mais ce n'est qu'une spéculation qui, bien sûr, ne remplace pas les tests en conditions réelles.

Quant à la raison pour laquelle il y a deux standards, POSIX a créé son standard parce qu'ils pensaient qu'il était une amélioration du standard Sys V. Mais si tout le monde était d'accord pour dire que POSIX IPC est meilleur, de nombreux programmes utilisent encore Sys V IPC et il faudrait des années pour les porter tous vers POSIX IPC. En pratique, l'effort n'en vaudrait pas la peine, donc même si tous les nouveaux codes utilisaient POSIX IPC dès demain, Sys V IPC resterait en place pendant de nombreuses années.

Nous ne pouvons pas vous dire laquelle vous devez utiliser sans en savoir beaucoup plus sur ce que vous avez l'intention de faire, mais les réponses que vous avez obtenues ici devraient vous donner suffisamment d'informations pour décider par vous-même.

2 votes

Il y a une différence importante que les pages de manuel et d'autres articles ne mettent pas en évidence, à savoir que les files de messages sysv ont une notion de distribution des messages par mtype (posix msgq n'a pas cela). Dans certains cas, cela pourrait être un élément de conception important et, pour citer mon expérience, cela s'est avéré être un obstacle. J'avais sur le blog à ce sujet.

0 votes

D'après la documentation d'OpenGroup, SysV IPC faisait partie de SUS depuis le numéro 2 et la nouvelle interface, depuis le numéro 7. En effet, l'un est là depuis plus longtemps, mais les deux font partie de SUS, donc les deux font partie de POSIX.

24voto

jweyrich Points 10002
  1. Je crois que la principale différence est que tous les IPC POSIX sont thread-safe, alors que la plupart des IPC SysV ne le sont PAS [ ]. 1 ].
  2. En raison de La guerre des Unix [ 2 ]. Le site Spécification UNIX unique (SUS) [ 3 ], alias POSIX, a été créé pour normaliser les interfaces des systèmes basés sur Unix.
  3. Vous voulez probablement POSIX. Cela dépend exclusivement de vos besoins.

13voto

Madars Vi Points 424

L'IPC System V est plus ancien et l'IPC POSIX est plus récent. Cependant, il existe des différences pour certains aspects. Posix n'est pas toujours meilleur que System V.

  1. Les sémaphores, les files d'attente et la mémoire partagée pour Posix ont des noms de chaînes Ascii, alors que sous System V, ils sont donnés avec un nombre entier.

  2. Les sémaphores System V permettent d'être libérés automatiquement si le processus meurt (drapeau SEM_UNDO). Il n'y a pas de telle chose pour Posix.

  3. Sous Linux et FreeBSD, il y a un grand avantage des files d'attente posix, car les gestionnaires donnés par mq_open sont essentiellement des descripteurs de fichiers qui peuvent être interrogés/épilés/sélectionnés/quêtés.

0 votes

Il semble donc que le choix dépende du type d'activité de l'entreprise. Primitif IPC que l'on va utiliser. Il y en a où Posix est excellent, et pourtant il y en a aussi où System V est excellent. Si un processus meurt brusquement, et qu'aucune API au monde ne peut intercepter un tel événement, alors les Primitives IPC serait en suspens ou sa détection par ce moyen. Il y a différents cas d'utilisation pour lesquels Posix est le meilleur, et il y a d'autres cas d'utilisation pour lesquels le Système V gère bien le problème.

-5voto

Jestin Joy Points 635
  • Systen V et POSIX IPC sont deux implémentations différentes, mais liées, de la même chose.

"Unix System V, communément abrégé SysV (et généralement prononcé - bien que rarement écrit - comme "System Five"), est l'une des premières versions commerciales du système d'exploitation Unix. Il a été initialement développé par American Telephone & Telegraph (AT&T) et publié pour la première fois en 1983."

-Wikipedia

"POSIX ou "Portable Operating System Interface [for Unix]" est le nom d'une famille de normes connexes spécifiées par l'IEEE pour définir l'interface de programmation d'applications (API).

-Wikipedia

  • Systm V était là avant. POSIX a évolué à partir de l'initiative de normalisation de l'IEEE.

  • GNU/Linux est partially conforme à la norme POSIX. Le choix de l'un ou l'autre dépend du système d'exploitation que vous utilisez pour cette IPC. La plupart des fournisseurs s'orientent vers POSIX .

Programmation réseau Unix : Interprocess Communications v. 2 par Richard Stevens donne un bon aperçu de ces deux aspects.

Unix Network Programming

8 votes

Vous ne discutez pas de la communication interprocessus comme indiqué dans les questions.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X