FE EXAM

デマンドページング(要求時ページング)

ページを最初にまとめて読まず、実際に必要になった時点で読み込む方式。

INTERACTIVE VISUALIZATION
要求中
読込中
ロード済
フェーズ
start
ロード済ページ
0/6
ページフォールト累計
0
シナリオ
ステップ1 / 5
STEP 1/5プログラム開始(ページはまだ主記憶に無い)プログラムを起動した直後の状態です。デマンドページングでは、起動時にプログラム全体(ここでは 6 ページ)を主記憶(=メインメモリ)へ読み込みません。各ページ(=プログラムを一定サイズに区切った断片)は、まだ補助記憶(=ディスク)にあるだけです。
補助記憶(プログラムの全ページ)P0P1P2P3P4P5主記憶(必要になったページだけ)空き空き空き空き空き空き
1ページ分の流れ
① ページにアクセス → ② 主記憶に無い(ページフォールト
→ ③ そのページだけを補助記憶から読み込む → ④ 処理を続行
※ 一度も使われないページは読み込まれない
解説

📌
デマンドページングとは

補助記憶P0P1P2P3主記憶P2必要な分だけ

デマンドページング(要求時ページング)とは、プログラム開始時に全ページを読み込まず、実際にアクセス(要求)された時点で初めてそのページを補助記憶から主記憶へ読み込む方式のことです。「demand(要求)」があってから運ぶ、という名前です。

身近な例で考えると、分厚い参考書のうち、今読むページだけをコピーして机に置くやり方に似ています。本全体(=補助記憶のページ)はそのまま棚に残し、実際に必要になったページだけを手元(=主記憶)に持ってくるイメージです。

上のツールで▶ボタンを押すと、起動直後は主記憶にページが無く、アクセスされたページだけが順次ロードされる様子を確認できます。

⚙️
仕組み

アクセスページフォールト1枚ロード続行

デマンドページングの動きは、ページフォールトを契機にした読み込みを繰り返すだけです。1ページ分の流れは次のとおりです。

① 起動時:主記憶にはページをほぼ載せない
② アクセス:プログラムがあるページを使おうとする
③ ページフォールト:主記憶に無いので不在の割り込みが起きる
④ ロード:そのページだけを補助記憶から読み込む
⑤ 続行:読み込んだ後、処理を再開する

ここで大事なのは、一度も使われないページは最後まで読み込まれないという点です。上のツールでも、未使用のページは「空き」のまま残ります。

利点

全部読む方式起動が遅い・メモリ大デマンド方式起動が速い・メモリ小

デマンドページングの利点は、「必要な分だけ運ぶ」ことから生まれる無駄のなさです。主な利点は次のとおりです。

起動が速い:起動時に最初に使うページだけ読めばよいので、全部読み込むより速く動き出せる
主記憶を節約できる:実際に使うページしか主記憶を占有しない
無駄なロードを避ける:一度も使わないページは読み込まないので、ディスクの読み込みが減る

対照的な方式にプリページング(先読み)があります。これは「次に使いそうなページをまとめて先に読んでおく」やり方で、ページフォールトの回数を減らせる反面、予想が外れると使わないページまで読んでしまいます。デマンドページングは「使うと分かってから読む」点でこれと対照的です。

💡
なぜ実メモリより大きく使えるか

補助記憶全6ページ必要分だけ主記憶2ページ分の枠小さくても動く

結論: デマンドページングを使うと、プログラム全体のサイズが主記憶(=物理的なメモリ)より大きくても動かせます。これを仮想記憶(バーチャルメモリ)と呼びます。

なぜそれが可能かというと、プログラムは「全ページを同時に使うわけではなく、そのとき実行している一部分だけを使う」からです。つまり次の流れです。
・主記憶には今使っているページだけを置く
・残りのページは補助記憶(SSDやHDDなど)に置いたまま
・別のページが必要になったら、古いページと入れ替えて読み込む

身近な例で言うと、小さな机(=主記憶)でも、必要な本を棚(=補助記憶)から入れ替えながら使えば、棚の本全部を読み終えられるのと同じです。机が小さくても本全体の情報にアクセスできるのは、一度に全部広げないからです。この仕組みのおかげで、OSは「メモリが実際より広い」かのようにプログラムに見せることができます。

🔄
ページフォールトとページ置換の関係

アクセス要求発生フォールト主記憶に無い空きありそのまま読込枠が満杯ページ置換が必要ロード完了処理を再開空きの有無でルートが変わる

ページフォールトが起きたとき、必ずページ置換(=主記憶上の古いページを追い出して新しいページを入れること)が起きるわけではありません。主記憶に空きフレームがあるかどうかで動きが変わります。

空きフレームがある場合:そのままそのページを読み込んで枠に置けばよい
枠が全部埋まっている場合:どれか1枚を追い出してから読み込む(これがページ置換)

どのページを追い出すかを決めるルールがページ置換アルゴリズム(=追い出すページの選び方のルール)です。代表例が次のページで学ぶLRU(最も長く使われていないページを追い出す)FIFO(最初に読み込んだページから順に追い出す)です。追い出し方が下手だと、すぐまた同じページが必要になってフォールトが増え、処理が遅くなります。

練習問題

🎯
基本情報技術者 練習問題

Q1.デマンドページング(要求時ページング)の説明として最も適切なものはどれか。
A.プログラム開始時に全ページをまとめて主記憶へ読み込む方式
B.実際にアクセスされた時点で初めてそのページを主記憶へ読み込む方式
C.プロセス全体をまるごと補助記憶へ退避する仕組み
D.主記憶を固定長の区画に区切って割り当てる方式
Q2.デマンドページングで、アクセスしたページが主記憶に無いときに起こることはどれか。
A.プログラムが強制終了する
B.ページフォールトが起き、そのページが補助記憶から読み込まれる
C.全ページが一度に読み込まれる
D.CPUが停止する
Q3.デマンドページングの利点として適切でないものはどれか。
A.必要な分だけ読むので起動が速い
B.使わないページを読み込まないので主記憶を節約できる
C.無駄なロードを避けられる
D.ページフォールトが一切発生しなくなる

関連コンテンツ