回答:
この例はあなたのすべての疑いを明確にすると思います。
例:
スタートページの参照シーケンスでメインメモリが空であると仮定します。
3 2 3 0 8 4 2 5 0 9 8 3 2
フレームごとに1つの参照ビット(「使用済み」ビットと呼ばれます)
PU 3 PU 2 PU 3 PU 0 PU 8 PU 4 + --- + --- + + --- + --- + + --- + --- + + --- + --- + + --- + --- + + --- + --- + | | 0 | * | 3 | 1 | | 3 | 1 | | 3 | 1 | | 3 | 1 | | 3 | 1 | + --- + --- + + --- + --- + + --- + --- + + --- + --- + + --- + --- + + --- + --- + | | 0 | | | 0 | * | 2 | 1 | | 2 | 1 | | 2 | 1 | | 2 | 1 | + --- + --- + + --- + --- + + --- + --- + + --- + --- + + --- + --- + + --- + --- + | | 0 | | | 0 | | | 0 | * | | 0 | * | 0 | 1 | | 0 | 1 | + --- + --- + + --- + --- + + --- + --- + + --- + --- + + --- + --- + + --- + --- + | | 0 | | | 0 | | | 0 | | | 0 | | | 0 | * | 8 | 1 | + --- + --- + + --- + --- + + --- + --- + + --- + --- + + --- + --- + + --- + --- + | | 0 | | | 0 | | | 0 | | | 0 | | | 0 | | | 0 | * + --- + --- + + --- + --- + + --- + --- + + --- + --- + + --- + --- + + --- + ---- PU 2 PU 5 PU 0 PU 9 PU 8 PU 3 + --- + --- + + --- + --- + + --- + --- + + --- + --- + + --- + --- + + --- + --- + | 3 | 1 | * | 3 | 1 | * | 5 | 1 | | 5 | 1 | | 5 | 1 | | 5 | 1 | + --- + --- + + --- + --- + + --- + --- + + --- + --- + + --- + --- + + --- + --- + | 2 | 1 | | 2 | 1 | | 2 | 0 | * | 2 | 0 | * | 9 | 1 | | 9 | 1 | + --- + --- + + --- + --- + + --- + --- + + --- + --- + + --- + --- + + --- + --- + | 0 | 1 | | 0 | 1 | | 0 | 0 | | 0 | 1 | | 0 | 1 | * | 0 | 1 | * + --- + --- + + --- + --- + + --- + --- + + --- + --- + + --- + --- + + --- + --- + | 8 | 1 | | 8 | 1 | | 8 | 0 | | 8 | 0 | | 8 | 0 | | 8 | 1 | + --- + --- + + --- + --- + + --- + --- + + --- + --- + + --- + --- + + --- + --- + | 4 | 1 | | 4 | 1 | | 4 | 0 | | 4 | 0 | | 4 | 0 | | 4 | 0 | + --- + --- + + --- + --- + + --- + --- + + --- + --- + + --- + --- + + --- + ---- PU 2 PU + --- + --- + + --- + --- + | 5 | 1 | * | 5 | 0 | + --- + --- + + --- + --- + | 9 | 1 | | 9 | 0 | + --- + --- + + --- + --- + | 0 | 0 | | 2 | 1 | + --- + --- + + --- + --- + | 8 | 0 | | 8 | 0 | * + --- + --- + + --- + --- + | 3 | 1 | | 3 | 1 | + --- + --- + + --- + --- + * =スキャンする次の場所を識別するポインタを示します P =そのフレームに保存されているページ番号 U =使用済みフラグ、 0 =最近使用されていない 1 =最近参照された これは、線形スキャンアルゴリズムまたはセカンドチャンスアルゴリズムと呼ばれ、BSD Linuxで使用されます。 一般に、循環キューとして実装されます。
既にメモリ内にあるページの参照が到着した場合、置換アルゴリズムはまったく呼び出されません。
クロック置換アルゴリズムは LRU置換の利点の一部を達成しようとしますが、すべてのページのヒットにLRUビットを操作する大規模なオーバーヘッドなしています。
ページは次の3つの状態のいずれかになります。
recently-used
ビットはtrue
です。この場合、ページへのアクセスが発生してもページフォールトは発生しないため、ビットは変更されません。recently-used
ビットはfalse
です。この場合、ページはページテーブルにもマークされ、ページにアクセスするとページフォールトが発生します。(この場合にページフォールトが発生した場合、ページフォールトハンドラが行うのは状態をに変更することだけですrecently-used
。)clock-hand
。ながらclock-hand
でページを指しているrecently-used
ビットセットtrue
私たちが反転recently-used
するビットをfalse
、その後、インクリメントclock-hand
次のページにポイントに。recently-used
既に消去されたページを見つけた場合、それが私たちが置き換えるページです。次に、新しいページをとしてマークし、次のページにrecently-used
インクリメントします。clock-hand
クロックは、本質的に、LRUを概算するための確率的アルゴリズムです。ページがアクセスされているレートclock-hand
がが同じページに戻ってくるレートよりもはるかに高い場合、ページはマークされる可能性が高くなりrecently-used
ます。ページへのアクセス速度が、clock-hand
が戻ってくる速度と比較して低い場合、ページは状態ではない 可能性が高くなりますrecently-used
。最近使用したページは置き換えられません。(なぜ?)