Die Unterschiede zwischen dem System V und POSIX Semaphoren
-
21-08-2019 - |
Frage
Was sind die Kompromisse zwischen einem System V und ein Posix Semaphore mit?
Lösung
- Ein deutlicher Unterschied zwischen dem System V und POSIX Semaphore Implementierungen, ist, dass in System V Sie können, wie viel die Semaphore steuern Zahl kann erhöht oder verringert werden; wohingegen in POSIX, die Semaphor Zählung erhöht und um 1 verringert.
- POSIX Semaphore erlauben keine Manipulation von Semaphore Berechtigungen, während System-V-Semaphore Sie ermöglichen die Berechtigungen ändern von Semaphore auf eine Teilmenge des ursprünglichen Erlaubnis.
- Initialisierung und Schaffung von Semaphore ist atomar (vom Benutzer Perspektive) in POSIX Semaphore.
- Aus Nutzung Perspektive System V Semaphore sind ungeschickt, während POSIX Semaphore sind straight-forward
- Die Skalierbarkeit von POSIX Semaphore (mit unbenannte Semaphore) viel höher als System V Semaphore. In einem Benutzer / Client-Szenario, bei dem jeder Benutzer ihre eigenen Instanzen eines Servers erstellt, es wäre besser, POSIX zu verwenden Semaphore.
- System V Semaphore, wenn ein Semaphor-Objekt erstellen, erstellt ein Array von Semaphoren während POSIX Semaphoren erstellen nur eine. Deswegen Merkmal, Semaphore-Erstellung (Speicher Fußabdruck weist) ist kostspieliger im System V Semaphore im Vergleich zu POSIX Semaphore.
- Es ist gesagt worden, dass POSIX Semaphore Leistung ist besser als System V-basierte Semaphore.
- POSIX Semaphore bieten einen Mechanismus für prozessweiten Semaphore eher als systemweite Semaphore. Wenn also ein Entwickler vergisst die schließen Semaphore, an Prozess Ausgang des Semaphore gereinigt. Vereinfacht Begriffe, bieten POSIX Semaphore ein Mechanismus für die nicht-persistente Semaphore.
Andere Tipps
Zwei große Probleme mit POSIX Shared / named Semaphore in separaten Prozessen verwendet (nicht Gewinde): POSIX Semaphore bieten keinen Mechanismus eine Warteprozess zu wecken, wenn ein anderer Prozess stirbt, während eine Semaphore Sperre hält. Dieser Mangel an Bereinigung kann Zombie Semaphore führen, den anderen oder nachfolgenden Prozess wird dazu führen, dass sie zu benutzen versucht, in einer Sackgasse. Es gibt auch keinen POSIX Weg, um die Semaphore in dem O der Auflistung, um zu versuchen, sie zu identifizieren und aufzuzuräumen. Der Abschnitt POSIX auf SysV IPC hat die IPCs und ipcrm Tools angeben aufzulisten und globale SysV IPC-Ressourcen zu manipulieren. Keine solche Werkzeuge oder auch Mechanismen für POSIX IPC angegeben, obwohl auf Linux können diese Ressourcen oft unter / shm finden. Dies bedeutet, dass ein KILL-Signal an den falschen Prozess zur falschen Zeit ein ganzes System wechselzuwirken Prozesse bis zum Neustart Deadlock kann.
Ein weiterer Nachteil ist die Verwendung von Dateisemantik für POSIX Semaphore. Die Implikation ist, dass es mehr als ein Semaphor mit dem gleichen Namen geteilt, aber in verschiedenen Zuständen. Zum Beispiel ruft ein Prozess sem_open, dann sem_unlink vor sem_close. Dieser Prozess kann noch die Semaphore verwenden wie eine geöffnete Datei Entkoppeln vor dem Schließen. Verfahren 2 Anrufe sem_open auf demselben Semaphor zwischen den sem_unlink und sem_close Anrufen von Verfahren 1, und (nach der Dokumentation) erhalten eine brandneue Semaphor mit dem gleichen Namen, aber in einem anderen Zustand als Prozess 1. Zwei Geteilt Semaphore mit dem gleichen Namen unabhängig Niederlagen den Zweck des gemeinsamen Semaphore arbeiten.
Begrenzung über macht POSIX Semaphore unbrauchbar in einem realen System ohne Garantie geteilt, dass uncatchable Signale nie gesendet werden. Beschränkung zwei durch sorgfältige Codierung gemildert werden, die Kontrolle über die gesamten Code unter der Annahme, dass eine gegebene Semaphore verwenden. Ehrlich gesagt, sein mehr als ein wenig überraschend sie es in den Standard gemacht, wie sie sind.
Ich weiß, das alt ist, sondern zum Nutzen der noch diese mit freundlicher Genehmigung von Google lesen, die Nummer 1 der Grund, warum ich finde System V Semaphore über POSIX (Systemebene) Semaphore zu verwenden ist die Fähigkeit, die Semaphore Ressource zu erwerben, in ein Weg, der vom Kernel EGAL WIE der Prozess beendet automatisch zurückgeführt wird.
Ich bin damit einverstanden, dass die mehr (Atom) Semaphoroperationen selten verwendet werden (obwohl sie während des Staging nützlich sein können), und dass das System V-Schnittstelle ist bizarr, aber es gibt einfach keine Möglichkeit, zuverlässig die gleiche Bereinigungs Semantik zu erreichen mit POSIX Semaphore.
Ich frage mich, was die Leute Design macht schlechte API wie System V Semaphore ! Uneless Sie sehr starke Gründe haben mit System V Semaphore (wie atomare Operationen mit mehreren Inkrement-Dekrement in einem einzigen Schritt) zu gehen, sollten Sie mit POSIX benannte Semaphore halten.
Der verlinkte Artikel beschreibt, was falsch ist und nicht intuitiv mit System V Semaphore.