Cache标记位(tag)位数计算及映射方式判定问题
Cache标记位(tag)计算方法
前置默认约定
计组科目中这类Cache计算题目,除非题干明确说明特殊编址规则,否则统一遵循以下默认前提:
- 主存按字节编址,即1个内存地址对应1Byte的存储单元
- 块内偏移位长度仅和Cache行(块)大小有关,和地址映射方式无关
- tag位长度通用计算公式:
tag位数 = 主存地址总位数 - 块内偏移位数 - 索引位数,其中索引位长度由映射方式决定:- 直接映射:索引位数 = log₂(Cache总行数)
- 全相联映射:索引位数 = 0
- N路组相联映射:索引位数 = log₂(Cache总行数 / N)
针对本题的分步推导
1. 计算主存地址总长度
题干给出主存容量为64KB,换算为字节单位是64 * 1024 B = 2^16 B,按字节编址时需要16位地址才能覆盖所有存储单元,因此主存地址总长度为16bit。
2. 计算块内偏移位长度
题干给出Cache每行大小为32Bytes,即32B = 2^5 B,需要5位地址才能索引单个Cache行内的任意字节,因此块内偏移固定为5bit,和映射方式无关。
3. 结合参考答案确认映射规则
已知任课教师给出的tag参考答案为11bit,代入通用公式可反推出索引位长度:索引位数 = 16 - 5 - 11 = 0bit
索引位为0对应两种等价的地址结构:
- Cache采用全相联映射
- Cache采用4路组相联映射(4行全部属于同一个组,组数为1,不需要索引位,地址结构和全相联完全一致)
如果题目采用直接映射,索引位应为log₂(4)=2bit,对应tag位为16-5-2=9bit;如果采用2路组相联,索引位应为log₂(4/2)=1bit,对应tag位为16-5-1=10bit,均和给出的参考答案不符,因此可以确定本题默认采用全相联映射。
这类题的通用解题步骤
遇到同类型题目时按固定顺序计算即可:
- 确定主存地址总位数:默认按字节编址,总位数为log₂(主存总容量/1B);如果题干明确说明按字编址,就先换算为总字数再取对数
- 计算块内偏移位:长度为log₂(Cache单块大小/编址单位),该值不受映射方式影响
- 根据题干明确给出的映射方式计算索引位长度,没有明确说明时可以结合配套答案反推题目默认的映射规则
- 代入通用公式计算tag位长度即可
内容的提问来源于stack exchange,提问作者Jordan Kotiadis
相关产品推荐
相关产品推荐

