ページングとは(全体像)
ページングは、メモリを「ページ」という一定サイズ(4KBなど)の区画に区切り、プログラムの住所を実際のメモリの住所へ変換するしくみのこと。この変換表をページテーブルという。
身近にたとえると、図書館の検索システムだ。ページテーブルは「全部の本の場所が載ったカタログ」。本を探すたびにカタログを引くのは手間なので、最近調べた本の場所をメモしておくと速い。このメモがTLBだ。
押さえるのは、TLBは「変換結果を覚えておく超高速のメモ」だということ。これがあると、住所の変換がぐっと速くなる。
詳しく:TLBとページフォールトの区別だけ覚えれば戦える
ここが記事の心臓部。まずTLBの働きを見ましょう。
TLB(変換を速くするメモ)
| 状態 | 何が起きるか | 速さ |
|---|---|---|
| TLBヒット | メモに住所があり、すぐ変換できる | とても速い |
| TLBミス | メモになく、ページテーブル(カタログ)を引く | 少し遅い(メモリ内で解決) |
TLBに目当ての変換があれば(ヒット)一瞬で済みます。なければ(ミス)ページテーブルを引きますが、これはメモリの中で解決するので、それほど大きな遅れではありません。
ここで一番のひっかけが、「TLBミス=ページフォールト」という誤解です。2つはまったく別物です。
TLBミスとページフォールトの違い
| 用語 | 何が起きているか | 速さ |
|---|---|---|
| TLBミス | 変換のメモになく、ページテーブルを引く(メモリ内) | 速い |
| ページフォールト(マイナー) | ページはメモリ内にあるが設定がまだ | 速い |
| ページフォールト(メジャー) | ページがメモリになく、ディスクから読む | とても遅い |
TLBミスはメモリの中で解決するので速い。一方、ページフォールトは「目当てのページが用意できていない」状態で、とくにメジャーフォールト(ディスクから読み込む)は非常に遅い(メモリの数百〜千倍)。混同しないことが大切です。
最後に、階層化ページテーブルと大ページ。64ビットのコンピュータが扱える住所はとても広く、変換表を1枚で持つと巨大になりすぎます。そこで表を段階に分け、使う部分だけ作るのが階層化(現代のCPUは4〜5段)です。また、ページを大きく(2MBや1GB)すると、TLBのメモ1つでカバーできる範囲が広がり、変換が効率的になります(大ページ/HugePage)。
わかりやすく言い換えると
要するに、図書館のたとえで覚えるとラクです。
①TLB … 最近調べた本の場所メモ(あれば一瞬・TLBヒット/なければカタログを引く・TLBミス)
②TLBミスとページフォールト … TLBミスはカタログを引く(館内で済む・速い)、メジャーフォールトは倉庫まで本を取りに行く(とても遅い)
③階層化と大ページ … カタログを分野→ジャンル→個別と段階管理(階層化)、まとめ棚で効率化(大ページ)
つまり、「TLBは変換のメモ」「TLBミスは速い・メジャーフォールトは遅い」、この2点が試験の急所です。
試験のツボ
🔴 一番出る:TLBは変換を速くするキャッシュ
①TLB = アドレス変換の結果を覚えておく超高速のメモ
②ヒットなら一瞬、ミスならページテーブルを引く(メモリ内で解決)
🔴 次に出る:TLBミスとページフォールトの違い
①TLBミス = メモリ内でページテーブルを引く(速い)
②ページフォールト = ページが用意できていない。メジャー(ディスクから)はとても遅い
🟡 押さえると安定:階層化と大ページ
①階層化ページテーブル = 表を段階に分け、使う部分だけ作る(現代は4〜5段)
②大ページ(2MB/1GB) = TLBの効率を上げる
よくある間違い
①「TLBミスとページフォールトは同じもの」→ ✗ TLBミスはメモリ内でページテーブルを引く(速い)。ページフォールトはページが用意できていない状態で、メジャーフォールトはディスクから読むため非常に遅い。
②「現代のページテーブルは1階層である」→ ✗ 64ビットの現代CPUは4〜5階層。1階層は昔の32ビット時代の話。
③「大ページを使うとTLBの効率が下がる」→ ✗ 大ページはメモ1つでカバーできる範囲が広がり、TLBの効率は上がる。
試験での出題パターン
実際の問題でたしかめてみよう。
オリジナル問題1(TLBの役割)
TLBに関する次の記述のうち、正しいものはどれか。
- TLBはアドレス変換の結果を覚えておく高速なメモで、ヒットすれば一瞬で変換できる
- TLBはディスクの一種で、アドレス変換とはまったく無関係なものとされているものだ
- TLBは変換を遅くするための装置で、使うほどアクセスが遅くなるものとされているのだ
- TLBは紙に印刷する装置のことで、メモリの管理には使えないものとされているものだ
解答は 1 ですよ。
TLBはアドレス変換の結果を覚えておく高速なメモで、ヒットすれば一瞬で変換できますね。最近調べた本の場所メモのようなものです。
選択肢2の「ディスクの一種」、選択肢3の「遅くする装置」、選択肢4の「印刷する装置」はどれも誤りですよ。
| 選択肢 | 判定 | 理由 |
|---|---|---|
| 1 | ✓ | 変換結果を覚える高速なメモ |
| 2 | ✗ | アドレス変換に使う |
| 3 | ✗ | 変換を速くする |
| 4 | ✗ | 印刷する装置ではない |
オリジナル問題2(TLBミスとページフォールト)
TLBミスとページフォールトに関する次の記述のうち、正しいものはどれか。
- TLBミスもメジャーフォールトもまったく同じ速さで、ディスクから読む点も同じとされている
- TLBミスはメモリ内でページテーブルを引き、メジャーフォールトはディスクから読むため遅い
- TLBミスはディスクから読むため遅く、メジャーフォールトはメモリ内で済むため速いとされる
- TLBミスもページフォールトも紙に印刷する手順で、メモリ管理とは無関係なものとされている
解答は 2 ですよ。
TLBミスはメモリ内でページテーブルを引き(速い)、メジャーフォールトはディスクから読むため遅いですね。別次元の現象です。
選択肢1の「同じ速さ」、選択肢3のTLBミスとメジャーフォールトが逆、選択肢4の「印刷する手順」はどれも誤りですよ。
| 選択肢 | 判定 | 理由 |
|---|---|---|
| 1 | ✗ | 速さもしくみも違う |
| 2 | ✓ | TLBミスは速い・メジャーは遅い |
| 3 | ✗ | 速い遅いが逆 |
| 4 | ✗ | 印刷する手順ではない |
オリジナル問題3(階層化と大ページ)
階層化ページテーブルと大ページに関する次の記述のうち、正しいものはどれか。
- 現代の64ビットCPUのページテーブルは必ず1階層で、段階に分けることはないとされている
- 大ページを使うとTLBがカバーできる範囲がせまくなり、効率は必ず下がるものとされている
- 階層化は表を段階に分けて使う部分だけ作り、大ページはTLBの効率を上げるしくみといえる
- 階層化も大ページも紙に印刷する手順のことで、メモリ管理とは無関係なものとされているのだ
解答は 3 ですよ。
階層化は表を段階に分けて使う部分だけ作り、大ページはTLBの効率を上げるしくみですね。現代CPUは4〜5階層です。
選択肢1の「必ず1階層」、選択肢2の「効率が下がる」、選択肢4の「印刷する手順」はどれも誤りですよ。
| 選択肢 | 判定 | 理由 |
|---|---|---|
| 1 | ✗ | 現代は4〜5階層 |
| 2 | ✗ | 大ページは効率を上げる |
| 3 | ✓ | 階層化は段階管理・大ページは効率化 |
| 4 | ✗ | 印刷する手順ではない |
まとめ
押さえどころ
- 🔴 TLB = アドレス変換の結果を覚えておく超高速のメモ。ヒットなら一瞬、ミスならページテーブルを引く。
- 🔴 TLBミスとページフォールト = TLBミスはメモリ内で速い、メジャーフォールトはディスクから読むため非常に遅い。
- 🟡 階層化と大ページ = 階層化は表を段階に分け使う部分だけ作る(4〜5段)、大ページ(2MB/1GB)はTLBの効率を上げる。
次に学ぶ
- OS(オペレーティングシステム) ── メモリ管理を担うカーネルを含む、OSの構成と役割。
- 記憶階層 ── メモリとディスクの速さの差を、ピラミッドで整理する考え方。
執筆: SikakuQuest編集部