例1:某计算机的主存地址位数为32位,按字节编址。假定数据Cache中最多存放128个主存块,采用四路组相联映射方式,块大小为64B,每块设置了一位有效位。采用一次性写回策略,为每块设置1位“脏”位。要求:
(1)指出主存地址中标记(Tag)、组号(Index)和块内地址(Offset)三部分的位置和位数。
(2)计算该数据Cache的总位数。
解:主存地址位数为32位,一共32位,
Cache中有128个主存块,四路组相联映射,即每个Cache组内有4个Cache块,
故分为128 ÷ 4 = 32组 = 2^5 组,组号占5位
按字节编址,块大小为64B = 2^6B,块内地址字段占6位
标记字段占剩余的 32 - 5 - 6 = 21 位
(1)Tag为21位,位于主存地址前部;
组号Index为5位,位于主存地址中部;
Offset为6位,位于主存地址后部;
主存地址结构:
主存块号 | 块内地址 |
---|---|
主存字块标记(21位) + cache组号(5位) = 26位 | 6位 |
Cache总位数或总容量 = 标记项的总位数 + 数据块的总位数
标记项 = 其他位 + 标记位
其他位:一定包含 1 位有效位 ,可能包含脏位 (修改位)、替换控制位
全写法没有脏位,写回法有 1 位脏位
替换算法有替换控制位
(2)标记项的总位数 = 128 块 * (21 + 1 + 1)位/块 = 128 * 23 = 2944 位
数据块位数 = 128 块 * 2^6 * 8 位/块 = 65536 位
块大小 64B
所以数据Cache的总位数 = 2944 位 + 65526 位 = 68480 位
例2:某个Cache的容量大小为64KB,行长为128B,且是四路组相联Cache,主存使用32位地址,按字节编址。
(1)该Cache共有多少行?多少组?
(2)该Cache的标记阵列中需要有多少标记项?每个标记项中标记位长度是多少?
(3)该Cache采用LRU替换算法,若当该Cache为直达式Cache时,标记阵列总共需要多大的存储容量?写回式又该如何?(提示:四路组相联Cache使用LRU算法的替换控制位为2位。)
解:
(1)某个Cache的容量大小为 64KB,行长为 128B,
该Cache共有:64KB ÷ 128B/行 = 2^16B ÷ 2^7B行 = 2^9 行 = 512 行;
四路组相联Cache,即每个Cache组内有 4 个Cache行,
该Cache共有:512行 ÷ 4行/组 = 128 组。
(2)Cache中有 512 行表示Cache中有 512 个标记项,
按字节编址,行长为 128B 表示块大小为:128B = 2^7B,
即块内地址(Offset)为 7 位;
Cache有 128 组 = 2^7 组,即组号为 7 位;
标记位(tag)= 32 - 7 - 7 = 18 位 。
(3)写直达式就是全写法,没有脏位,只有 1 位有效位,
使用LRU算法,四路组相联 2 位替换控制位,4 = 2^2
所以写直达式标记阵列需要的存储容量为:(18 + 1 + 2)位/行 * 512 行 = 10752 位
对应的Cache行标记项结构:
有效位 | 标记位 | 脏位 | 替换控制位 |
---|---|---|---|
1位 | 18位 | 0位 | 2位 |
写回式就是写回法, 在全写法的基础上添加 1 位脏位,
所以回写式标记阵列需要的存储容量为(21 + 1)位/行 * 512 行 = 11264 位
对应的Cache行标记项结构:
有效位 | 标记位 | 脏位 | 替换控制位 |
---|---|---|---|
1位 | 18位 | 1位 | 2位 |
reference:
Cache的地址结构,tag到底与Cache什么关系,Cache容量与总容量,Cache行长,Cache字地址?_cache地址结构-CSDN博客
彻底弄懂408——计算机组成原理中的Cache映射方式与位数问题_cache行的位数不包括行号吗-CSDN博客
https://www.cnblogs.com/zhengmq2010/p/13662884.html#计组——彻底搞懂cache主存映射以及cache容量的计算_cache容量计算-CSDN博客https://www.cnblogs.com/zhengmq2010/p/13662884.html#