Cache缓存

在计算机系统,Cache使用RAM(随机存取存储)作为存储介质,这种存储介质访问速度比硬盘等其他存储介质要快得多。Cache的目的是减少处理器等高速组件访问低速存储器(例如硬盘)的次数。使用Cache,处理器可以更快地访问数据,从而提高系统性能。

为什么使用Cache

避免CPU空等现象。

Cache工作原理

主存和缓存编址

从主存储器中 按块取出数据

Cache块上的标记:标记了主存块与Cache块之间的对应关系(如果一个主存块写入Cache块中,就可以把主存块号写入Cache块的标记中)

为了提高Cache的效率,Cache块的大小应该与主存块大小尽量相等。这样,在访问主存块的同时,Cache块也可以被加载到Cache中,提高访问速度和性能。

命中与不命中

命中:主存和缓存建立了对应关系

命中:主存和缓存没有建立对应关系

Cache命中率

CPU访问的信息在Cache中的比率

命中率与Cache的容量和块长有关。

Cache块大小一般取4-8个字。块长一般取一个存取周期从主存调出的信息长度

Cache-主存系统的效率

效率e命中率有关:$e = {访问Cache的时间 \over 总共的访问时间} * 100\%$

设命中率h,访问Cache时间$t_{c}$,访问主存时间$t_{m}$

则 $e = {t_{c} \over h*t_{c}+(1-h)*t_{m}} * 100\%$

Cache的基本结构

image-20230515204619819

主存Cache地址映射

将主存映射到Cache中,确定主存与Cache之间的对应关系。

主存Cache地址变换

完成主存块到Cache块的查找操作。

替换

如果Cache装满了,使用替换算法(不要求掌握)来确定哪些Cache块需要退出缓存,并写入主存块。

Cache的读写操作

读操作

先判断命中,若命中则直接在缓存中读出数据,若不命中分类讨论:

  • 肯定需要访问主存拿出数据并发送给CPU
  • 将数据放入Cache,方便后续使用:
    • Cache满了,则启用替换,将主存读出的数据放入Cache。
    • Cache未满,则直接将主存读出数据放入Cache。

写操作

  • 写直达法:
    • 写入Cache的同时也写入主存。
    • 时间:写主存的时间。
    • 特点:简单,保证Cache与主存数据的一致性。
  • 写回法:
    • 写Cache时不写入主存,Cache块退出(被替换)时,将数据写回主存。
  • 写直达法与写回法优缺点比较:
    • 假设有一个累加操作:
      • 写直达法:每加一次都会访问主存。性能差。
      • 写回法:完全加完后将结果写回主存。性能好。
    • 主存Cache数据一致性:
      • 一个主存块可能在不同Cache中存在多个副本。
      • 无法保证Cache之间的副本数据一致。

Cache-主存的地址映射

直接映射

  • 主存编号与Cache能放的总块数取模 (分区操作),再放入到对应的Cache块中。

    • 例如主存块为5号,Cache中最多放4块,则$5\%4=1$,将其放入1号Cache块。
  • 主存块标记 t位(区号) --- Cache块地址 c位(块号) --- 字块内地址 b位 (t+c=m位)

全相联映射

  • 主存中的每个块都可以映射到缓存中的任意一个单元格。
  • 标记快(t+c位)--- 字块内地址(b位)
  • 需要和每个标记比较,性能差,但更灵活。

组相联映射

全相联映射和直接映射的折中方案。

  • Cache分块,块分组。
  • Cache有多少组,主存每个区就有多少块。
  • 主存中每个区的第i块,可以放在Cache第i组(直接映射特点)的任意一个块(全相联特点)。
最后修改:2023 年 05 月 15 日
如果觉得我的文章对你有用,请随意赞赏