IPC(プロセス間通信)とは(全体像)
IPCは、別々に動いているプロセス同士が、データを受け渡しするためのしくみのこと。プロセスはお互いのメモリを直接さわれない(分離されている)ので、通信の方法が用意されている。
身近にたとえると、別々の部屋に住む人どうしの連絡方法だ。ドアの隙間にメモを差し込む(パイプ)、共用テーブルに直接書く(共有メモリ)、ポストに投函する(メッセージキュー)、大声で叫ぶ(シグナル)、電話で離れた家とつなぐ(ソケット)——状況によって使い分ける。
押さえるのは、IPCには複数の方法があり、向き・不向き(速さなど)が違うということ。
詳しく:種類とパイプ・共有メモリの特徴だけ覚えれば戦える
ここが記事の心臓部。まず代表的なIPCを見ましょう。
主要なIPC
| 種類 | 特徴 | たとえ |
|---|---|---|
| パイプ | 親子プロセス間・単方向(シェルの「|」) | ドアの隙間にメモを差す |
| 共有メモリ | メモリ領域を共有・最速 | 共用テーブルに直接書く |
| メッセージキュー | キューに溜める・非同期 | ポストに投函する |
| シグナル | 緊急の通知(SIGKILLなど) | 大声で叫ぶ |
| ソケット | 離れた相手とも通信できる | 電話でつなぐ |
パイプは、シェルの「ls | grep」のように、あるプロセスの出力を別のプロセスの入力につなぐしくみです。ここで一番のひっかけが「パイプは双方向」という誤解。パイプは単方向で、行き帰りの両方向にしたいときは2本のパイプを使います。
共有メモリは、複数のプロセスが同じメモリ領域を共有する方法で、データをコピーしないので最速です。ただし、同時に書き込むと壊れるので、別途同期(セマフォなど)が必要になります。
ここで2つめのひっかけが「どのIPCも同じ速さ」という誤解。共有メモリが最速で、ネットワーク越しに関数を呼ぶRPCは遅いなど、方法によって速さは大きく違います。
速さのイメージ
| 速さ | IPC |
|---|---|
| 速い | 共有メモリ(同じメモリを共有) |
| ふつう | パイプ・メッセージキュー |
| 遅い | ソケット・RPC(ネットワーク越し) |
わかりやすく言い換えると
要するに、部屋の住人の連絡で覚えるとラクです。
①IPCの種類 … パイプ(メモを差す)、共有メモリ(共用テーブル)、シグナル(叫ぶ)、ソケット(電話)
②パイプは単方向 … メモは一方通行(行き帰りなら2本必要)
③速さの違い … 共有メモリが最速、RPCはネットワーク越しで遅い
つまり、「パイプは単方向」「共有メモリが最速」、この2点が試験の急所です。
試験のツボ
🔴 一番出る:IPCの種類
①パイプ(単方向)・共有メモリ(最速)・メッセージキュー(非同期)
②シグナル(緊急の通知)・ソケット(離れた相手とも通信)
🔴 次に出る:パイプは単方向
①パイプはシェルの「|」で、出力を入力につなぐ単方向のしくみ
②行き帰りの両方向にしたいときは2本のパイプを使う
🟡 押さえると安定:速さの違い
①共有メモリが最速(メモリを共有しコピーしない・要同期)
②ソケットやRPCはネットワーク越しで遅い
よくある間違い
①「パイプは双方向に通信できる」→ ✗ パイプは単方向。行き帰りの両方向にしたいときは2本のパイプを使う。
②「どのIPCも同じ速さである」→ ✗ 共有メモリが最速、ネットワーク越しのRPCは遅いなど、方法によって速さは大きく違う。
③「共有メモリは同期がいらず、そのまま同時に書き込んでよい」→ ✗ 共有メモリは同時に書き込むと壊れるので、セマフォなどの同期が必要。
試験での出題パターン
実際の問題でたしかめてみよう。
オリジナル問題1(IPCの種類)
IPC(プロセス間通信)に関する次の記述のうち、正しいものはどれか。
- IPCは別々のプロセスがデータをやり取りするしくみで、パイプや共有メモリなど複数ある
- IPCは同じプロセスの中だけで使うしくみで、別プロセスとは通信できないものとされている
- IPCは紙に印刷する装置のことで、プロセスの通信とは無関係なものだとされているものだ
- IPCはプロセスを必ず1つに減らす機能で、データのやり取りはできないものだとされている
解答は 1 ですよ。
IPCは別々のプロセスがデータをやり取りするしくみで、パイプや共有メモリなどがありますね。部屋の住人どうしの連絡方法のようなものです。
選択肢2の「同じプロセスの中だけ」、選択肢3の「印刷する装置」、選択肢4の「1つに減らす機能」はどれも誤りですよ。
| 選択肢 | 判定 | 理由 |
|---|---|---|
| 1 | ✓ | 別プロセス間のデータのやり取り |
| 2 | ✗ | 別プロセスと通信するためのしくみ |
| 3 | ✗ | 印刷する装置ではない |
| 4 | ✗ | プロセスを減らす機能ではない |
オリジナル問題2(パイプの単方向)
パイプに関する次の記述のうち、正しいものはどれか。
- パイプは1本で双方向に通信でき、行き帰りに2本を使う必要はないものだとされている
- パイプは単方向の通信で、行き帰りの両方向にしたいときは2本のパイプを使うしくみだ
- パイプは紙に印刷する手順のことで、プロセスの通信とは無関係なものだとされているのだ
- パイプはネットワーク越しの通信専用で、同じパソコンの中では使えないものだとされている
解答は 2 ですよ。
パイプは単方向の通信で、行き帰りの両方向にしたいときは2本のパイプを使いますね。シェルの「|」がその例です。
選択肢1の「1本で双方向」、選択肢3の「印刷する手順」、選択肢4の「ネットワーク専用」はどれも誤りですよ。
| 選択肢 | 判定 | 理由 |
|---|---|---|
| 1 | ✗ | パイプは単方向 |
| 2 | ✓ | 単方向・両方向なら2本 |
| 3 | ✗ | 印刷する手順ではない |
| 4 | ✗ | 同じパソコンの中でも使う |
オリジナル問題3(速さの違い)
IPCの速さに関する次の記述のうち、正しいものはどれか。
- どのIPCもまったく同じ速さで、共有メモリやRPCに性能の違いはないものだとされている
- RPCはネットワークを使わない最速の方式で、共有メモリよりも必ず速いものだとされている
- 共有メモリはメモリを共有して最速で、ネットワーク越しのRPCは遅いといった性能差がある
- IPCの速さは紙に印刷する速度で決まり、通信のしくみとは無関係なものだとされているのだ
解答は 3 ですよ。
共有メモリはメモリを共有して最速、ネットワーク越しのRPCは遅いという性能差がありますね。方法によって速さが違います。
選択肢1の「同じ速さ」、選択肢2の「RPCが最速」、選択肢4の「印刷する速度」はどれも誤りですよ。
| 選択肢 | 判定 | 理由 |
|---|---|---|
| 1 | ✗ | 方法で速さが違う |
| 2 | ✗ | RPCはネットワーク越しで遅い |
| 3 | ✓ | 共有メモリ最速・RPCは遅い |
| 4 | ✗ | 印刷の速度では決まらない |
まとめ
押さえどころ
- 🔴 IPCの種類 = パイプ(単方向)/共有メモリ(最速)/メッセージキュー(非同期)/シグナル(緊急通知)/ソケット(離れた相手とも)。
- 🔴 パイプは単方向 = シェルの「|」。行き帰りの両方向にしたいなら2本のパイプを使う。
- 🟡 速さの違い = 共有メモリが最速(要同期)、ソケットやRPCはネットワーク越しで遅い。
次に学ぶ
- 同期(ミューテックス・セマフォ) ── 共有メモリで必要になる、同時アクセスを整える同期のしくみ。
- スレッド ── プロセスの中でメモリを共有して動く、スレッドのしくみ。
執筆: SikakuQuest編集部