写直通与访存次数计算问题

写直通与访存次数计算问题

@(组成原理)
(2015.16)假定编译器将赋值语句”x = x+3”转换成指令”add xaddr,3”,其中xaddr是x对应的存储单元地址。若执行该指令的计算机采用页式虚拟存储管理方式,并配有相应的TLB,且Cache使用直写(Write Through)方式,则完成该指令功能需要访问主存的次数至少是:B
A.0 B.1 C.2 D.3

分析:不得不说2015年的选择题出的极难。这里,很多书上给出了一个错解C,这也是特别好想到的答案,于是好像觉得自己搞对了。实际上1次才是最少的。因为这牵涉到直写的两种策略。

写直通(全写法)

CPU对Cache写命中时,必须把数据同时写入Cache和主存。这样呢替换Cache块时,直接覆盖即可,不必想还有任务没有完成。这会增加访存次数,降低Cache效率。
最初的设计就是同时写,如果就选这样的策略,那么上面的题就是2次而不是1次了。
为了弥补这个策略的不足,在Cache和主存之间加上一个缓冲,称之为写缓冲。注意,写缓冲也是写直通方法!只不过最初是对Cache和主存一起写,现在是对写缓冲和Cache一起写!写缓冲会控制将内容写到主存,这和指令访存无关了,因此,指令只需管执行时获取操作数的访存次数即可。

我们知道TLB是联想寄存器,存的是页表的部分副本,因此,当xaddr在TLB中时,直接拿到xaddr地址,经过重定向得到物理地址,去访存一次就拿到了xaddr对应的存储单元的值。计算即可。计算完毕写直通,通的是Cache和写缓冲!

update:这里讲的也不一定对。甚至可以是0次,比如TLB命中,Cache命中,则取操作数不用访存,直写法访存1次,或者按照上面算法写缓冲,那么就是0次。也或者写到寄存器,因此也可能为0次。
另外一种思路,我个人不太赞同,说只考虑执行,不考虑取操作数,强行凑到1次,个人不喜欢这种分析。既然分析指令,最全面的是分析整个过程而不是断章取义。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值