コース一覧
OS入門:プロセス・メモリ・ファイルシステム
i-node とディレクトリ

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

i-node とディレクトリ

巨大なログを消したのに、空き容量が増えない

ディスクが埋まったので、たまっていた巨大なログを rm した。ls からは消えている。ところが df を見ると、空きが 1 バイトも増えていない。サーバー運用でよく踏む現象です。

答えは「ファイルの実体は、名前を消しただけでは死なない」からです。名前と実体が別々のものだと分かると、この挙動が素直に読めるようになります。

実体の側は、名前を持っていない

ファイルの管理情報は i-node と呼ばれる固定サイズの構造にまとまっています。中身は大きさ、所有者、パーミッション、3 種類の時刻、そして中身がどのブロックに入っているかの一覧です。

ここに ファイル名は入っていません。i-node が持つのは、そのファイルシステム内で一意な番号だけです。名前を持っているのはディレクトリの側で、ディレクトリの中身は「名前と i-node 番号の対」が並んだ表にすぎません。

ターミナル

ls -li

プレーンテキスト

67890 -rw-r--r-- 2 alice users 240 Aug 20 11:00 report.log
67890 -rw-r--r-- 2 alice users 240 Aug 20 11:00 backup.log

左端が i-node 番号です。名前は 2 つありますが番号は同じで、実体は 1 つしかありません。ln report.log backup.log で作ったこの状態をハードリンクと呼びます。ディスクを 2 倍使っているわけではありません。ln -s で作るシンボリックリンクはこれとは別物で、自分専用の i-node を 1 つ持ち、その中身として相手のパスの文字列を抱えています。

rm が減らしているのは、名前の数

ls -l の 3 列目、上の例の 2 が リンクカウント で、その i-node を指している名前の数です。rm の実際の仕事は、ディレクトリの表から 1 行消して、このカウントを 1 減らすことだけです。

ブロックが空きに戻るのは、次の 2 つが同時に成り立ったときです。

  • リンクカウントが 0 になった。つまり、どの名前からも辿り着けない
  • そのファイルを開いているプロセスが 1 つも無い

冒頭の現象は 2 つ目に引っかかっています。ログをつかんだままのプロセスが生きているので、名前が消えても実体は解放されません。lsof | grep deleted で犯人が見え、そのプロセスを再起動した瞬間に空きが戻ります。

裏を返せば、動作中のプログラムが書いているファイルを消しても、その場では壊れません。ログローテートはこの性質を使っています。

容量が余っているのに、ファイルが作れない

i-node は多くの実装で、フォーマット時に個数が決め打ちされます。ファイル 1 つにつき 1 つ必要なので、小さなファイルを大量に作ると、容量は余っているのに i-node のほうが先に尽きます。

ターミナル

df -i

IUse% が 100% なら、消すべきは大きなファイルではなく、数の多いファイルです。

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

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

  • サーバークライアント(ブラウザなど)がリクエストを送り、サーバーがレスポンスを返す。
  • パーミッションファイルへのアクセス権限
  • ロック「他の人触らないでね」と DB に予約する
  • ディレクトリファイルを整理するフォルダのこと。
  • プロセス実行中のプログラムのこと。
生田 陸人
監修生田 陸人
ゆめさくエンジニア / 現役ソフトウェアエンジニア監修者プロフィールを見る →
編集 ゆめさく編集部·公開 2026/05/27·更新 2026/08/26

関連レッスン

  • ext4 / APFS / NTFS の違い

    ext4 / APFS / NTFS の違い

  • ジャーナリングと耐障害性

    操作を書き込みログに先に記録するジャーナリングで電源断やクラッシュからデータを守る仕組みと、コピーオンライト方式との違いまで分かりやすく整理します。

  • パーミッションと所有者

    UNIX 系 OS のファイル権限を所有者・グループ・その他の三区分と読み書き実行の観点から整理し、chmod や chown、ACL の使いどころまで解説します。

  • レースコンディション

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

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

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