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

仮想メモリ

変数の正体は番地

8GB の PC で、12GB 使うプログラムが動く

タスクマネージャーを開くと、起動中のアプリの使用メモリを足した合計が、積んでいる RAM を超えていることがあります。足し算が合っていないように見えますが、どれも落ちる気配はありません。

種を明かすと、プログラムが読み書きしている番地は、RAM 上の本当の番地ではありません。C でポインタを表示すると 0x7ffd3c0a1b4c のような値が出ますが、この数字が RAM のどこを指しているのかは、プログラム自身には分かりませんし、知る必要もありません。

番地は、間に 1 枚かませて配られている

プロセスが使う番地を 仮想アドレス、RAM 上の本当の番地を 物理アドレス と呼びます。CPU に載っている MMU という回路が、メモリを触るたびに前者を後者へ翻訳しています。翻訳のための表は、OS がプロセスごとに用意します。

この層が無かった頃、プログラムは物理アドレスを直に書いていました。2 つを同時に動かすには使う番地がぶつからないよう人間が割り振る必要があり、片方が暴走すればもう片方のデータを平気で壊しました。表を 1 枚はさむのは、この面倒をまとめて OS 側へ引き取るための設計です。

この 1 枚をはさんだおかげで、3 つのことが同時に成り立ちます。

  • どのプロセスも、0 番地から始まる切れ目のない広い空間を持てる。x86-64 の Linux なら、1 プロセスあたり 128TB 分の番地が配られる
  • プロセス A の 0x1000 とプロセス B の 0x1000 は、別の物理アドレスへ翻訳される。表に載っていない場所はそもそも触れないので、他人のデータを覗くことができない
  • 表の一部を「まだ RAM に置いていない」状態のままにしておける

冒頭の帳尻は 3 つ目で合っています。確保した領域を全部は使わないプログラムがほとんどなので、100MB の配列を宣言しても、実際に書き込んだ範囲にしか RAM は割り当てられません。使用メモリとして表示されている数字の多くは、配られた番地の量であって、占有している RAM の量ではないわけです。合計が搭載量を超えていても、それだけでは何もおかしくありません。

自分のプロセスの中を覗く

ターミナル

cat /proc/self/maps

プレーンテキスト

55e0f2c00000-55e0f2c21000 r-xp  /usr/bin/cat
7f9a3c000000-7f9a3c1a5000 r-xp  /usr/lib/libc.so.6
7ffd3c082000-7ffd3c0a3000 rw-p  [stack]

左の数字が仮想アドレスの範囲、r-xp がその範囲に許された読み・書き・実行です。コードが置かれた範囲には w が無いので、暴走したコードが自分自身の機械語を書き潰す事故は起きません。番地の範囲ごとに権限を持たせられるのも、間に 1 枚かませた効果です。

解説

覚え方 仮想メモリとスワップは別物です。スワップは仮想メモリの上で作れる仕掛けの 1 つで、スワップ領域を持たない機械でも仮想メモリは動いています。

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

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

  • メモリプログラムとデータを一時保持する高速領域
  • プロセス実行中のプログラムのこと。
  • 設計何をどう作るかを決める前工程
  • 配列サイズ固定の同型データの集まり
生田 陸人
監修生田 陸人
ゆめさくエンジニア / 現役ソフトウェアエンジニア監修者プロフィールを見る →
編集 ゆめさく編集部·公開 2026/05/27·更新 2026/08/26

関連レッスン

  • ページングとスワップ

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

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

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

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

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

  • ファイルシステムとは

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

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

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