System V IPC gegen POSIX IPC

83
  1. Was sind die Unterschiede zwischen System V IPCund POSIX IPC?
  2. Warum haben wir zwei Standards?
  3. Wie kann man entscheiden, welche IPC-Funktionen verwendet werden sollen?
Meghasyam
quelle
2
Es gab einen Grund, der dazu führte, dass ich sysv-Nachrichtenwarteschlangen anstelle von posix auswählte. Die Möglichkeit, Nachrichten nach mtype zuzustellen, wird in der posix-Nachrichtenwarteschlange nicht unterstützt. Ich hatte gebloggt zu erfahren ..
takladev
In dem Buch mit dem Titel Linux Programming Unleashed 2nd Edition von Kurt Wall , Seite 382, ​​heißt es: System V IPC is well known and commonly used, but the Linux implementation of it is badly broken. Ich weiß nicht, ob Linux-Verbesserungen vorgenommen wurden, um dieses Problem zu beheben. Wenn jemand weiß, sagen Sie es bitte. Heute stehe ich vor einer ähnlichen Wahl mit Posix IPC oder System V IPC und mein Ansatz ist es, sorgfältig zu verstehen, welche Art von IPC-Grundelement verwendet wird, da es Vorteile gegenüber den anderen gibt. Zum Beispiel kann ein Prozess plötzlich sterben und was dann?
Eigenfeld

Antworten:

105

Beide haben dieselben grundlegenden Tools - Semaphoren, gemeinsam genutzten Speicher und Nachrichtenwarteschlangen. Sie bieten eine etwas andere Schnittstelle zu diesen Tools, aber die Grundkonzepte sind dieselben. Ein bemerkenswerter Unterschied besteht darin, dass POSIX einige Benachrichtigungsfunktionen für Nachrichtenwarteschlangen bietet, die Sys V nicht bietet. (Siehe mq_notify().)

Sys V IPC gibt es schon länger, was einige praktische Auswirkungen hat -

Erstens ist POSIX IPC weniger weit verbreitet. Ich habe einen Python-Wrapper für POSIX IPC geschrieben und in seiner Dokumentation ist aufgeführt, was ich über POSIX IPC-Implementierungen auf verschiedenen Plattformen weiß .

Auf allen in dieser Dokumentation aufgeführten Plattformen ist Sys V IPC AFAIK vollständig implementiert, während dies bei POSIX IPC nicht der Fall ist.

Die zweite Implikation ihres relativen Alters ist, dass POSIX IPC entwickelt wurde, nachdem Sys V IPC für eine Weile verwendet wurde. Daher konnten die Entwickler der POSIX-API aus den Stärken und Schwächen der Sys V-API lernen. Infolgedessen ist die Verwendung der IMO für die POSIX-API einfacher und einfacher, und ich empfehle sie gegenüber der Sys V-API.

Ich sollte beachten, dass ich nie Leistungstests durchgeführt habe, um die beiden zu vergleichen. Ich würde denken, dass die ältere API (Sys V) mehr Zeit gehabt hätte, um die Leistung zu optimieren, aber das ist nur Spekulation, die natürlich keinen Ersatz für reale Tests darstellt.

Warum gibt es zwei Standards? POSIX hat seinen Standard erstellt, weil sie dachten, dies sei eine Verbesserung des Sys V-Standards. Aber wenn sich alle einig wären, dass POSIX IPC besser ist, verwenden viele, viele Programme immer noch Sys V IPC und es würde Jahre dauern, sie alle auf POSIX IPC zu portieren. In der Praxis würde sich die Mühe nicht lohnen. Selbst wenn ab morgen alle neuen Codes POSIX IPC verwenden würden, würde Sys V IPC viele Jahre bestehen bleiben.

Wir können Ihnen nicht sagen, welche Sie verwenden sollen, ohne viel mehr darüber zu wissen, was Sie vorhaben, aber die Antworten, die Sie hier haben, sollten Ihnen genügend Informationen geben, um selbst zu entscheiden.

