←講義のツボメニューへ
←OS論シラバスへ メモリ
【2001.11.12,11.16】【第13、14回】
低使用頻度(NFU)ページ置換えアルゴリズム
・各ページに対して
→ソフトウェア・カウンタを用意(初期値0)
・クロック割り込みごとに、OSはメモリ内全ページを調べる
各ページで参照ビット値(0または1)をカウンタに加算。
←各ページが、どのくらいの頻度で参照されたかを表す
ページフォールト時には、最小のカウンタのページが置換される
NFUに修正を加えることでLRUに近づける
エイジング
NFUへの修正
・参照ビットを加算する前に、カウンタを右に1ビットシフトする
・参照ビットを最右端ではなく、最左端ビットに加算する
ページフォールト時には、カウンタ値の最も小さいページを削除する
エイジングとLRUの違い
・クッロク間隔内での「古い/新しい」の区別ができない
・エイジングでは、カウンタのビット数は有限であるため、一定以上の過去は区別できない
デマンド・ページング(demand parging)
メモリ内にまったくページが無い状態で開始する。
→CPUが最初の命令を実行しようとすると、ページフォールト
→OSが、最初の命令のあるページをロードする
→その後、変数やスタックをアクセスしようとして、
ページフォールトが引き続き発生しては、ページがロードされる
→しばらくして、必要なページをほとんど取り込んで、
ページフォールとが比較的少ない状態で実行し続ける
「必要(demand)な時に、ページをロードする」
というページングの最も純粋な形式
ワーキングセット(working set)
プロセスが現在使用しているページの集合
ワーキングセットがメモリ内に置ければ、ページフォールトを発生しないで実行できる。
数命令ごとにページフォールトを引き起こすプログラム
→「スラッシング(thrashing)状態にある」という
ウォーキング・セット・モデル
各プロセスのワーキングセット記録しておき、プロセスを実行する前に、メモリにあるか確かめる
プロセスの実行前にページをロードする。
→プリページング(preparging)とも呼ばれる
広域(global)割り当て
一般に広域アルゴリズムのほうが動作に優れる。
(特ににワーキングセットの大きさが変化する場合)
各プロセスに割り当てられるページ・フレーム数を毎回決定しなければならない。
→プロセスにページ・フレームを割り当てるアルゴリズムを用意する
命令バックアップ
CPUの設計者がマシンごとに解決策を提供している場合がある。
PDP−11/45:各命令の実行直前に、あるレジスタにプログラム・カウンターをコピーする
Motorola 68010:マイクロコードが内部状態情報をスタックにダンプする
VAX:マイクロコードで、フォールトを起こした命令実行直前までマシンの状態を戻す
現行RISCマシン:フォールト後の複雑な状態のままなので、OSで判断しなければならない
ページング・デーモン
十分な量の使用可能ページ・フレームを確保するために、多くのページングシステムが
ページング・デーモン
というバックグラウンド・システムを用意している
ページング・デーモンの操作
・ほとんど休眠状態で、定期的に覚醒して、メモリ状態をチェックする。
・使用可能ページ・フレームが少なすぎると、追い出すべきページ・フレームを選択し、
使用可能ページ・フレームのリストに登録しておく
・修正されていれば、ディスクへ書き込んでおく