さまざまなページ置換アルゴリズムがどのように実行されるかをシミュレートするアプリケーションを開発するように依頼されたプロジェクトがあります(さまざまなワーキングセットサイズと安定期間を使用)。私の結果:
- 垂直軸:ページフォールト
- 横軸:ワーキングセットサイズ
- 深さ軸:安定期間
私の結果は妥当ですか?LRUの方がFIFOよりも良い結果が得られると期待していました。ここでは、それらはほぼ同じです。
ランダムな場合、安定期間とワーキングセットのサイズはパフォーマンスにまったく影響を与えないようですか?FIFOおよびLRUと同様のグラフが最悪のパフォーマンスになると予想しましたか?参照文字列が非常に安定していて(小さなブランチ)、ワーキングセットのサイズが小さい場合でも、多くのブランチと大きなワーキングセットのサイズを持つアプリケーションよりもページフォールトが少ないはずです。
より詳しい情報
- 参照文字列(RS)の長さ:200,000
- 仮想メモリのサイズ(P):1000
- メインメモリのサイズ(F):100
- 参照された時間ページの数(m):100
- ワーキングセットのサイズ(e):2-100
- 安定性(t):0-1
ワーキングセットのサイズ(e)と安定期間(t)は、参照文字列の生成方法に影響します。
|-----------|--------|------------------------------------|
0 p p+e P-1
したがって、上記のサイズPの仮想メモリを想定します。参照文字列を生成するには、次のアルゴリズムが使用されます。
- 参照文字列が生成されるまで繰り返します
m
[p、p+e]で数字を選びます。m
ページが参照される回数をシミュレートまたは参照する- 乱数を選択、0 <= r <1
- r<tの場合
- 新しいpを生成する
- else(++ p)%P
更新(@MrGomezの回答に応じて)
ただし、入力データをどのようにシードしたかを思い出してください。random.randomを使用して、制御可能なレベルのエントロピーでデータを均一に分散させます。このため、すべての値が同じように発生する可能性があり、浮動小数点空間でこれを作成したため、再発する可能性はほとんどありません。
私はを使用してrandom
いますが、それも完全にランダムではありません。ワーキングセットのサイズとページ数の参照パラメーターを使用しても、参照はある程度の局所性で生成されますか?
numPageReferenced
現在メモリ内にあるページをより多く参照し、FIFOよりもLRUのパフォーマンス上の利点を示すことを期待して、相対値を増やしてみnumFrames
ましたが、明確な結果は得られませんでした。参考までに、次のパラメーターを使用して同じアプリを試しました(ページ/フレームの比率は同じままですが、データのサイズを小さくして処理を高速化しました)。
--numReferences 1000 --numPages 100 --numFrames 10 --numPageReferenced 20
結果は
それでもそれほど大きな違いはありません。numPageReferenced
に比べて増加した場合numFrames
、LRUはメモリ内のページをより多く参照するため、パフォーマンスが向上するはずです。それとも私は何かを誤解していますか?
ランダムに、私は次の線に沿って考えています:
- 高い安定性と小さなワーキングセットがあるとします。これは、参照されているページがメモリ内にある可能性が非常に高いことを意味します。では、ページ置換アルゴリズムを実行する必要性は低いのでしょうか。
うーん、多分私はこれについてもっと考えなければなりません:)
更新:安定性が低いと、ゴミ箱があまり目立たなくなります
ここでは、ワーキングセットのサイズがメモリ内のフレーム数(100)を超えているため、トラッシングを表示しようとしています。ただし、安定性が低い(高い)とスラッシングが目立たなくなることにt
注意してください。なぜそうなるのでしょうか。安定性が低くなるとページフォールトが最大に近づくため、ワーキングセットのサイズはそれほど重要ではないという説明はありますか?