在高速缓存系统中,假设主存容量为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
随机推荐
开始刷题