IPC(アイピーシー)とは | 意味や読み方など丁寧でわかりやすい用語解説
IPC(アイピーシー)の意味や読み方など、初心者にもわかりやすいように丁寧に解説しています。
読み方
日本語表記
プロセス間通信 (プロセスかんつうしん)
英語表記
Inter-Process Communication (インタープロセスコミュニケーション)
用語解説
IPCはInter-Process Communicationの略称であり、日本語ではプロセス間通信と訳される。コンピュータ上で動作しているプログラムの実行単位である「プロセス」間で、データや情報を交換するための仕組みの総称である。現代のオペレーティングシステム(OS)では、各プロセスは互いに干渉しないように、それぞれ独立したメモリ空間を割り当てられるのが基本原則となっている。この仕組みにより、あるプロセスでエラーが発生しても他のプロセスに影響が及ばず、システム全体の安定性が保たれる。しかし、一方で、複数のプロセスが連携して一つの大きな処理を成し遂げるためには、この独立したプロセス同士が何らかの方法で通信する必要が生じる。例えば、ユーザーからのリクエストを受け付けるWebサーバープロセスが、データベースにアクセスするデータベースサーバープロセスに問い合わせを行い、その結果を受け取ってユーザーに返すといった処理が典型例である。このように、プロセス間の独立性を維持しつつ、協調動作を可能にするためにOSによって提供されるのがIPCである。
IPCには様々な手法が存在し、それぞれに特性があるため、目的や要件に応じて使い分けられる。最も単純な方法は、ファイルを利用することである。あるプロセスがファイルにデータを書き込み、別のプロセスがそのファイルを読み込むことで情報を共有する。この方法は実装が容易であるが、ディスクI/Oを伴うため処理速度が遅く、リアルタイムな通信には向かない。また、複数のプロセスが同時にファイルへ書き込もうとするとデータが破損する可能性があるため、排他制御の仕組みを別途考慮する必要がある。
より一般的に利用される手法としてパイプがある。パイプは、あるプロセスの標準出力を別のプロセスの標準入力に直接接続するような仕組みで、カーネルが管理するメモリ上のバッファを介してデータが受け渡される。親子関係にあるプロセス間で利用される「匿名パイプ」と、ファイルシステム上に特殊なファイルを作成することで無関係なプロセス間でも通信できる「名前付きパイプ」の二種類がある。データは一方向にしか流れず、永続性もないが、ファイルを利用する方法より高速である。
非同期的な通信を実現したい場合にはメッセージキューが用いられる。これは、カーネル内にメッセージを格納するためのキュー(待ち行列)を作成し、送信側プロセスがメッセージをそのキューに書き込み、受信側プロセスが自身のタイミングでキューからメッセージを読み出す方式である。送信側と受信側が同時に動作している必要がなく、互いの処理を待たずに独立して動作できる利点がある。
プロセス間で大量のデータを高速に交換する必要がある場合には、共有メモリが最も効果的な手段となる。これは、物理メモリ上の一部の領域を、複数のプロセスが自身のメモリ空間の一部であるかのように直接アクセスできるようマッピングする仕組みである。プロセス間でデータをコピーする必要がないため、他のIPC手法と比較して圧倒的に高速である。しかし、複数のプロセスが同じメモリ領域に同時に書き込みを行うとデータ競合が発生し、予期せぬ不具合を引き起こす可能性がある。そのため、共有メモリを利用する際は、セマフォなどの同期メカニズムを併用して、共有領域へのアクセスを一度に一つのプロセスに限定する排他制御を行うのが一般的である。セマフォは、共有リソースへのアクセス権を管理するためのカウンターのようなものであり、プロセスはリソースを使用する前にセマフォを取得し、使用後に解放することで安全なアクセスを保証する。
最後に、ソケットはIPCの中でも特に汎用性の高い仕組みである。ソケットは、同一コンピュータ上のプロセス間通信だけでなく、ネットワークを介して異なるコンピュータ上で動作するプロセス間の通信も可能にする。IPアドレスとポート番号の組み合わせで通信相手を特定し、TCPやUDPといったプロトコルを用いてデータの送受信を行う。Webサーバーやデータベースサーバーなど、ネットワークを介した分散システムは、このソケット通信を基盤として構築されている。
これらのIPC手法は、それぞれ通信速度、実装の複雑さ、同期・非同期の特性、通信可能な範囲などが異なる。したがって、システムエンジニアは、構築するシステムの要件を深く理解し、性能、信頼性、保守性などを総合的に評価した上で、最も適切なIPC手法を選択することが求められる。