←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で判断しなければならない

   ページング・デーモン

 十分な量の使用可能ページ・フレームを確保するために、多くのページングシステムが
 ページング・デーモン
 というバックグラウンド・システムを用意している

   ページング・デーモンの操作

 ・ほとんど休眠状態で、定期的に覚醒して、メモリ状態をチェックする。
 ・使用可能ページ・フレームが少なすぎると、追い出すべきページ・フレームを選択し、
  使用可能ページ・フレームのリストに登録しておく
 ・修正されていれば、ディスクへ書き込んでおく