在高速缓存系统中,假设主存容量为512KB,Cache容量为4KB,块长为16个字(每个字32位)。采用直接映射方式,且Cache初始为空。若CPU依次访问主存地址0x00000、0x00010、0x00020、0x00030、0x00040、0x00050、0x00060、0x00070、0x00080、0x00090、0x000A0、0x000B0、0x000C0、0x000D0、0x000E0、0x000F0、0x00100、0x00110、0x00120、0x00130、0x00140、0x00150、0x00160、0x00170、0x00180、0x00190、0x001A0、0x001B0、0x001C0、0x001D0、0x001E0、0x001F0。假设每次访问均命中Cache,请问此时Cache的命中率是多少?
答案解析
核心考点说明:本题考察直接映射方式下Cache的地址划分、程序访问局部性原理、以及命中率的计算。需要理解Cache地址结构、块冲突问题和命中条件的综合应用。
解题思路分析:
1. 首先计算Cache的总块数:4KB / (16×4B) = 4KB / 64B = 64块
2. 每个字块的容量是64B,因此主存地址的低6位是字块内地址
3. Cache共有64块,因此需要6位表示Cache字块地址
4. 主存地址总位数:512KB = 2^19B,因此主存地址共19位
5. 主存字块标记位数:19-6-6=7位
6. 每个Cache块只能存储一个主存块
7. CPU访问的地址范围是0x00000到0x001F0,共32次访问
8. 由于Cache初始为空,前64次访问(前16次访问)都会产生Cache未命中,需要从主存调入Cache
9. 从第17次访问开始,地址0x00100对应的主存块会映射到Cache的第16块,此时Cache已满,需要替换
10. 由于采用直接映射方式,每个主存块只能映射到固定的Cache块,因此后续访问会产生冲突
11. 最终,32次访问中,前16次访问未命中,后16次访问命中,命中率为16/32=50%
每个干扰项的设计意图:
A. 50%:正确选项,对应实际计算结果
B. 75%:错误地认为每个Cache块可以存储多个主存块
C. 87.5%:错误地忽略了地址映射的冲突问题
D. 93.75%:错误地将块长与命中率直接关联
易错点提醒:
1. 容易忽略Cache初始为空时的未命中情况
2. 容易忽略直接映射方式下主存块与Cache块的固定映射关系
3. 容易错误地应用替换策略,而直接映射方式不需要复杂的替换策略
4. 容易混淆命中率的计算方式
正确答案的关键依据:
Cache共有64块,每个块只能存储一个主存块。CPU访问了32次,前16次访问未命中,后16次访问命中,因此命中率为16/32=50%。
正确答案:A