关于32位MIPS处理器中Set/Tag字段与Cache命中缺失的求解问询
32位MIPS Cache字段计算与命中判断指南
要解决这个问题,首先得明确Cache的结构参数(不同参数会直接改变计算结果),这里采用32位MIPS系统中最常见的直接映射Cache配置作为示例:
- 块大小:16字节(Offset字段占4位,因为2⁴=16)
- Cache总容量:1KB(共64个Cache行/Set,Set字段占6位,2⁶=64)
- Tag字段:32位地址减去Offset和Set的位数,即32-4-6=22位
地址拆分规则
32位内存地址被拆分为三部分:[Tag(22位) | Set(6位) | Offset(4位)]
- Offset:低4位,用于定位块内的具体字节
- Set:中间6位,用于定位Cache中对应的行(直接映射下每个Set对应1个Cache行)
- Tag:剩余22位,标记该Cache行对应的内存块高位地址,用于匹配判断命中
逐条指令计算与命中判断
所有lw指令的基址寄存器为$0(值为0),因此有效地址就是指令中的立即数:
1. lw $t1,0x1040($0)
- 有效地址:
0x1040 - Offset:低4位 →
0x0 - Set:中间6位(二进制
000100)→ 十进制4 - Tag:剩余高位 →
0x10 - 命中判断:首次访问Cache行4,无有效数据 → Miss
2. lw $t2,0x2044($0)
- 有效地址:
0x2044 - Offset:低4位 →
0x4 - Set:中间6位(二进制
000100)→ 十进制4 - Tag:剩余高位 →
0x20 - 命中判断:Cache行4当前Tag为
0x10,不匹配 → Miss,更新该行Tag为0x20
3. lw $t3,0x3048($0)
- 有效地址:
0x3048 - Offset:低4位 →
0x8 - Set:中间6位(二进制
000100)→ 十进制4 - Tag:剩余高位 →
0x30 - 命中判断:Cache行4当前Tag为
0x20,不匹配 → Miss,更新该行Tag为0x30
4. lw $t4,0x1044($0)
- 有效地址:
0x1044 - Offset:低4位 →
0x4 - Set:中间6位(二进制
000100)→ 十进制4 - Tag:剩余高位 →
0x10 - 命中判断:Cache行4当前Tag为
0x30,不匹配 → Miss,更新该行Tag为0x10
5. lw $t5,0x504c($0)
- 有效地址:
0x504C - Offset:低4位 →
0xC - Set:中间6位(二进制
000100)→ 十进制4 - Tag:剩余高位 →
0x50 - 命中判断:Cache行4当前Tag为
0x10,不匹配 → Miss,更新该行Tag为0x50
6. lw $t6,0x3040($0)
- 有效地址:
0x3040 - Offset:低4位 →
0x0 - Set:中间6位(二进制
000100)→ 十进制4 - Tag:剩余高位 →
0x30 - 命中判断:Cache行4当前Tag为
0x50,不匹配 → Miss
补充说明
- 如果采用组相联Cache(比如2路组相联),Set数量会减半,Tag位数相应增加,命中判断时需要检查该Set下的所有Cache行是否有匹配的有效Tag
- 若块大小调整为32字节,Offset字段占5位,Set字段位数会减少1位,Tag字段位数增加1位
- 命中的核心逻辑:同一Set内存在有效且Tag与当前地址Tag匹配的Cache行,即为Hit;否则为Miss
内容的提问来源于stack exchange,提问作者Bryan C
相关产品推荐
相关产品推荐

