コース一覧
OS入門:プロセス・メモリ・ファイルシステム
メモリ階層(レジスタ→キャッシュ→RAM→ディスク)

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

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

速い置き場ほど小さい

速いメモリを 8GB 積めば済む話ではない

CPU が 1 回の足し算にかける時間は 1 ナノ秒を切ります。ところが、その足し算に使う数値を RAM から取り寄せると 100 ナノ秒ほどかかります。CPU から見ると、数値が届くまでに 100 回分の仕事ができてしまう計算です。

では RAM をもっと速い素材で作ればよいかというと、そうはいきません。速い SRAM は 1 ビットあたりのトランジスタ数が多く、密度が低くて高価です。8GB 分を SRAM で作ると、値段も発熱も現実的な範囲を超えます。安くて大容量の DRAM は遅い。ここが動かせない前提です。

全部を速くできないので、近くに置く

そこで現代のコンピューターは、速くて小さい記憶と、遅くて大きい記憶を積み重ねています。CPU のすぐ内側から順に、下へ行くほど桁違いに大きく、桁違いに遅くなります。

場所容量の目安取り寄せにかかる時間
レジスタ数十バイト1 ナノ秒未満
L1 キャッシュ数十 KB約 1 ナノ秒
L3 キャッシュ数 MB約 10 ナノ秒
RAM数 GB約 100 ナノ秒
SSD数百 GB約 100,000 ナノ秒

レジスタと SSD の間には 10 万倍以上の開きがあります。CPU はまず一番近いところを見て、無ければ 1 つ下へ問い合わせます。この「無かった」が キャッシュミス です。

なぜ、たったこれだけで間に合うのか

L1 が数十 KB しかないのに実用になるのは、プログラムのアクセスに偏りがあるからです。同じ変数がループの中で何度も読まれ、配列は端から順になめられます。前者を時間的局所性、後者を空間的局所性と呼びます。どちらも証明された法則ではなく、実測から得られた経験則です。それでも十分に当たるので、普通に書かれたプログラムなら L1 のヒット率は 90% を超えます。

キャッシュはこの偏りに賭けています。だから、偏りを壊す書き方をすると賭けが外れます。

Python

import numpy as np
a = np.zeros((4096, 4096))

for i in range(4096):
    a[i, :] += 1      # 行に沿って進む。次に触るのは隣の番地

for j in range(4096):
    a[:, j] += 1      # 列に沿って進む。1 要素ごとに 32KB 先へ飛ぶ

更新する要素数は同じですが、下の書き方は毎回離れた番地へ飛びます。CPU は 1 バイト欲しいときでも 64 バイトまとめて持ってくるので、下では持ってきた 64 バイトのうち 8 バイトだけ使って捨てることになります。上の書き方が速いのは、持ってきた 64 バイトを最後まで使い切るからです。データの並び順と、なめる順番をそろえる。それだけで速くなることがあります。

解説

現場の話 「メモリを増やしたのに速くならない」という相談はよくあります。容量が増えても CPU からの距離は変わりません。増設で速くなるのは、遅い層への追い出しが起きていた場合だけです。

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

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

  • メモリプログラムとデータを一時保持する高速領域
  • ビット2進数の1桁。0 か 1 のどちらか
  • キャッシュ一度取得したデータを再利用するための一時保存
  • 変数データに名前をつけて参照する仕組み
  • ループ繰り返し処理。矢印で戻すか専用記号で示す
  • 配列サイズ固定の同型データの集まり
  • 素数1 と自分自身でしか割り切れない自然数
生田 陸人
監修生田 陸人
ゆめさくエンジニア / 現役ソフトウェアエンジニア監修者プロフィールを見る →
編集 ゆめさく編集部·公開 2026/05/27·更新 2026/08/26

関連レッスン

  • 仮想メモリ

    物理 RAM の上に広い論理アドレス空間を被せる仮想メモリの仕組みと、プロセス間隔離やメモリ共有、スワップを成立させる役割を初学者にも分かる形で解説します。

  • ページングとスワップ

    メモリを固定サイズのページに区切って仮想と物理を対応づけるページングと、使わないページをディスクへ退避するスワップ、スラッシングの危険を解説します。

  • mmap とメモリマップトファイル

    ファイルを仮想メモリ空間に貼り付ける mmap で、I/O をポインタ操作に変える仕組みと、共有メモリや実行ファイル読込みなど現代 OS での使われ方を解説します。

  • ガベージコレクション概要

    不要になったメモリをランタイムが自動解放するガベージコレクションの仕組みを、参照カウントやマークアンドスイープなど主要アルゴリズムの違いで解説します。

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

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