高速缓存的工作原理
Cache的基本原理
我们先来看一个简单的cache,处理器每次请求一个字,并且每个块由一个单独的字组成。下图展示了该简单cache在请求数据项(该数据项初始不在cache中)前后的状态。请求发出之前,cache中保存了最近所访问过的数据项 ,而处理器请求一个不在cache中的字 。该请求将引起一次失效,然后 从存储器中取到cache中。
Cache的访问过程
CPU欲访问的信息已在Cache中的比率称为Cache的命中率。设一个程序执行期间,Cache的总命中次数为 ,访问主存的总次数为 ,则命中率 为 。
可见为提高访问效率,命中率 越接近1越好。设 为命中时的Cache访问时间, 为未命中时的访问时间, 表示未命中率,则Cache——主存系统的平均访问时间 为。
Cache的性能评估
平均访存时间 (Average Memory Access Time, AMAT):
AMAT = Time for a hit + Miss rate × Miss penalty
Cache和主存的映射方式
Cache行中的信息是主存中某个块的副本,地址映射是指把主存地址空间映射到Cache地址空间,这样就可以判断该数据项是否存在于cache中,即把存放在主存中的信息按照某种规则装入Cache。
标记(tag)中包含了地址信息,这些地址信息可以用来判断 cache 中的字是否就是所请求的字。标记只需包含地址的高位,也就是没有用来检索 cache 的那些位。
有效位 (valid bit) 来标识一个 cache 项是否含有有效地址。
所以总体上Cache的地址结构大致如下:
主要有以下三种方法:
1. 直接映射
每个存储器地址映射到cache中一个确定的地址,这种方法叫直接映射(direct mapped)。直接映像方式是最简单的地址映像方式,成本低,易实现,地址变换速度快,而且不涉及其他两种映像方式中的替换算法问题。但是,这种方式不够灵活,Cache的块冲突概率最高,空间利用率最低。
直接映射的关系可以定义为:
(一般cache中的块数是2的幂)
2. 全相连映射
块可以被放置在 cache 中的任意位置。这种机制称为全相联 (fully associative),因为存储器中的块可以与 cache中的任何一项相关。全相联映像方式比较灵活,Cache的块冲突概率最低、空间利用率最高,但是地址变换速度慢,而且成本高,实现起来比较困难。
3. 组相连映射
组相联(set associative)将Cache空间分成 个大小相同的组,让主存中的一块直接映像装入Cache中对应组的任何一块位置上,即组间采取直接映像,而组内采取全相联映像。
每个块有 个位置可放的组相联 cache 称为 路组相联 cache。根据索引字段,存储器中的每个块对应到 cache 中唯一的组,并且块可以放在这个组中的任何位置上。
组相连映射的关系可以定义为:
本文作者:Haibersut
本文链接:https://www.cnblogs.com/haibersut/p/16953899.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步