【发布时间】:2020-03-28 07:54:56
【问题描述】:
数组 A 包含 256 个元素,每个元素 4 个字节。它的第一个元素存储在物理地址 4096。数组 B 包含 512 个元素,每个元素 4 个字节。它的第一个元素存储在物理地址 8192。假设只有数组 A 和 B 可以缓存在最初为空的、物理寻址的、物理标记的、直接映射的、2K 字节的缓存中,其中 8 字节 块大小。然后执行以下循环。
for(i=0;i
A[i] = A[i] + B[2*i];
在循环执行过程中,如果缓存有回写策略,会有多少字节写入内存?
给出的答案是 0。有人可以解释它是如何0吗?
【问题讨论】:
-
如果您认为这是其他问题,那是什么,为什么?
-
A 的每个数组元素都会更新,所以应该写回内存。所以,它应该是 256*4 字节 = 1024 字节。
-
如果使用直写策略,您的答案将如何(如果有的话)改变?如果不改变,这两项政策有什么区别?
-
在这两种情况下,数据都将被写入缓存,如果有的话
-
但问题不是询问写入到缓存,而是询问这些写入中有多少会通过缓存进入内存。即缓存无法过滤掉多少存储。这就是回写式缓存而不是直写式缓存的全部意义所在。
标签: caching memory-management cpu-architecture