高速缓冲存储器(Cache)

高速缓冲存储器 ( C a c h e ) \color{olive}{\huge{高速缓冲存储器(Cache)}} 高速缓冲存储器(Cache)

背景

随着技术的发展, C P U CPU CPU和主存的运算速度的变化并不是一致的,之间发生了很大的速度差异。为了调和这种速度的差异, 需要一个速度介于两者之间的装置作为中介 \red{需要一个速度介于两者之间的装置作为中介} 需要一个速度介于两者之间的装置作为中介,这就是 C a c h e \blue{Cache} Cache

C a c h e Cache Cache出现是为了避免 C P U CPU CPU出现“ 空等 \red{空等} 空等”的现象。
在这里插入图片描述

程序访问的局部性原理

  1. 时间的局部性:当前正在使用的数据,在不久的将来应该还会被使用,所以要放入到 C a c h e Cache Cache中便于下一次使用。
  2. 空间的局部性:当前正在使用的数据,它相邻周围的数据,在不久的将来也有可能会被使用到,所以需要放入到 C a c h e Cache Cache中做准备。

C a c h e \blue{Cache} Cache的工作原理

  1. 主存与缓存的编址 \red{主存与缓存的编址} 主存与缓存的编址
    在这里插入图片描述
    ① . ①. ①. 主存与 C a c h e Cache Cache中的存储空间都是进行分块的,并且这个 块的大小完全一致 \red{块的大小完全一致} 块的大小完全一致,但是主存中块的数量是是远远多于 C a c h e Cache Cache中块的数量的。 ② . ②. ②.主存与 C a c h e Cache Cache进行数据交换的时候,块的先后顺序保持高度的一致。 ③ . ③. ③. C a c h e Cache Cache中在标记,可以记录主存中哪一个块进入到了 C a c h e Cache Cache中,当主存向 C a c h e Cache Cache中传输数据的时候也会扫描所有的标记查询是否已经传输过。

  2. 命中 ( H i t ) 与未命中 ( M i s s ) \red{命中(Hit)与未命中(Miss)} 命中(Hit)与未命中(Miss)
    主存中的块数远大于 C a c h e Cache Cache中的块数,注定了主存中所有的数据不能够全部放入到 C a c h e Cache Cache中。
    ①. 命中 ( H i t ) \blue{命中(Hit)} 命中(Hit) C P U CPU CPU要访问的主存块已经存储到了 C a c h e Cache Cache中,并且使用标记记录存储了主存块号。 主存块与缓存块建立了对应的关系 \purple{主存块与缓存块建立了对应的关系} 主存块与缓存块建立了对应的关系
    ②. 未命中 ( M i s s ) \blue{未命中(Miss)} 未命中(Miss) C P U CPU CPU要访问的地址没有放入到 C a c h e Cache Cache中,只能够由 C P U CPU CPU亲自进行访问。 主存块与 C a c h e 之间没有建立联系 \purple{主存块与Cache之间没有建立联系} 主存块与Cache之间没有建立联系

  3. C a c h e 命中率 \red{Cache命中率} Cache命中率
    C P U CPU CPU想要访问的信息在 C a c h e Cache Cache中的比率,与 C a c h e Cache Cache中的 容量 \purple{容量} 容量 块长 \purple{块长} 块长有关。

  4. C a c h e − 主存系统的效率 \red{Cache-主存系统的效率} Cache主存系统的效率
    e = 访问 C a c h e 的时间 平均访问时间 ∗ 100 % e = \frac{访问Cache的时间}{平均访问时间} * 100\% e=平均访问时间访问Cache的时间100%
    在这里插入图片描述

① . ①. ①. 可以知道 e e e的范围是在 0 − t c t m 0 - \frac{t_{c}}{t_{m}} 0tmtc ② . ②. ②. C P U CPU CPU访问 C a c h e Cache Cache和主存是 并行的 \red{并行的} 并行的

C a c h e 的基本结构 \blue{Cache}的基本结构 Cache的基本结构

在这里插入图片描述

  1. C a c h e 存储体: \blue{Cache存储体:} Cache存储体:
    C a c h e Cache Cache中分号的块空间都是存储在存储体中。
  2. 地址映射与变换机构: \blue{地址映射与变换机构:} 地址映射与变换机构:
    映射是主存中的块应该放到 C a c h e Cache Cache中的那个一个块,变换则是将主存中块在 C a c h e Cache Cache中对应块的查找。
  3. 替换机构: \blue{替换机构:} 替换机构:
    主存中由新的块即将放入 C a c h e Cache Cache中,但是 C a c h e Cache Cache中的存储空间已经满了,需要替换机构进行相应块的替换来存储新的块。

C a c h e \blue{Cache} Cache 读写 \purple{读写} 读写操作

读: \red{读:} 读:
在这里插入图片描述

写: \red{写:} 写:
根据 C a c h e Cache Cache与主存再写入数据时候的一致性可以分成两种方式:

  1. 写直达法: \blue{写直达法:} 写直达法:
    进行写操作的时候既写入 C a c h e Cache Cache又写入主存。时时刻刻保证 主存和 C a c h e 中写入的数据同步 \red{主存和Cache中写入的数据同步} 主存和Cache中写入的数据同步。写操作时间就是访问主存的时候, C a c h e Cache Cache退出的时候,因为同步进行写入,所以对于主存也无需其他操作。
    💥💥💥但是会频繁让访问主存。
  2. 写回法: \blue{写回法:} 写回法:
    进行写操作的时候,只将数据写入到 C a c h e Cache Cache中,而不写入主存,当 C a c h e Cache Cache中的数据被替换的时候,才会将数据写入主存。 允许了 C a c h e 与主存写入数据的时候不同步 \red{允许了Cache与主存写入数据的时候不同步} 允许了Cache与主存写入数据的时候不同步。写操作时间就是访问 C a c h e Cache Cache的时间。 C a c h e Cache Cache退出的时候,还需要将被替换的块中的数据写入主存。
    💥💥💥复杂性很高

