ページ置き換えでFIFO方式を使うと、物理メモリのページ数を増やしたのにページフォルトが増える場合がある。この現象を何と呼ぶか。
- Aスラッシング
- Bベラディの異常
- Cコピーオンライト
仮想記憶で、物理メモリのページ枠がいっぱいのときにどのページを追い出すかを決めるページ置換アルゴリズムの動きを、参照ごとの表で示します。FIFO・LRU・OPT・Clockを切り替えて、ページフォルトの回数とヒット率を比べられます。試験でよく出る「ページフォルトは何回起きるか」という問題の答え合わせにも使えます。
お気に入りと最近使ったツールは、このブラウザ内(localStorage)にのみ保存されます。
赤はページフォルトで読み込んだ枠、緑はヒットした枠です。Clockでは、ページの右上に参照ビットを表示します。
同じ参照列で、ページ枠を1〜8個にしたときのページフォルトの回数です。下線は今の枠の数です。
FIFOで、枠を増やしたのにページフォルトが増える箇所(赤字)があります。これがビレディの逆説(Beladyの異常)です。
最初はすべての枠が空で、空きの枠があるうちは左の枠から使います(このときもページフォルトとして数えます)。OPTで、今後参照されないページが複数あるときや参照される時刻が同じときは、左の枠のページを追い出します。
ほかの入力は今の値のまま、選んだ入力だけを今の値の1/4〜4倍の範囲で変えたときの結果です。赤い点が今の値です。
仮想記憶では、プログラムのアドレス空間をページという一定の大きさに分け、必要なページだけを物理メモリのページ枠に読み込みます。参照したページがメモリにないとページフォルトが起き、OSがストレージからそのページを読み込みます。空いている枠がなければ、どれかのページを追い出して場所を空けなければなりません。どのページを追い出すかを決めるのがページ置換アルゴリズムです。ストレージからの読み込みはメモリへのアクセスより何桁も遅いので、ページフォルトの回数を減らすことが性能に直結します。
FIFOは、最も前に読み込んだページを追い出します。仕組みは簡単ですが、よく使うページでも古ければ追い出してしまいます。LRUは、最も長い間参照されていないページを追い出します。最近使ったページはまた使われやすいという局所性を利用するので、FIFOより成績がよいことが多い方式です。OPT(最適置換)は、今後最も長い間参照されないページを追い出す方式で、ページフォルトの回数が理論上最小になりますが、将来の参照を知る必要があるので実際には使えず、ほかの方式を評価する基準として使います。例の20回の参照列で枠を3つにすると、FIFOは15回、LRUは12回、OPTは9回のページフォルトになります。
ふつうはページ枠を増やすとページフォルトは減りますが、FIFOでは逆に増える場合があります。これをビレディの逆説(Beladyの異常)といいます。参照列 1 2 3 4 1 2 5 1 2 3 4 5 では、FIFOで枠が3つなら9回、4つなら10回のページフォルトが起きます。LRUやOPTは、枠がn個のときにメモリにあるページが、枠がn+1個のときにも必ずメモリにある性質(スタックアルゴリズム)を持つので、この逆説は起きません。比較の表で、FIFOの行の数が増える箇所を確かめてみてください。
LRUを正確に実装するには、参照のたびに順番を更新する必要があり、ハードウェアの負担が大きくなります。そこで実際のOSでは、ページごとの参照ビット(ページにアクセスするとハードウェアが1にする)を使ってLRUに近づけるClock方式がよく使われます。ページ枠を円形に並べて針で指し、追い出すときは、針の指すページの参照ビットが1なら0に戻して次へ進み(二度目の機会を与える)、0のページを見つけたら追い出します。最近参照されたページは追い出されにくくなるので、少ない手間でLRUに近い成績が得られます。
正解:B. 5回
順に追うと、A(ミス、[A])、B(ミス、[A,B])、A(ヒット、Aが最近)、C(ミス、最も古いBを追い出し[A,C])、B(ミス、最も古いAを追い出し[C,B])、A(ミス、最も古いCを追い出し[B,A])となり、ミスは5回です。4回とするのは、Cを入れるときにAを追い出したと誤った場合などの数え方で、LRUではヒットしたAが新しくなっている点が大切です。6回は3回目のAのヒットを見落とした数です。
正解:B. 実現できないが、他の方式のミス数の下限を示す基準になる
最適置き換え(ベラディのOPT)は、将来のアクセスの順番が分かっているとして、次に使われるのが最も先のデータを追い出す方式で、ミス数が理論上最小になります。しかし実際のハードウェアは未来のアクセスを知ることができないため実現できず、記録したアクセスの並びに当てはめて、LRUなどの方式がどれだけ最適に近いかを評価するのに使います。LRUとは追い出すデータが違うので、ミス数は一般に異なります。
このツールでは数えます。最初の読み込み(初期参照によるフォルト)も、ページがメモリにないので本来はページフォルトです。試験の問題で「最初の読み込みは含めない」などの条件があるときは、その分を差し引いてください。
LRUは過去を見て、最も長く使われていないページを追い出します。OPTは未来を見て、今後最も長く使われないページを追い出します。OPTは最小のページフォルトになりますが、将来の参照が分からないと実装できません。
はい。フルアソシアティブ方式のキャッシュで、ラインを枠、ブロックをページとみなせば、同じ計算でミスの回数を求められます。セットアソシアティブ方式では、セットごとに別々に計算します。
基本情報技術者試験や応用情報技術者試験では、参照列とページ枠の数が与えられ、FIFOやLRUでページフォルトが何回起きるか、最後にどのページが残るかを答える問題がよく出ます。表の「フォルト」の行の×の数が答えになります。