プロセス間通信(IPC)とは
プロセス間通信(Inter-Process Communication, IPC)とは、
コンピュータ上で動作する複数の
プロセス間でデータをやり取りする仕組みです。これらの
プロセスは、同一の
コンピュータ内で実行されることもあれば、ネットワークを介して異なる
コンピュータ上で実行されることもあります。IPCは、現代の
コンピュータシステムにおいて、効率的かつ柔軟なシステム構築に不可欠な要素となっています。
IPCの目的と理由
IPCの主な目的は以下の通りです。
情報の共有: 異なるプロセス間でデータを共有し、連携した動作を実現します。
計算の高速化: 複数の
プロセスで処理を分担し、並列処理によって計算を高速化します。
モジュール性の向上: システムを独立したプロセスに分割し、各プロセスが特定の機能に集中することで、システムのモジュール性を向上させます。
利便性: 複数のアプリケーションが連携して動作することで、ユーザーに利便性の高いサービスを提供します。
特権分離: 各プロセスに異なる権限を付与することで、セキュリティを向上させます。
これらの目的を達成するために、IPCはさまざまなメカニズムや手法を提供しています。
IPCの分類
IPCは、その特性に応じて様々な観点から分類できます。
通信範囲:
ローカルIPC: 同一コンピュータ内のプロセス間通信
リモートIPC: ネットワークを介した異なる
コンピュータ間の
プロセス間通信
通信対象:
プロセス間通信: 異なる
プロセス間の通信
スレッド間通信: 同一プロセス内の異なるスレッド間の通信
アプリケーション間通信: 異なるアプリケーション間の通信
通信方法:
メッセージパッシング: メッセージを介してデータ交換を行う
共有メモリ: 複数のプロセスが共有するメモリ領域を介してデータ交換を行う
同期: プロセス間の実行タイミングを調整する
RPC (Remote Procedure Call): リモートのプロセスで手続きを呼び出す
主なIPC技法
IPCを実現するための具体的な技法は多岐にわたります。
パイプ: 無名パイプと名前付きパイプがあり、
プロセス間で順次データをやり取りします。
メッセージキュー: プロセス間でメッセージを非同期的にやり取りします。
共有メモリ: 複数の
プロセスが共有するメモリ領域を介して、高速にデータ交換を行います。
ソケット: ネットワークを介したプロセス間通信に用いられます。
RPC (Remote Procedure Call): リモートの
プロセスで手続きを呼び出すための仕組みです。
実装例
以下に、様々なプラットフォームや言語で利用可能なIPCのAPIや技術の例を挙げます。
プラットフォームに依存しないAPI
無名パイプと名前付きパイプ: UNIX系OSで一般的なIPC手法。
Common Object Request Broker Architecture (CORBA): 分散オブジェクトシステム。
Freedesktop.orgのD-Bus: Linuxデスクトップ環境でよく利用されるメッセージバス。
Distributed Computing Environment (DCE): 分散コンピューティング環境。
メッセージバス (Mbus): メッセージベースの通信。
MCAPI (Multicore Communications API): マルチコアプロセッサ向けの通信API。
Lightweight Communications and Marshalling (LCM): 軽量な通信とデータ変換。
ONC RPC: ネットワークRPC。
UNIXドメインソケット: UNIX系OSでのプロセス間通信。
XML-RPC、SOAP: XMLを用いたRPC。
-RPC: を用いたRPC。
Thrift: 高効率なRPCフレームワーク。
TIPC (TIPC): ネットワーク通信プロトコル。
Internet Communications Engine (ICE): 分散アプリケーション開発プラットフォーム。
プラットフォーム固有またはプログラミング言語固有のAPI
Apple Event: macOSにおけるプロセス間通信機構。
LINX: Enea社が提供する
Linux向けIPC。
CMUのIPC実装: CMUで開発されたIPC。
JavaのRemote Method Invocation (RMI): Javaの分散オブジェクト。
KDEのDesktop Communications Protocol (DCOP): KDEデスクトップ環境のIPC。
Libt2n: C++用IPCライブラリ。
Mach Port: MachカーネルのIPC。
ActiveX, COM, COM+, DCOM, DDE, OLE, 匿名パイプ、名前付きパイプ、Local Procedure Call, MailSlot, メッセージループ, MSRPC, .NET Remoting, Windows Communication Foundation (WCF): Microsoft WindowsにおけるIPCの様々な手法。
SPX: Novell社のプロトコル。
PHPのセッション: PHPにおけるセッション管理。
POSIX: mmap, メッセージキュー, セマフォ, 共有メモリ。
RISC OSのメッセージ: RISC OSのIPC。
Solaris Doors: SolarisのIPC。
System V: メッセージキュー、セマフォ、
共有メモリ。
Distributed Ruby: Rubyの分散システム。
DIPC (Distributed Inter-Process Communication): Linux上で System V 系IPCをネットワークにまで拡張する仕組み。
OpenBinder: Androidで使われているIPC。
Solace Systems の IPC Shared Memory Messaging: 高速な
共有メモリによるメッセージング。
QNXのPPS (Persistant Publish/Subscribe) サービス: QNXリアルタイムOSのIPC。
SIMPL (Synchronous Interprocess Messaging Project for Linux): QNX風IPCを
Linuxに実装するプロジェクト。
まとめ
プロセス間通信(IPC)は、
コンピュータシステムにおける基本的な要素であり、さまざまな目的と多様な実装方法が存在します。IPCを理解し、適切に利用することは、効率的で堅牢なシステムを構築する上で非常に重要です。システム開発者は、要件に応じて最適なIPCメカニズムを選択し、活用する必要があります。
参考資料
Stevens, Richard. UNIX Network Programming, Volume 2, Second Edition: Interprocess Communications. Prentice Hall, 1999.
U. Ramachandran, M. Solomon, M. Vernon Hardware support for interprocess communication Proceedings of the 14th annual international symposium on Computer architecture. Pittsburgh, Pennsylvania, United States. 1987.
Crovella, M. Bianchini, R. LeBlanc, T. Markatos, E. Wisniewski, R. Using communication-to-computation ratio in parallel program designand performance prediction 1–4 December 1992.
関連項目
Communicating Sequential Processes (CSP)
Data Distribution Service (DDS)
マイクロ
カーネル
外部リンク
Linux ipc(5) man page - System V IPC の解説
Windows IPC
Beej's Guide to Unix IPC
Unix Network Programming (Vol 2: Interprocess Communications) by W. Richard Stevens