したがって、Beladyのアノマリーは、FIFOページ置換ポリシーを使用する場合、ページスペースを追加すると、ページフォールトが増えると述べています。
私の直感では、ページスペースを追加するのと同じ数のページフォールトを少なくするか、せいぜい減らす必要があるとしています。
FIFOキューをパイプとして考える場合、ページ領域を追加することはパイプを大きくするようなものです:
____
O____O size 4
________
O________O size 8
では、なぜページ違反が増えるのでしょうか?私の直感では、パイプが長いとページフォールトが発生するまでに少し時間がかかります(したがって、無限パイプを使用するとページフォールトは発生しません)。多くの場合、より小さなパイプと同じです。
私の推論の何が問題になっていますか?
FIFOを使用しているときにページ数を増やすと、一部のアクセスパターンで障害率が高くなる可能性がある理由は、ページ数が増えると、最近リクエストされたページがFIFOキューを長くします。
「3」がここでウィキペディアの例で要求されている3回目を考慮してください: http://en.wikipedia.org/wiki/Belady%27s_anomaly
ページ不在は「f」でマークされます。
1:
Page Requests 3 2 1 0 3 2 4 3 2 1 0 4
Newest Page 3f 2f 1f 0f 3f 2f 4f 4 4 1f 0f 0
3 2 1 0 3 2 2 2 4 1 1
Oldest Page 3 2 1 0 3 3 3 2 4 4
2:
Page Requests 3 2 1 0 3 2 4 3 2 1 0 4
Newest Page 3f 2f 1f 0f 0 0 4f 3f 2f 1f 0f 4f
3 2 1 1 1 0 4 3 2 1 0
3 2 2 2 1 0 4 3 2 1
Oldest Page 3 3 3 2 1 0 4 3 2
最初の例(ページ数が少ない)では、9つのページ不在があります。
2番目の例(ページ数が多い)では、10ページフォールトがあります。
FIFOを使用する場合、キャッシュのサイズを大きくすると、アイテムが削除される順序が変わります。 一部の場合、どちらが故障率を増加させる可能性があります。
Belady's Anomalyは、キャッシュサイズに関する障害率の一般的な傾向については何も述べていません。だから、あなたの推論(キャッシュをパイプとして見ることについて)は、一般的なケースでは間違っていません。
要約すると、Belady's Anomalyは、キャッシュサイズが大きいと、キャッシュ内のアイテムがFIFOキューで、小さいキャッシュサイズよりも後でキューに入れられるため、特定の(まれな可能性のある)アクセスパターンでは、キャッシュサイズを大きくすると、障害率が高くなります。
一般化されているであるため、このステートメントは間違っています:
Belady's Anomalyは、FIFOページ置換ポリシーを使用すると、ページスペースを追加するとページフォールトが増えると述べています
これは修正されたバージョンです:
「Belady's Anomalyは、FIFO=ページ置換ポリシーを使用しているときに、ページスペースを追加すると、someメモリアクセスパターンが実際にページフォールトを増やすことになると述べています。 "
つまり、異常が発生するかどうかは、実際のメモリアクセスパターンによって異なります。
Beladyの異常は、ページ置換アルゴリズムで発生しないスタックアルゴリズムに従います。つまり、フレームが少ないページは、フレームが多いページのサブセットである必要があります。ページフレームが増えると、以前存在していたページフレームが存在する必要があります。 FIFOで発生する場合があります。ランダムなページ置換でもLRUまたは最適ではありません。