Philip Semanchuk
quelle
2
Es gibt einen wichtigen Unterschied, den Manpages und andere Artikel nicht hervorheben, dh Sysv-Nachrichtenwarteschlangen haben den Gedanken, Nachrichten nach mtype zu übermitteln (Posix msgq fehlt dies). In einigen Fällen könnte dies ein wichtiges Gestaltungselement sein, und um meine Erfahrung zu zitieren, stellte sich heraus, dass es sich um einen Show-Stopper handelte. Ich hatte darüber gebloggt .
Takladev
Nach der Dokumentation von OpenGroup war SysV IPC seit Ausgabe 2 Teil der SUS und seit Ausgabe 7 die neue Schnittstelle. Eine ist zwar schon länger vorhanden, aber beide sind Teil von SUS, sodass beide Teil von POSIX sind.
Hibou57
22
  1. Ich glaube, der Hauptunterschied besteht darin, dass alle POSIX-IPCs threadsicher sind, während die meisten SysV-IPCs NICHT [ 1 ] sind.
  2. Wegen Unix-Kriegen [ 2 ]. Die Single UNIX-Spezifikation (SUS) [ 3 ], auch bekannt als POSIX, wurde erstellt, um Schnittstellen auf Unix-basierten Systemen zu standardisieren.
  3. Sie möchten wahrscheinlich POSIX. Hängt ausschließlich von Ihren Anforderungen ab.
jweyrich
quelle
10

System V IPC ist älter und POSIX IPC ist neuer. Bei einigen Aspekten gibt es jedoch einige Unterschiede. Nicht immer ist Posix besser als System V.

  1. Die Semaphoren, Warteschlangen und der gemeinsam genutzte Speicher für Posix haben Ascii-Zeichenfolgennamen, während diese unter System V mit einer Ganzzahl angegeben werden.

  2. Die System V-Semaphore können automatisch freigegeben werden, wenn der Prozess stirbt (semop SEM_UNDO-Flag). Für Posix gibt es so etwas nicht.

  3. Unter Linux und FreeBSD gibt es einen großen Vorteil von Posix-Warteschlangen, da der von mq_open bereitgestellte Handler im Grunde genommen ein Dateideskriptor ist, der abgefragt / epolliert / ausgewählt / in die Warteschlange gestellt werden kann.

Madars Vi
quelle
Es scheint daher, dass die Wahl von der Art des IPC-Grundelements abhängt, das verwendet werden soll. Es gibt einige, bei denen Posix großartig ist, und andere, bei denen System V großartig ist. Wenn ein Prozess abrupt stirbt und keine API auf der Welt ein solches Ereignis abfangen kann, würden die IPC-Grundelemente baumeln oder dadurch erkannt werden. Es gibt verschiedene Anwendungsfälle, in denen Posix am besten ist, und es gibt andere Anwendungsfälle, in denen System V das Problem gut behandelt.
Eigenfeld
-4
  • Systen V und POSIX IPC sind zwei verschiedene, aber verwandte Implementierungen derselben Sache.

"Unix System V, allgemein als SysV abgekürzt (und normalerweise als" System Five "ausgesprochen - obwohl es selten geschrieben wird), ist eine der ersten kommerziellen Versionen des Unix-Betriebssystems. Es wurde ursprünglich von American Telephone & Telegraph (AT & T) und entwickelt erstmals 1983 veröffentlicht. "

-Wikipedia

"POSIX oder" Portable Operating System Interface [für Unix] "ist der Name einer Familie verwandter Standards, die vom IEEE zur Definition der Application Programming Interface (API) festgelegt wurden."

-Wikipedia

  • System V war früher da. POSIX ist aus der Standardisierungsinitiative von IEEE hervorgegangen.

  • GNU / Linux ist partiallymit POSIX kompatibel. Welches zu verwenden ist, hängt davon ab, welches Betriebssystem Sie diesen IPC verwenden. Die meisten Anbieter bewegen sich in Richtung POSIX.

Unix Network Programming: Interprocess Communications v. 2 von Richard Stevens gibt einen guten Einblick in beide.

Unix-Netzwerkprogrammierung

Jestin Joy
quelle
5
Sie diskutieren nichts über Interprozesskommunikation, wie in den Fragen angegeben.
Michael Rice