我一直在研究以下程序,感觉它缺少一些信息或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帧?
答案 0 :(得分:0)
循环体包含4601个对移位指令。除了addi
和bne
说明外,每个循环总共有 9204 指令。