System VIPCとPOSIXIPC


83
  1. 違いは何ですかSystem V IPCとはPOSIX IPC
  2. なぜ2つの基準があるのですか?
  3. 使用するIPC機能を決定する方法は?

2
posixではなくsysvメッセージキューを選択することになった理由が1つありました。mtypeでメッセージを配信する可能性は、posixメッセージキューではサポートされていません。私がいたブログ..それについて
takladev

カート・ウォールによるLinux Programming Unleashed 2nd Editionというタイトルの本(382ページ)には、次のように書か れています。Linuxの改善がその問題に対処するために行われたかどうかはわかりませんが、誰かが知っている場合は教えてください。今日、私はあまりにも枯れる同様の選択肢に直面していますPosixのIPCまたはSystem VのIPCと私のアプローチは慎重に他の上の1つでの利点があるため、使用されようとしている原始的なIPCの種類を理解することです。たとえば、プロセスが突然死ぬ可能性があり、それではどうなるでしょうか。System V IPC is well known and commonly used, but the Linux implementation of it is badly broken.
eigenfield

回答:


105

どちらにも同じ基本ツール(セマフォ、共有メモリ、メッセージキュー)があります。これらのツールとは少し異なるインターフェースを提供しますが、基本的な概念は同じです。注目すべき違いの1つは、POSIXがSysVでは提供していないメッセージキューの通知機能をいくつか提供していることです。(を参照してくださいmq_notify()。)

Sys V IPCは以前から存在しており、実際的な影響がいくつかあります。

まず、POSIXIPCはあまり広く実装されていません。POSIX IPC用のPythonラッパーを作成ました。そのドキュメントには、さまざまなプラットフォームでのPOSIXIPCの実装について知っていることが記載されています

そのドキュメントにリストされているすべてのプラットフォームで、Sys V IPCは完全にAFAIKで実装されていますが、POSIXIPCは実装されていないことがわかります。

それらの相対的な年齢の2番目の意味は、POSIXIPCがSysVIPCがしばらく使用された後に設計されたことです。したがって、POSIX APIの設計者は、Sys VAPIの長所と短所から学ぶことができました。その結果、POSIX APIはIMOの方がシンプルで使いやすいので、Sys VAPIよりもお勧めします。

2つを比較するためにパフォーマンステストを実行したことは一度もないことに注意してください。古いAPI(Sys V)は、パフォーマンスを調整するためにより多くの時間があったと思いますが、それは単なる推測であり、もちろん実際のテストに代わるものではありません。

2つの標準がある理由については、POSIXは、SysV標準の改善であると考えて標準を作成しました。しかし、POSIX IPCの方が優れていることに全員が同意した場合でも、多くの多くのプログラムがSys V IPCを使用しており、それらすべてをPOSIXIPCに移植するには何年もかかります。実際には、努力する価値はないので、明日現在、すべての新しいコードがPOSIX IPCを使用していても、Sys VIPCは何年も存続します。

何をしようとしているのかをよく知らなければ、どちらを使うべきかはわかりませんが、ここにある答えは、自分で決めるのに十分な情報を提供するはずです。


2
マンページや他の記事では強調表示されない重要な違いが1つあります。つまり、sysvメッセージキューにはmtypeでメッセージを配信するという概念があります(posix msgqにはこれがありません)。場合によっては、これは重要な設計要素である可能性があり、私の経験を引用すると、それはショーストッパーであることが判明しました。私はそれについてブログを書いていました。
takladev 2018

OpenGroupのドキュメントの後、SysV IPCはIssue 2以降はSUSの一部であり、Issue 7以降は新しいインターフェイスでした。確かに1つはずっと前から存在していますが、どちらもSUSの一部であるため、どちらもPOSIXの一部です。
Hibou57

22
  1. 主な違いは、すべてのPOSIX IPCがスレッドセーフであるのに対し、ほとんどのSysVIPCはスレッドセーフではないことだと思います[ 1 ]。
  2. Unix戦争のため[ 2 ]。単一UNIX仕様(SUS) [ 3は]、POSIX別名、Unixベースのシステム上のインターフェイスを標準化するために作成されました。
  3. おそらくPOSIXが必要です。要件にのみ依存します。

10

System V IPCは古く、POSIXIPCは新しいです。ただし、いくつかの側面でいくつかの違いがあります。PosixがSystemVより優れているとは限りません。

  1. Posixのセマフォ、キュー、および共有メモリにはASCII文字列名がありますが、SystemVではこれらは整数で指定されます。

  2. System Vセマフォを使用すると、プロセスが停止した場合に自動的に解放されます(semop SEM_UNDOフラグ)。Posixにはそのようなことはありません。

  3. LinuxとFreeBSDでは、mq_openによって与えられるハンドラーは基本的にポーリング/エポール/選択/ kqueuedできるファイル記述子であるため、posixキューには大きな利点があります。


したがって、選択は、使用するIPCプリミティブのタイプによって異なるように思われます。Posixが優れているところもあれば、SystemVが優れているところもあります。プロセスが突然停止し、世界中のAPIがそのようなイベントをインターセプトできない場合、IPCプリミティブはぶら下がっていたり、それによって検出されたりします。Posixが最適であるさまざまなユースケースがあり、SystemVが問題を適切に処理する他のユースケースもあります。
eigenfield

-3
  • SystenVとPOSIXIPCは2つの異なるものですが、同じものの関連する実装です。

「UnixSystemVは、一般にSysVと略されます(通常、「System Five」と発音されることはめったにありませんが)、Unixオペレーティングシステムの最初の商用バージョンの1つです。元々はAmerican Telephone&Telegraph(AT&T)と1983年に最初にリリースされました。」

-ウィキペディア

「POSIXまたは「PortableOperatingSystem Interface [for Unix]」は、アプリケーションプログラミングインターフェイス(API)を定義するためにIEEEによって指定された関連標準のファミリの名前です。」

-ウィキペディア

  • SystmVは以前にそこにありました。POSIXは、IEEEによる標準化イニシアチブから発展しました。

  • GNU / LinuxはpartiallyPOSIXに準拠しています。どちらを使用するかは、このIPCを使用しているOSによって異なります。ほとんどのベンダーはに向かっていPOSIXます。

Unixネットワークプログラミング:RichardStevensによるInterprocessCommunicationsv。2は、これらの両方をよく調べています。

Unixネットワークプログラミング


5
質問で参照されているように、プロセス間通信については何も話しません。
マイケルライス
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.