私は次のプログラムに取り組んでいますが、情報が不足しているように感じます.a)とb)はちょっとしたトリックです:
ループは、4KB ページを使用する仮想メモリ システム上のプログラムの一部として実行されます。必要に応じてメモリ内で置換するページを選択するために LRU 置換アルゴリズムが使用されると仮定します。「Start」というラベルの付いた命令はページ境界で始まり、ループの本体には 4601 組のシフト命令 (sll と srl) が含まれています。
Start: addi $3,$0,32
Loop: sll $4,$4,1
srl $4,$4,1
... # previous two instructions are
... # repeated 4600 times
addi $3,$3,-1
bne $3,$0,loop
a) メモリに 8 つの 4KB フレームが含まれている場合、ループの実行中にページ フォールトはいくつ発生しますか?
b) メモリに 9 つの 4KB フレームが含まれている場合、ループの実行中にページ フォールトはいくつ発生しますか?
a) と b) はどちらも 5 ページ フォールトではないでしょうか? ループするたびに 4602 の命令があり、MIPS 命令は 4B、ページ サイズは 4KB です。4KB/4B = 1 ページあたり 1024 命令なので、最初のループは次のようになります。
命令 0 - 1023 フレーム 0 ページフォルト あり
指示 1024 - 2047 フレーム 1 ページ フォルトあり
指示 2048 - 3071 フレーム 2 ページ フォルトあり
指示 3072 - 4096 フレーム 3 ページ フォルトあり
指示 4096 - 4602 フレーム 4 ページ フォルトあり
そのため、2 回目の反復でループに戻ったとき、ページはまだ LRU ポリシーによって置き換えられていないため、それらを再度参照できます。32 回のループ反復で 8 フレームか 9 フレームかによって、なぜこれが変わるのでしょうか?