C a c h e 的改进 \blue{Cache}的改进 Cache的改进

在这里插入图片描述

C a c h e 的地址映射 \blue{Cache}的地址映射 Cache的地址映射

地址映射: \red{地址映射:} 地址映射:内存中的数据块如果存放到 C a c h e Cache Cache中,那么可以存放到哪些地址中。

C a c h e − 主存的地址映射 Cache - 主存的地址映射 Cache主存的地址映射

  1. 直接映射: \blue{直接映射:} 直接映射:
    在这里插入图片描述
    💥💥💥 ① . 主存储体分块: ①.\red{主存储体分块:} ①.主存储体分块:
    根据 C a c h e Cache Cache存储体的大小,将主存储体的空间分为若干个与 C a c h e Cache Cache存储体等大的块。每个块中的字块数与 C a c h e Cache Cache中字块数也完全相同。
    💥💥💥 ② . 直接映射体现: ②. \red{直接映射体现:} ②.直接映射体现:
    对于主存储体中每个块中的字块,都只能够放在 C a c h e 存储体中相应的字块。 \purple{对于主存储体中每个块中的字块,都只能够放在Cache存储体中相应的字块。} 对于主存储体中每个块中的字块,都只能够放在Cache存储体中相应的字块。如图中主存储体中三个蓝色块只能够放入 C a c h e Cache Cache中对应的蓝色块。
    💥💥💥 ③ . 地址标记: ③. \red{地址标记:} ③.地址标记:
    在这里插入图片描述
    m m m位用来标记数据块的地址, b b b位用作偏移量,标记到底是数据块中哪个字块。
    💥💥💥 ④ . 比较器: ④. \red{比较器:} ④.比较器:
    在这里插入图片描述
    H i t / M i s s Hit/Miss Hit/Miss判断器,主存数据写入 C a c h e Cache Cache的时候需要判断 C a c h e Cache Cache中是否已经记录了该数据块的数据, 通过遍历标记 ( 地址 ) 来判断 \purple{通过遍历标记(地址)来判断} 通过遍历标记(地址)来判断
    ⑤ . 特征: ⑤. \red{特征:} ⑤.特征:结构实现非常简单,但是 C a c h e Cache Cache块的利用率比较低,而且出现冲突的概率非常大。
    在这里插入图片描述

  2. 全相联映射: \blue{全相联映射: } 全相联映射:
    在这里插入图片描述
    ① . 全相联映射体现: ①. \red{全相联映射体现:} ①.全相联映射体现:主存储器中的每个字块都可以 任意 \purple{任意} 任意的放入到 C a c h e Cache Cache中的字块中。
    ② . 地址确定: ②. \red{地址确定:} ②.地址确定:
    在这里插入图片描述
    ③ . 特征: ③. \red{特征:} ③.特征: C a c h e Cache Cache空间利用率极高,映射的时候所需要的比较流程非常麻烦,比较的次数很多。

  3. 族相联映射 \blue{族相联映射} 族相联映射
    ( 直接相联和全相联的折中 ) \color{orange}{(直接相联和全相联的折中)} (直接相联和全相联的折中)
    在这里插入图片描述
    ① . C a c h e 块和主存块中的分组: ①. \red{Cache块和主存块中的分组:} ①.Cache块和主存块中的分组: C a c h e Cache Cache数据存储体中, 将多个字块放在一起存储形成多个整体数据块 \purple{将多个字块放在一起存储形成多个整体数据块} 将多个字块放在一起存储形成多个整体数据块。每个数据块都有自己的编号。在主存储器中根据 C a c h e Cache Cache中数据块中字块个数进行相应分组。
    ② . 结构特征: ②. \red{结构特征:} ②.结构特征: 组内全映射,组间直接映射 \blue{组内全映射,组间直接映射} 组内全映射,组间直接映射
    图中主存储器中蓝色的块,只能够放在 C a c h e Cache Cache中的 0 0 0号地址对应的数据块( 组间直接映射 \purple{组间直接映射} 组间直接映射)。但是在 0 0 0号地址对应的数据块内的字块中,可以随意进行放置( 组内全映射 \purple{组内全映射} 组内全映射)。
    ③ . 地址确定: ③. \red{地址确定:} ③.地址确定:
    在这里插入图片描述

映射总结 \color{olive}{\huge{映射总结}} 映射总结
在这里插入图片描述

替换算法 替换算法 替换算法

如果 C a c h e Cache Cache中的数据块已经填满了,这个时候来了新的数据块需要填入,那么 C a c h e Cache Cache就需要对已经填入的数据块进行替换操作:

  1. F I F O ( 先进先出算法 ) \blue{FIFO(先进先出算法)} FIFO(先进先出算法)
    默认先进入的数据块是已经用完的数据了,直接替换这种数据即可。
    ❌ ❌ 这个算法有着十分明显的不足
  2. L R U ( 近期最少使用算法 ) \blue{LRU(近期最少使用算法)} LRU(近期最少使用算法)
    寻找到 最近一段时间最少使用的数据块 \purple{最近一段时间最少使用的数据块} 最近一段时间最少使用的数据块,将这个数据块中的数据进行替换。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值