我一直在研究以下程序,感觉它缺少一些信息,或者 a) 和 b) 有点诡计:
该循环作为程序的一部分在使用 4KB 页的虚拟内存系统上执行。假设在需要时使用LRU替换算法在内存中选择要替换的页面。标记为“开始”的指令从页面边界开始,循环体包含 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 = 每页 1024 条指令,所以第一次通过循环:
指令 0 - 1023 帧 0 页面错误是
指令 1024 - 2047 帧 1 页面错误 是
指令 2048 - 3071 帧 2 页面错误是
指令 3072 - 4096 帧 3 页面错误是
指令 4096 - 4602 帧 4 页面错误是
因此,当我们在第二次交互中返回循环时,页面还没有被 LRU 策略替换,所以我们可以再次引用它们。为什么 32 次循环迭代的帧数是 8 帧还是 9 帧?