知识点:缓存器
cpu 通过内存地址 A 来访问高速缓存,地址A可分为:[标记位 t] – [索引位 s] – [偏移位 b]。
因此,高速缓存由 S=2^s 个组组成,每个组包括 E 个高速缓存行,每一行又包含了:1个有效位,t个标记位,B=2^b 个字节的数据。
一般而言,高速缓存结构表示为(S, E, B, m)(m 是访问地址的位数)。缓存的大小则表示为 C=S*E*B。
那么,要如何命中缓存呢?
给定地址A,根据索引位,匹配到组,根据标记位,匹配到行,根据偏移位来确定字节。
假设,当前存储器空的,CPU 开始访问地址A,首先通过索引位匹配到组,然后通过标记位匹配到行,因为缓存还是空的,因此,缓存不命中,开始向下一级缓存读取数据。
将取回的数据和地址的标记位一起方式缓存行中,同时,有效位标记为1,缓存成功。
CPU 第二次用同样地址A访问,通过索引位匹配,标记位匹配,有效位检验,缓存命中,通过偏移位成都读取字节数据。
随着CPU的运行,高速缓存空间逐渐被占满,直到访问地址B,通过索引位匹配到组b,在通过标记位匹配,因为组b中有多个缓存行,且每行都有缓存过的标记位(被占满),但通过遍历标记位也没有与地址B中的标记位匹配上。
这时,只能通过一定的规则,比如随机,来删除之前的缓存行,来缓存下一级缓存返回的新数据。
缓存中数据随着程序的运行,被逐渐填满,然后通过一定的策略来更新数据。
这也再次说明,在缓存空间有限的情况下,局部性好的程序能得到更快的运行。
软硬件在局部性原理的指导下相互影响,相互强化。
相关推荐链接:
0人已收藏
0人已打赏
免费1人已点赞
分享
电气工程原创版块
返回版块2.19 万条内容 · 578 人订阅
回帖成功
经验值 +10
全部回复(0 )
只看楼主 我来说两句抢沙发