在高速缓存系统中,假设主存容量为1MB,Cache容量为16KB,块长为64字节。采用直接映射方式,且Cache初始为空。若CPU依次访问主存地址0x00000、0x00040、0x00080、0x10000、0x10040、0x10080、0x20000、0x20040、0x20080,且每次访问均命中Cache。请问此时Cache中存储的主存块数最少是多少?
答案解析
核心考点说明:本题考察直接映射方式下Cache的地址划分、主存块与Cache块的映射关系,以及程序访问局部性原理的灵活应用。需要理解Cache地址结构、块冲突问题和命中条件。
解题思路分析:
1. 计算Cache的总块数:16KB / 64字节 = 256块
2. 每个主存块大小为64字节,因此主存地址的低6位是块内偏移
3. 直接映射方式下,主存地址的中间8位用于选择Cache块(因为256块需要8位)
4. 将访问的地址转换为块号:
- 0x00000: 块号0
- 0x00040: 块号1
- 0x00080: 块号2
- 0x10000: 块号1024
- 0x10040: 块号1025
- 0x10080: 块号1026
- 0x20000: 块号2048
- 0x20040: 块号2049
- 0x20080: 块号2050
5. 根据直接映射规则,块号 mod 256 就是Cache块号:
- 块号0 mod 256 = 0
- 块号1 mod 256 = 1
- 块号2 mod 256 = 2
- 块号1024 mod 256 = 0
- 块号1025 mod 256 = 1
- 块号1026 mod 256 = 2
- 块号2048 mod 256 = 0
- 块号2049 mod 256 = 1
- 块号2050 mod 256 = 2
6. 由于采用直接映射方式,每个Cache块只能存储一个主存块。当访问块号1024时,会替换掉块号0;访问块号2048时,会替换掉块号1024
7. 因此,最终Cache中存储的主存块数最少为6个(块号2048、2049、2050、1024、1025、1026)
每个干扰项的设计意图:
A. 3个:错误地认为每个组只能存储一个块
B. 4个:错误地将Cache容量除以块长再除以组数
C. 6个:正确选项,考虑了直接映射方式下不同主存块映射到同一个Cache块的情况
D. 9个:错误地认为每个访问的地址都会在Cache中保留
易错点提醒:
1. 容易忽略直接映射方式下主存块与Cache块的固定映射关系
2. 容易忽略Cache初始为空且需要预取数据的过程
3. 容易忽略LRU替换策略对Cache内容的影响
正确答案:C