缓存技术详解:从直接映射到组相联缓存
1. 直接映射缓存
直接映射缓存是一种基础的缓存结构。在这种缓存中,索引和偏移字段构成了数据 SRAM 的地址位。以一个数据 SRAM 为例,它是 32 位宽,包含 1024 个 32 位的数据字。
标签包含了内存地址的高位,用于唯一标识主内存中的特定内存块。要确定标签的大小,我们用总地址大小减去索引和偏移的组合大小。假设缓存包含 64 个块($2^6$),每个块包含 16 个字($2^4$),且每个缓存行中的字为 4 字节($2^2$),那么标签需要 20 位(地址大小 - 索引大小 - 偏移大小 - 字大小 = 32 位 - 6 位 - 4 位 - 2 位 = 20 位)。
1.1 直接映射缓存的读操作
当 CPU 需要读写数据时,会提供一个内存地址。该地址会根据标签、索引和偏移的各自大小进行拆分。然后在缓存中进行搜索,索引用于选择缓存中与请求的内存地址对应的特定缓存行(块),偏移字段则从缓存行中选择要搜索的字。同时,将地址中的标签与该缓存行中存储的标签进行比较:
- 缓存命中 :如果标签匹配,则为缓存命中,缓存行包含请求的数据,数据线上已有的数据字可以快速访问。
- 缓存未命中 :如果标签不匹配,则为缓存未命中。此时,需要从内存层次结构的下一级将所需的内存块加载到由索引位确定的缓存行中,并使用地址中的新标签更新缓存行的标签,使其为未来的访问做好准备。缓存未命中通常会触发异常,相应的中断处理程序会触发任务切换,因此 CPU 会继续执行另一个任务,而不会等待缓存行被填满。
下面是直接映射缓存读操作的流程
超级会员免费看
订阅专栏 解锁全文
1万+

被折叠的 条评论
为什么被折叠?



