0

我一直在研究以下程序,感觉它缺少一些信息,或者 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 帧?

4

1 回答 1

0

循环体包含 4601移位指令。除了addiand指令,每个循环bne总共有9204条指令。

于 2012-05-05T01:53:03.927 回答