コース一覧
OS入門:プロセス・メモリ・ファイルシステム
スレッドとプロセスの違い

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入門:プロセス・メモリ・ファイルシステム

スレッドとプロセスの違い

別の家に住むと、砂糖を借りるのに玄関から回ることになる

プロセスの壁は安全を作りますが、代償もあります。画像を 4 分割して 4 プロセスで処理し、結果を 1 枚に戻したいとき、隣のプロセスが作った配列を直接読むことはできません。いったん外に出す形式に直して送り、受け取った側で組み立て直す必要があります。壁が厚いほど、協力するための手間が増えます。

家を分けずに済ませたい。同じ家の中に、別々に動く住人を何人か置けないか。それがスレッドです。

同じ家の別の部屋なら、棚に置くだけで渡る

スレッドは 1 つのプロセスの中に複数立ちます。同居人なので、家具は共有です。コードもヒープも同じものを見ていて、片方が書いた値をもう片方がそのまま読めます。渡すのに変換も送信も要らず、変数に代入するだけで済みます。

別々に持つのは、自分がいま何行目を実行しているかという印と、自分専用のスタックだけです。個人のノートは別、置いてある家具は共有、というわけです。

プロセススレッド
住まい1 軒ずつ別同じ家の別の部屋
データの受け渡しいったん外へ出して送る同じ変数を読み書きするだけ
増やすときの重さ家を 1 軒建てる部屋を 1 つ増やす
切り替えの重さ住所ごと入れ替わる印とノートだけ差し替わる
1 つ落ちたとき他の家は無事家ごと倒れる

切り替えが軽いのは、スレッドの持ち物が少ないからです。同じ家に住んでいる以上、住所の対応表を差し替える必要がありません。次の住人に代わるとき、持ち替えるのは印とノートだけで済みます。

共有が速いぶん、壊れ方も速い

同じ棚に 2 人が同時に手を伸ばせば事故が起きます。counter += 1 は、読み出して、1 足して、書き戻す 3 手です。読み出した直後にもう 1 人が割り込むと、2 人が同じ値を読んで同じ値を書き戻し、増えたはずの 1 が消えます。

Python

counter = 0

def worker():
    global counter
    for _ in range(100_000):
        counter += 1   # 4 人で回すと 400000 にならない

厄介なのは、いつも壊れるわけではないことです。タイミングが噛み合ったときだけ、しかも動かすたびに違う結果で壊れます。プロセスなら壁が守ってくれた事故が、同居した瞬間に自分の責任になります。

だからブラウザはタブごとにプロセスを分けます。片方が落ちても巻き込まれず、悪いページが隣のタブのデータに触れないためです。速さが欲しいなら同居、事故を隔離したいなら別の家。この選択が設計の入口になります。

判断の目安ははっきりしています。ファイルのダウンロードやデータベースへの問い合わせのように、大半が待ち時間で埋まる仕事なら同居が有利です。待っている間に別の住人が働けるので、待ち時間がそのまま重なって消えます。画面の操作を受け付けながら裏で集計する、という作りも同じ理由でスレッド向きです。逆に、他人のコードを動かす場所や、1 か所のバグで全体を止めたくない場所は、素直に家を分けます。

なお CPython には 1 プロセス内で同時に 1 スレッドしか Python のコードを実行させない錠前があり、計算を速くしたい用途ではスレッドが効きません。その場合は素直にプロセスを分けます。

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

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

  • プロセス実行中のプログラムのこと。
  • 処理計算や代入を表す長方形
  • 配列サイズ固定の同型データの集まり
  • スレッド1 つの質問に紐づく返信の集まり
  • ヒープ親が子より常に大きい(最大ヒープ)または小さい(最小ヒープ)木構造。
  • 変数データに名前をつけて参照する仕組み
  • スタック後入れ先出し(LIFO)のデータ構造
  • ブラウザユーザーから見たWebのクライアント
生田 陸人
監修生田 陸人
ゆめさくエンジニア / 現役ソフトウェアエンジニア監修者プロフィールを見る →
編集 ゆめさく編集部·公開 2026/05/27·更新 2026/08/26

関連レッスン

  • コンテキストスイッチ

    CPU が実行中のプロセスを保存して別のものへ切替えるコンテキストスイッチの仕組みと、頻発がシステム性能を蝕む理由を、現場で役立つ形で整理します。

  • スケジューラとアルゴリズム

    次に走らせるプロセスを選ぶスケジューラの役割と、ラウンドロビンや優先度などの代表アルゴリズム、Linux の CFS や EEVDF までを解説します。

  • プロセス間通信(IPC)

    別々のプロセスがデータをやり取りするプロセス間通信を、パイプ・シグナル・共有メモリ・ソケット・メッセージキューの五種類の特徴と使い分けで解説します。

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

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

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

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