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

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

電源を切ると消えるもの

停電したとき、ファイルは半分だけ書かれた状態で残るのか

保存を押した瞬間に停電したとします。素朴には「途中まで書けたファイル」が残りそうですが、本当に怖いのはファイルの中身ではなく、管理側のほうです。

新しいファイルを 1 つ作るとき、ディスクへの書き込みは 1 回では終わりません。中身のブロックを書き、そのブロックを使用中だと記録し、管理情報を書き、親ディレクトリの表に名前を足す。この 4 つのどこで電源が落ちるかで、残る壊れ方が変わります。

  • 名前は登録されたのに、ブロックが空き扱いのまま。次に作られたファイルが同じ場所を平気で上書きする
  • ブロックは使用中なのに、どの名前からも辿り着けない。容量だけが永久に減る

中身が半分なのは書き直せば済みますが、こちらは無関係なファイルまで巻き込みます。

やることを、やる前に書いておく

昔の UNIX は、起動時にファイルシステム全体を走査して矛盾を突き合わせていました。fsck です。正しく直りはしますが、容量に比例して時間がかかり、数 TB では数十分ディスクが使えません。

ジャーナリングはこれを二段書きで解決します。本体を触る前に、これから行う変更の一覧をディスク上のジャーナル領域へ書き、書き終えた印を付けます。そのうえで本体へ反映し、終わったらジャーナルの該当分を捨てます。

diagram (will load when visible)

停電から復帰したとき、OS はジャーナルだけを見ます。印があるものは本体への反映をやり直し、印が無い書きかけは無かったことにします。どちらに転んでも矛盾は残りません。確認する範囲がジャーナル領域だけなので、復旧は容量に関係なく数秒で終わります。

同じ問題を別の角度から解く方式もあります。書き換えるときに元の場所を上書きせず、空いている場所へ新しく書き、最後に「どこを指すか」だけを差し替える。落ちた時点で指しているのは常に古い状態か新しい状態のどちらかなので、中途半端が生まれません。APFS や ZFS の考え方です。

守られるのは整合性であって、中身ではない

ext4 の既定では、中身のブロックそのものはジャーナルに通さず、管理情報だけを通します。中身まで二重に書くと、書き込み量が丸ごと倍になるからです。

つまりジャーナリングが約束しているのは「ファイルシステムが矛盾した状態にならないこと」までで、「あなたが書いたデータが残ること」ではありません。アプリの write はページキャッシュに溜まり、数秒遅れてディスクへ向かいます。その間に落ちれば、数秒分は消えます。

c

write(fd, buf, n);
fsync(fd);   // ディスクに焼き付くまで、ここで待つ

確実に残したいなら fsync を呼び、返ってくるまで待つしかありません。データベースのコミットが 1 件ずつだと遅いのは、この待ちを毎回踏んでいるからです。だから多くの DB は、短い間に届いた複数のコミットをまとめて 1 回の fsync にする仕組みを持っています。

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

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

  • ロック「他の人触らないでね」と DB に予約する
  • ディレクトリファイルを整理するフォルダのこと。
  • キャッシュ一度取得したデータを再利用するための一時保存
  • データベースデータを構造化して保存する仕組み
  • コミット変更内容を記録するスナップショット
生田 陸人
監修生田 陸人
ゆめさくエンジニア / 現役ソフトウェアエンジニア監修者プロフィールを見る →
編集 ゆめさく編集部·公開 2026/05/27·更新 2026/08/26

関連レッスン

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

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

  • レースコンディション

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

  • ext4 / APFS / NTFS の違い

    ext4 / APFS / NTFS の違い

  • i-node とディレクトリ

    ファイルのメタデータを束ねる i-node と、名前と番号を対応づけるディレクトリの関係、ハードリンクとシンボリックリンクの違いまで実務目線で整理します。

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

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