第六章 存储器层次结构 第三节 存储器层次结构

在这里插入图片描述
寄存器可以在一个时钟周期内访问
SRAM可以在几个CPU时钟周期访问
DRAM主存可以在几十到几百个时钟周期访问

1、存储器层次结构中的缓存

存储器层次结构的中心思想是,对于每个k,位于k层的更快更小的存储设备作为位于k+1层的更大更慢的存储设备的缓存。
下图展示了存储器层次结构中缓存的一般性概念。第k+1层的存储器被划分成连续的数据对象组块,称为块。每个块都有一个唯一的地址或名字,使之区别于其他的块。块可以是固定大小的(通常是这样的),也可以是可变大小的(例如存储在Web服务器上的远程HTML文件)。
在这里插入图片描述数据总是以块大小为传送单元在第k层和第k+1层之间来回复制的。虽然在层次结构中任何一对相邻的层次之间块大小是固定的, 但是其他的层次对之间可以有不同的块大小。

1. 缓存命中

当程序需要第k+1层的某个数据对象d 时,它首先在当前存储在第k层的一个块中查找d。如果d刚好缓存在第k层中, 那么就是我们所说的缓存命中。

2.缓存不命中

顾名思义,也就是第k层中没有缓存数据d。此时第k层的缓存从第k+1层缓存中,取出d的块,如果k满了,会通过一定的策略,选出一个k中的块进行替换。

1.强制不命中(冷不命中)

如果第k层的缓存是空的, 那么对任何数据对象的访问都会不命中。

2. 冲突不命中

只要发生了不命中, 第k层的缓存就必须执行某个放置策略, 确定把它从第k+1层中取出的块放在哪里。随机放置是最灵活的方式,但是对于某些靠近cpu的缓存来说,实现代价很高,通常会使用更加严格的放置策略。这个策略将第k+1层的某个块限制放置在第k层块的一个小的子集中(有时只是一个块)。例如确定第k+1层的块t必须放置在第k层的块(i mod 4) 中。
这种策略会引起一种,冲突不命中,也就是虽然缓存空间还有不少,但是,却不能命中缓存。比如上面的例中,我反复请求0,和8块,这两个块在上层缓存中共享一个位置,即便还有别的位置,也不能缓存这两个块的内容。

3.容量不命中

缓存太小了,不能处理这个工作集。

程序通常是按照一系列阶段(如循环)来运行的, 每个阶段访问缓存块的某个相对稳定不变的集合。例如, 一个嵌套的循环可能会反复地访问同一个数组的元素。这个块的集合称为这个阶段的工作集(working set)。当工作集的大小超过缓存的大小时, 缓存会经历容量不命中。

3.缓存管理

所有缓存都必定有某种逻辑负责管理缓存,当发生不命中或者各种情况时如何操作缓存。
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值