クロックページ置換アルゴリズム-すでに存在するページ


9

クロックページ置換アルゴリズムをシミュレーションするときに、既にメモリ内にある参照が来ても、時計の針はまだインクリメントしますか?

次に例を示します。

4スロット、クロックページ置換アルゴリズムを使用

参照リスト:1 2 3 4 1 2 5 1 3 2 4 5

最初のリストは次のようになります。

-> [1][1]
   [2][1]
   [3][1]
   [4][1]

insertの次の参照は1、次に2になります。手は1の後、1の後、2の後を指しますか?つまり、5を挿入すると、時計は次のようになります。

-> [5][1]
   [2][0]
   [3][0]
   [4][0]

回答:


9

この例はあなたのすべての疑いを明確にすると思います。

例:
スタートページの参照シーケンスでメインメモリが空であると仮定します。
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で使用されます。 
一般に、循環キューとして実装されます。

テキストでこれが何を意味するのか説明していただけますか?これはいい図ですが、意味がわからないときは役に立ちません。
離散トカゲ

7

既にメモリ内にあるページの参照が到着した場合、置換アルゴリズムはまったく呼び出されません。

クロック置換アルゴリズムは LRU置換の利点の一部を達成しようとしますが、すべてのページのヒットにLRUビットを操作する大規模なオーバーヘッドなしています。

ページは次の3つの状態のいずれかになります。

  1. メモリに存在し、recently-usedビットはtrueです。この場合、ページへのアクセスが発生してもページフォールトは発生しないため、ビットは変更されません。
  2. メモリに存在しますが、recently-usedビットはfalseです。この場合、ページはページテーブルにもマークされ、ページにアクセスするとページフォールトが発生します。(この場合にページフォールトが発生した場合、ページフォールトハンドラが行うのは状態をに変更することだけですrecently-used。)
  3. ページがメモリに存在しません。この場合、私たちは見て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。最近使用したページは置き換えられません。(なぜ?)

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.