プロセス間通信(IPC)
独立したプロセスは互いのメモリを直接覗けません。データや合図をやり取りする仕組みがプロセス間通信(IPC)で、パイプ・共有メモリ・ソケットなど複数の手段があります。
- 1.プロセスはメモリ空間が分離されているため、やり取りには専用の仕組み(IPC)が必要です。
- 2.代表的な手段はパイプ・共有メモリ・メッセージキュー・ソケットで、速度と用途が異なります。
- 3.最速は共有メモリ(ただし排他制御が必須)、最も汎用なのはネットワーク越しにも使えるソケットです。
なぜ専用の仕組みが要るのか
各プロセスには 独立した仮想アドレス空間 が与えられ、互いのメモリを直接読み書きできません。これはバグや不正アクセスから守るための プロセス分離 の働きです。
しかし現実のシステムは、複数のプロセスが協調して動きます。ブラウザの本体とレンダリング用の子プロセス、Web サーバとデータベースなど、別プロセス同士でデータや合図を渡す 必要が出てきます。
そこで OS は、分離を保ったまま安全に通信させる窓口として IPC(Inter-Process Communication) の仕組みを提供します。
主な手段の比較
代表的な IPC を、特徴で並べると次のようになります。
| 手段 | 仕組み | 速度 | 主な用途 |
|---|---|---|---|
| パイプ | 一方向のバイトストリーム | 速い | 親子・コマンド連結 |
| 名前付きパイプ | 名前で開く双方向パイプ | 速い | 無関係なプロセス同士 |
| 共有メモリ | 同じ物理メモリを複数で共有 | 最速 | 大量データの受け渡し |
| メッセージキュー | メッセージ単位で送受信 | 中 | 構造化された非同期通信 |
| ソケット | エンドポイント間の通信路 | 中 | ネットワーク越し・汎用 |
| シグナル | 番号だけの非同期通知 | — | 「止まれ」等の合図のみ |
選び方の軸は 同じマシン内か / ネットワーク越しか、データ量、やり取りがバイト列か構造化メッセージか の3点です。
パイプとソケット:流れるデータ
パイプ は、片方が書いた内容をもう片方が読む 一方向のバイトの流れ です。シェルの ls | grep txt は、ls の出力を grep の入力にパイプでつないでいます。親子プロセス間で手軽に使えるのが利点です。無関係なプロセス同士をつなぐには、ファイルのように名前を持つ 名前付きパイプ(FIFO) を使います。
ソケット は、より汎用的な通信路です。同一マシン内で完結する UNIX ドメインソケット と、TCP/IP でネットワーク越しに通信する ネットワークソケット があり、後者は 別マシンのプロセスとも通信できる のが決定的な強みです。Web の通信もこの上に成り立っています。
共有メモリとメッセージキュー
共有メモリ は、複数のプロセスが 同じ物理メモリ領域を自分の空間にマッピング し、そこを直接読み書きします。一度貼り付ければコピーが要らないため 最も高速 で、大量のデータ受け渡しに向きます。
ただし複数が同時に書くと壊れるため、排他制御(ロックやセマフォ)が必須 です。これを怠ると競合状態を招きます。
メッセージキュー は、送り手が メッセージ単位 で投函し、受け手が取り出す方式です。送受信のタイミングがずれてもキューが溜めてくれる 非同期 なやり取りに向き、データの区切りが明確なのも扱いやすい点です。
共有メモリは速度面で他を圧倒しますが、通信路自体には順序や排他の保証がありません。必ずセマフォやミューテックスと組み合わせ、誰がいつ書くかを設計してから使いましょう。
シグナルは番号1つを送れるだけで、任意のデータは運べません。「終了して」「設定を読み直して」といった一方向の通知に限られます。データのやり取りには別の IPC を使います。
まとめ
- プロセスはメモリが分離されているため、やり取りには IPC が必要。
- パイプ/ソケット はデータを流す通信路、共有メモリ は最速だが排他制御が必須、メッセージキュー は非同期向き。
- ネットワーク越しなら ソケット、同一マシンで大量データなら 共有メモリ が定石。
プロセスそのものの基礎は プロセスとスレッド、競合を防ぐ手段は 排他制御とデッドロック、合図の詳細は シグナル も合わせてどうぞ。
OS Article
プロセス間通信(IPC)を実務で読む
TL;DRは入口です。実際に選ぶ・使う段階では、何を解決するか、何と比較するか、導入後にどこで詰まるかまで見る必要があります。
解決すること
IPC
比較で見る軸
難易度: intermediate / カテゴリ: OS / タグ数: 4
導入後に効く点
代表的な手段はパイプ・共有メモリ・メッセージキュー・ソケットで、速度と用途が異なります。
先に潰すリスク
用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。
- 難易度
- intermediate
- カテゴリ
- OS
- タグ数
- 4
判断チェックリスト
- 自社の用途が「IPC / プロセス間通信」に近いか確認する。
- 強みである「プロセスはメモリ空間が分離されているため、やり取りには専用の仕組み(IPC)が必要です。」が本当に評価軸になるか確認する。
- 注意点の「用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。」を運用で吸収できるか確認する。
- 公開値や仕様値は、対象プラン・対象機種・対象リージョンまで確認する。
- 既存システム、ID、ネットワーク、監視、バックアップとの接続方法を先に洗い出す。
- 小さく試してから、本番移行、権限設計、障害時手順、コスト監視を決める。