ページング(TLB・階層化)とは?メモリの住所をページ単位で変換するしくみ

公開: 更新: カテゴリ: テクノロジ系

30秒で結論

ページングとは(全体像)

ページングは、メモリを「ページ」という一定サイズ(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の役割)

📝 オリジナル問題 1 TLBの役割

TLBに関する次の記述のうち、正しいものはどれか。

  1. TLBはアドレス変換の結果を覚えておく高速なメモで、ヒットすれば一瞬で変換できる
  2. TLBはディスクの一種で、アドレス変換とはまったく無関係なものとされているものだ
  3. TLBは変換を遅くするための装置で、使うほどアクセスが遅くなるものとされているのだ
  4. TLBは紙に印刷する装置のことで、メモリの管理には使えないものとされているものだ
テクマスター
テクマスター 解答・解説

解答は 1 ですよ。

TLBはアドレス変換の結果を覚えておく高速なメモで、ヒットすれば一瞬で変換できますね。最近調べた本の場所メモのようなものです。

選択肢2の「ディスクの一種」、選択肢3の「遅くする装置」、選択肢4の「印刷する装置」はどれも誤りですよ。

選択肢判定理由
1変換結果を覚える高速なメモ
2アドレス変換に使う
3変換を速くする
4印刷する装置ではない

オリジナル問題2(TLBミスとページフォールト)

📝 オリジナル問題 2 TLBミスとページフォールトの違い

TLBミスとページフォールトに関する次の記述のうち、正しいものはどれか。

  1. TLBミスもメジャーフォールトもまったく同じ速さで、ディスクから読む点も同じとされている
  2. TLBミスはメモリ内でページテーブルを引き、メジャーフォールトはディスクから読むため遅い
  3. TLBミスはディスクから読むため遅く、メジャーフォールトはメモリ内で済むため速いとされる
  4. TLBミスもページフォールトも紙に印刷する手順で、メモリ管理とは無関係なものとされている
テクマスター
テクマスター 解答・解説

解答は 2 ですよ。

TLBミスはメモリ内でページテーブルを引き(速い)、メジャーフォールトはディスクから読むため遅いですね。別次元の現象です。

選択肢1の「同じ速さ」、選択肢3のTLBミスとメジャーフォールトが逆、選択肢4の「印刷する手順」はどれも誤りですよ。

選択肢判定理由
1速さもしくみも違う
2TLBミスは速い・メジャーは遅い
3速い遅いが逆
4印刷する手順ではない

オリジナル問題3(階層化と大ページ)

📝 オリジナル問題 3 階層化ページテーブルと大ページ

階層化ページテーブルと大ページに関する次の記述のうち、正しいものはどれか。

  1. 現代の64ビットCPUのページテーブルは必ず1階層で、段階に分けることはないとされている
  2. 大ページを使うとTLBがカバーできる範囲がせまくなり、効率は必ず下がるものとされている
  3. 階層化は表を段階に分けて使う部分だけ作り、大ページはTLBの効率を上げるしくみといえる
  4. 階層化も大ページも紙に印刷する手順のことで、メモリ管理とは無関係なものとされているのだ
テクマスター
テクマスター 解答・解説

解答は 3 ですよ。

階層化は表を段階に分けて使う部分だけ作り大ページはTLBの効率を上げるしくみですね。現代CPUは4〜5階層です。

選択肢1の「必ず1階層」、選択肢2の「効率が下がる」、選択肢4の「印刷する手順」はどれも誤りですよ。

選択肢判定理由
1現代は4〜5階層
2大ページは効率を上げる
3階層化は段階管理・大ページは効率化
4印刷する手順ではない

まとめ

押さえどころ

次に学ぶ


執筆: SikakuQuest編集部

勉強は、クエストになった。

資格の勉強を、冒険に変えるRPG学習アプリ

App Storeで見る