在组号映射的地方清楚地讲了 Cache 行中包含标记部分和有效位

同理,在 Cache 写策略处写了若采用回写法,Cache 行还包含一位脏位
由此看来 Cache 总容量 = 行数×行长 = 行数×(可能存在的脏位位数+有效位位数+标记部分位数+数据部分位数)
如下题:


但是在一道例题中可见一个隐含约定:Cache 行长一般指 Cache 行中的数据部分的长度,Cache 容量一般指 Cache 数据部分的容量
例题:
某 32 位计算机的 Cache 容量为 16KB,Cache 块的大小为 16B,若主存与 Cache 的地址映射采用直接映射方式,则主存地址为 1234e8f8 (十六进制)的单元装入的 Cache 地址为______。
a.00 0100 0100 1101(二进制) b.01 0010 0011 0100(二进制)
c.10 1000 1111 1000(二进制) d.11 0100 1110 1000(二进制)
这题的做法 1 是 Cache 容量为 2^14 B,又因为给出的地址是 14 位,所以地址编码以字节为单位,所以映射后的低 14 位也就是 Cache 地址;
做法 2 是共有 16KB/16B = 1K = 2^10 块,所以组号占 10 位,又因为给出的地址是 14 位,所以地址编码以字节为单位,16B/B = 16,所以组内地址占 4 位,所以映射后的低 14 位也就是 Cache 地址
这两个做法都需要默认 Cache 行长一般指 Cache 行中的数据部分的长度,Cache 容量一般指 Cache 数据部分的容量
之前是我想错了,什么不能算出来标记部分……我可能脑子瓦特了
那么这个容量的计算为什么不是 Cache 总容量 = 行数×行长 = 行数×(可能存在的脏位位数+有效位位数+标记部分位数+数据部分位数) 呢……我也不知道,就很神奇
本文探讨了Cache行长通常指的是数据部分的长度,而Cache容量则通常指的是数据部分的容量。在直接映射方式下,通过例题分析了如何根据Cache容量和块大小确定地址映射,并指出在计算时应考虑Cache行中的脏位、有效位和标记部分。两种不同的解题思路都基于Cache行长不包括控制位的假设。
4324

被折叠的 条评论
为什么被折叠?



