Question

Quels sont les compromis entre l'utilisation d'un V système et un sémaphore Posix?

Était-ce utile?

La solution

De O « Reilly :

  
      
  • Une différence marquée entre le V du système et sémaphores POSIX   les mises en œuvre est que dans le Système V   vous pouvez contrôler combien le sémaphores   le nombre peut être augmenté ou diminué;   alors que dans Posix, le nombre de sémaphores   est augmenté et diminué de 1.
  •   
  • sémaphores POSIX ne permettent pas la manipulation des autorisations de sémaphores,   tandis que sémaphores System V vous permettent   modifier les autorisations de   sémaphores à un sous-ensemble de l'original   autorisation.
  •   
  • Initialisation et création de sémaphores est atomique (de l'utilisateur de   perspective) dans sémaphores POSIX.
  •   
  • Du point de vue de l'utilisation, sémaphores System V sont maladroits, tandis que Posix   sémaphores sont straight-forward
  •   
  • L'évolutivité de sémaphores (en utilisant POSIX sémaphores sans nom) est beaucoup   plus élevé que les sémaphores System V. Dans un   scénario utilisateur / client, où chaque utilisateur   crée ses propres instances d'un serveur,   il serait préférable d'utiliser Posix   sémaphores.
  •   
  • Système V sémaphores, lors de la création d'un objet sémaphore, crée un tableau de   sémaphores alors que sémaphores POSIX   créer un seul. À cause de ce   fonction, création sémaphores (mémoire   -Sage empreinte) est plus coûteux dans le système   V sémaphores par rapport à Posix   sémaphores.
  •   
  • Il a été dit que la performance de sémaphores est mieux que Posix   Système sémaphores à base de V.
  •   
  • sémaphores POSIX fournissent un mécanisme de sémaphores de processus à l'échelle plutôt   que sémaphores l'échelle du système. Donc, si un   développeur oublie de fermer la   sémaphores, sur la sortie de processus   sémaphores est nettoyé. en simple,   termes, sémaphores POSIX fournissent une   mécanisme de non persistant   sémaphores.
  •   

Autres conseils

Deux problèmes majeurs partagés POSIX / nommés sémaphores utilisés dans des processus séparés (non threads): Les sémaphores POSIX fournissent pas de mécanisme pour réveiller un processus d'attente quand un processus différent meurt tout en maintenant un verrou sémaphores. Ce manque de nettoyage peut entraîner des sémaphores de zombies qui causeront tout autre procédé ou ultérieure qui tente de les utiliser à une impasse. Il n'y a également aucun moyen POSIX de la liste des sémaphores dans le système d'exploitation pour tenter d'identifier et de les nettoyer. La section sur SysV IPC Posix ne précise les IPCS et les outils de ipcrm à la liste et de manipuler les ressources mondiales IPC SysV. Aucun de ces outils ou même des mécanismes sont spécifiés pour IPC Posix, bien que sur Linux ces ressources peuvent souvent être trouvées sous / SHM. Cela signifie qu'un signal KILL au mauvais processus au mauvais moment peut se bloquer tout un système de processus d'interaction jusqu'au redémarrage.

Un autre inconvénient est l'utilisation de la sémantique des fichiers pour les sémaphores POSIX. L'implication est qu'il ne peut y avoir plus d'un sémaphores partagé avec le même nom, mais dans différents états. Par exemple, un processus appelle sem_open, puis sem_unlink avant sem_close. Ce processus peut encore utiliser le sémaphores comme déliant un fichier ouvert avant de le fermer. Processus 2 appels sem_open sur le même sémaphores entre les appels sem_unlink et sem_close du procédé 1, et (selon la documentation) obtient une nouvelle marque sémaphores avec le même nom, mais dans un état différent de processus 1. Deux sémaphores partagés avec le même nom fonctionnant indépendamment défaites dans le but de sémaphores partagés.

Limitation on fait ci-dessus Posix partagée sémaphores inutilisable dans un système du monde réel sans garantie que les signaux uncatchable ne peuvent jamais être envoyés. Limitation deux peut être atténué par un codage prudent, en supposant un contrôle sur tout le code qui utilisera un sémaphore donné. Franchement, il est plus que surprenant qu'ils ont fait dans la norme comme ils sont.

Je sais que c'est vieux, mais au profit de ceux qui lisent encore cette courtoisie de Google, le # 1 raison pour laquelle je trouve utiliser System V sémaphores sur sémaphores POSIX (niveau du système) est la capacité d'acquérir la ressource sémaphores dans d'une manière qui est automatiquement renvoyé par le noyau QUEL qUE SOIT lE PROCESSUS SORT.

Je suis d'accord que les multiples opérations sur les sémaphores (atomiques) sont rarement utilisés (bien qu'ils peuvent être utiles lors de la mise en scène), et que l'interface System V est bizarre, mais il n'y a tout simplement aucun moyen d'obtenir de manière fiable la même sémantique nettoyage avec sémaphores POSIX.

Je me demande ce qui rend les gens la conception mauvais API est comme système V sémaphores ! Uneless vous avez de très fortes raisons pour aller avec sémaphores System V (telles que les opérations atomiques avec de multiples incrément décrément en une seule étape), vous devriez coller avec sémaphores Posix appelé.

L'article lié discute de ce qui est mal et non-intuitive avec le système V Sémaphores.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top