コース一覧
OS入門:プロセス・メモリ・ファイルシステム
プロセス間通信(IPC)

OS入門:プロセス・メモリ・ファイルシステム

OSがCPU・メモリ・ストレージをどのように管理しているかを、プロセス、スレッド、仮想メモリ、ファイルシステム、同期と並行性から体系的に学びます。アプリケーションの裏側で何が起きているかを説明できるようになります。

1
OS とは
0. コンピューターとOSの役割15分
1. OSの歴史(バッチ→マルチタスク→マルチユーザー)15分
2. カーネルとユーザーランド15分
3. システムコールの仕組み15分
4. Linux / macOS / Windows のアーキ比較15分
2
プロセスとスレッド
0. プロセスとは15分
1. スレッドとプロセスの違い15分
2. コンテキストスイッチ15分
3. スケジューラとアルゴリズム15分
4. プロセス間通信(IPC)15分
3
メモリ管理
0. メモリ階層(レジスタ→キャッシュ→RAM→ディスク)15分
1. 仮想メモリ15分
2. ページングとスワップ15分
3. mmap とメモリマップトファイル15分
4. ガベージコレクション概要15分
4
ファイルシステム
0. ファイルシステムとは15分
1. i-node とディレクトリ15分
2. ext4 / APFS / NTFS の違い15分
3. ジャーナリングと耐障害性15分
4. パーミッションと所有者15分
5
同期と並行性
0. レースコンディション15分
1. Mutex と Semaphore15分
2. デッドロック15分
3. 非同期と並行15分
4. イベントループと epoll15分

OS入門:プロセス・メモリ・ファイルシステム

01コンピューターとOSの役割
02OSの歴史(バッチ→マルチタスク→マルチユーザー)
03カーネルとユーザーランド
04システムコールの仕組み
05Linux / macOS / Windows のアーキ比較
06プロセスとは
07スレッドとプロセスの違い
08コンテキストスイッチ
09スケジューラとアルゴリズム
10プロセス間通信(IPC)
11メモリ階層(レジスタ→キャッシュ→RAM→ディスク)
12仮想メモリ
13ページングとスワップ
14mmap とメモリマップトファイル
15ガベージコレクション概要
16ファイルシステムとは
17i-node とディレクトリ
18ext4 / APFS / NTFS の違い
19ジャーナリングと耐障害性
20パーミッションと所有者
21レースコンディション
22Mutex と Semaphore
23デッドロック
24非同期と並行
25イベントループと epoll

OS入門:プロセス・メモリ・ファイルシステム

プロセス間通信(IPC)

隣の家の冷蔵庫は、開けようとしても見つからない

プロセスには壁があり、他人の変数に手が届きません。ところが実際のシステムは、複数のプロセスで役割を分けて協力するものばかりです。データベースとアプリ、ブラウザと描画担当、ログを集める常駐サービス。壁を残したまま、どうやって物を渡すのか。そのための仕組みをまとめてプロセス間通信と呼びます。

壁を壊さずに渡す方法は、大きく分けると 3 つの発想しかありません。中継地点を用意する、壁に穴を開けて共有部屋を作る、外の道路を使って届ける、です。

気づかず毎日使っている中継地点

いちばん身近なのが、シェルの縦棒です。

ターミナル

ls -l | grep ".txt" | wc -l

ここでは 3 つのプロセスが立ち上がり、左の出力が右の入力に流れています。ファイルには一度も書いていません。カーネルがメモリ上にバッファを用意し、左が書き、右が読む。片方が速すぎれば自動的に待たされ、書き手が終われば読み手にも終わりが伝わります。これがパイプです。

血縁のないプロセス同士でも、名前を付けたパイプを作れば同じことができます。試すのが早いので、ターミナルを 2 枚開いて確かめてください。

ターミナル

mkfifo /tmp/myfifo
cat /tmp/myfifo                        # 1 枚目、ここで待つ
echo "hello" > /tmp/myfifo             # 2 枚目、こう打つと 1 枚目に出る

もう 1 つ、日常的に使っている口があります。Ctrl+C です。あれはシグナルという通知を相手のプロセスへ送る操作で、kill コマンドで送っているものと同じです。ただしシグナルは合図しか運べません。「終わってほしい」は伝えられても、データは渡せません。

速さが要るなら壁に穴を、遠くへ届けるなら道路を

数百メガバイトの画像を毎秒渡したい、というときはパイプでも足りません。その場合は、両方のプロセスから見える共有の領域をカーネルに作ってもらい、そこへ直接置きます。中継地点を経由しないぶん、いちばん速い方法です。

代償もあります。共有した領域には壁が無いので、片方が書いている途中でもう片方が読むと、半端な状態を掴みます。誰がいつ触ってよいかの取り決めを、自分たちで設計しなければなりません。速さと引き換えに、事故の責任を引き受ける形です。

相手が別の機械にいるなら、ソケットを使います。同じ機械の中だけで使う専用のソケットもあり、ファイルのパスで相手を指定できます。データベースやコンテナ基盤が既定でこれを使うのは、TCP を経由するより速く、しかもネットワークに露出しないからです。

ローカルのパイプや共有領域は、毎秒ギガバイト級の帯域が出ます。プロセス間通信が遅いというのは思い込みで、遅くなるのはネットワークを跨いだときだけです。

選ぶときの順番は、速さからではありません。まず「合図だけで足りるか、データを運ぶのか」を分け、運ぶなら「相手は同じ機械にいるか」を見ます。同じ機械の中で流れが一方向なら、まずパイプで足ります。それで間に合わなくなってから、共有領域を検討してください。最初から最速の手を選ぶと、取り決めを自分で設計する重さだけが先に乗ってきます。

このレッスンに出てくる用語

意味があいまいなまま進んだ語は、ここから読み直せます。

  • プロセス実行中のプログラムのこと。
  • 変数データに名前をつけて参照する仕組み
  • データベースデータを構造化して保存する仕組み
  • ブラウザユーザーから見たWebのクライアント
  • シェルコマンドを解釈して実行するプログラム
  • カーネルOS の中核。資源管理を担う
  • メモリプログラムとデータを一時保持する高速領域
  • パイプコマンドの結果を次のコマンドに渡す
生田 陸人
監修生田 陸人
ゆめさくエンジニア / 現役ソフトウェアエンジニア監修者プロフィールを見る →
編集 ゆめさく編集部·公開 2026/05/27·更新 2026/08/26

関連レッスン

  • メモリ階層(レジスタ→キャッシュ→RAM→ディスク)

    メモリ階層(レジスタ→キャッシュ→RAM→ディスク)

  • ファイルシステムとは

    ディスク上の生のバイト列を人間が扱えるファイルとディレクトリへ組織化するファイルシステムの役割を、何を解決しているかという視点から解説します。

  • レースコンディション

    複数スレッドが同じ資源を同時に変更し実行順で結果が変わるレースコンディションの正体と、アトミック操作やロックで防ぐ具体策を実務目線で解説します。

分からないところは Tap (AI先生) に質問できます

24 時間いつでも、あなたのレベルに合わせて日本語で答えます。