cache 标记信息位小结#
在计算 Cache 总容量时,需考虑 Cache 行的数据部分和每行的标记信息,即:
Cache 总容量 (每行标记信息位数 每行数据位数) Cache 总行数
每行的标记信息通常包括:有效位(valid bit)、标记位(Tag 字段)、脏位和 LRU 替换位。其中,有效位和标记位是所有 Cache 必须包含的;脏位(dirty bit)仅在采用回写策略时存在;LRU 替换位仅在使用 LRU 算法时存在,其位数取决于组内行数。下图展示了不同映射方式下 Cache 各字段的组成与分布。

- 有效位:指明该 cache 行存储的数据是否有效(可用)
- 标记位:即 Tag 字段,不论是哪种映射,都需要它指明 cache 行存储的是哪一个主存块。用于进行匹配(match)
- 在直接映射下,Tag 字段位数 ,其中 为主存地址空间位数, 为块内地址位数, 为缓存行数
- 在组相联映射下,Tag 字段位数 ,其中 为主存地址空间位数, 为块内地址位数, 为 cache 的组数(cache 划分为多少个 cache 组)
- LRU 位:也称计数值,只在使用 LRU 替换算法时存在。大小为 ,其中 为组相联的组内 cache 行数
- 脏位:也称修改位(dirty bit),只在使用回写法时存在。当脏位 ,则该 cache 已被修改,替换时需要回写入主存;脏位 ,替换时可直接替换,不需要回写
例题一#

一个 word 等于 ,则主存块大小 , 块内地址位数 。则 , ;Cache 里的数据总容量为 字 ,Cache 行数为 ,则有等式:数据总容量 Cache 行数 主存块大小(Cache 行大小)
解得 。则单行 Cache 标记信息位大小等于 Tag 字段 + 有效位 + 脏位 = ,单行数据容量等于 ,Cache 行数为 ,Cache 总容量 ,答案为 C 。
例题二#

(1):Cache 总容量等于(单行数据部分比特位 单行标记信息比特位) 缓存行数量。由题,主存块大小为 ,则 ;缓存行数为 ,则 ;主存大小 ,则 ;因此 Tag 字段位长 ,即每行 cache 一共有 19 bit 的 Tag 字段。因此单行标记信息比特位大小为:Tag 字段 有效位(1 bit) bit。数据部分比特位大小为: ,即 bit。
因此 cache 总容量 bit
(2): 注意,题目问的是:在主存地址空间里的地址为 3200 的数据单元,所在的主存块应存储在哪一个 cache 行里。如果问的是第 3200 个主存块存于哪个 cache 行,答案就不一样了。
一般问及主存地址,往往暗含着指的是数据单元的地址,不是主存块的地址。因为主存块地址叫做 “主存块编号”,没有“地址”这个称谓。
“地址”(主存物理地址):指的是具体的数据单元的地址,即主存里的每一个字节的住户“门牌号”
“编号”(主存块号):指的是主存块的编号(没有“主存块地址”这个术语),即主存里的“楼栋号”,一栋楼有多个住户。
- 先找出主存地址 3200 的数据单元在哪个主存块,题目按字节编址,因此主存块号 。
- 由直接映射,得到 cache 行号:,因此映射到 cache 的行号是 2
如果按照 2 路相联映射:可知 ,前文已知包含主存地址为 3200 的数据单元的主存块编号为 50,因此有 ,此时主存块 50 应映射到组号为 2 的缓存组里,行号为 4 或 5。
(3):该访存地址为:0000 0001 0010 0011 0100 0101 0110,,因此访存地址划分为:
0000 0001 0010 0011 010 为 Tag 字段,0 01 为 cache 行号,01 0110 为块内地址。访存过程如下:
- 根据
001行号定位到 cache 2 - 根据访存地址的 Tag 字段
0000 0001 0010 0011 010与 cache 2 里存储的主存块的 Tag 字段进行匹配;- 如果完全相等且有效位为 1,则缓存命中,将块内地址为
01 0110的存储单元里的数据送入 CPU - 如果不等或这有效位为 0,则缓存缺失
- 如果完全相等且有效位为 1,则缓存命中,将块内地址为
- 缓存缺失下,访问主存目标数据单元
0123456 H,将目标主存地址的数据送入 CPU,同时把该数据单元所在的主存块调入缓存
例题三#

比较上题的命题:

这两题问的都是具体的主存地址,即包含了目标数据单元的主存块映射到哪一个 cache 组,关键点就是“按字节编址,且标识为单元”,指明了这是主存地址,不是 “主存块号”,老头最爱在这设坑。
此处可得一个术语:主存单元,其指的是主存数据单元,估计是缩写。
由题,计算主存 129 单元在哪个主存块:,因此在主存块 4(第五个主存块)。Cache 可分为 8 组,由级相联规则,主存块 4 映射到 cache 组 4。所以 Cache 组号为 4。
另一解法:由题,,,因此 ,。主存 129 号单元的二进制主存地址为 0···0 1000 0001(129 不断模 2 ),块内地址为 0 0001,所以组号为 100,即组号为 4