cache的基本原理

本文详细介绍了缓存(Cache)技术,包括其缓解CPU与主存速度差异的功能、基于局部性原理的工作机制、写操作的处理方式(写穿、写缓冲、写回策略)、地址映射机制(全相联、直接映射、组相联映射)以及替换算法(FIFO、LFU、LRU等)。通过对这些核心概念的解析,深入理解缓存如何提升系统性能。
摘要由CSDN通过智能技术生成
cache视图

在这里插入图片描述cache的功能是缓解高速CPU和慢速主存之间的速度差异。
理论基础是局部性原理

cache的工作过程

CPU访问cache是以字为单位进行的,而主存中的存储是块。每个块也由一个单独的字组成。
CPU每次访问cache,如果命中了cache中的数据就返回给CPU,如果没有命中,则需要访问主存,这就导致了访问速度的急剧下降。

  • cache写操作处理
    写穿策略:也叫写直达,就是写操作同时更新cache和主存,保持二者的一致性。
    写缓冲:有一个缓冲队列,一个数据被写入主存时,先将它放到cache和写缓冲中,然后处理器继续执行,当数据被写入主存后,写缓冲中的数据项被释放。
    写回策略:当发生写操作时,新值仅仅被写入cache块中,只有当修改过的块被替换时才写到较低层次的存储其中。
cache的地址映射机制
  • 主存中的地址划分为块地址块内偏移,块地址又划分为tag索引index;tag判断数据是否在cache中,index指明在cache的具体读写位置。
  • cache被划分成若干行,每行的大小与主存块相同。每行包括四个部分:Tag是从CPU访问主存的地址中剥离出来的;Data是cache与主存交换的数据块;Valid表示cache中的数据是否有效;Dirty表示主存中的数据是否是最新的。
    在这里插入图片描述
    在这里插入图片描述
相联存储器

相联存储器的功能是实现快速在cache中查找比较。
基本结构时:
在这里插入图片描述
首先从主存地址中剥离出关键字Key,以Key为关键字进行全局硬件并发比较。存储体中存放有效位、标记、数据信息等;符合寄存器存放cache命中行信息,根据符合寄存器的信息取出命中行中的数据。

cache地址映射与变换方法
  • 全相联映射
    首先将主存分块cache分行,二者的大小相等。主存中的数块可以映射到cache的任意一行,同时将该数据地址的标记存储在存储体中。
    主存的地址被分为两部分,一部分是块号,另一部分是块内偏移地址
    CPU访问存储时,指令根据主存地址首先访问cache,由于数据在cache中时随机存储的,需要用多路并发比较线路进行并发比较,如果在cache中找到就命中,如果没有就根据地址访问主存,从主存地址中分离出标记Tag,这里应该就是相应的块号,同时将数据存入随机的一行,有效位置1。之后访问就是这个过程。

    全相联映射的特点:cache的利用率高;块冲突概率低;淘汰算法复杂。
    适用于小容量cache。

  • 直接映射
    首先也要对主存和cache划分,主存分块,cache分行,两者的大小一样。
    主存分块后根据cache行数分区,如cache有四行,那么主存就是每四个块一个分区。主存地址被分为三部分,前边高位是数据的所在区号,中间的是区内块号(也对应cache的行),最后一部分是块内偏移地址。
    映射算法是:假设cache有n行,主存第j块映射到cache的第i行, i = j m o d   n i=jmod \ n i=jmod n映射到了特定的行。

CPU访问时,根据主存地址划分出的中间部分index,访问特定的行,如果cache中没有,没有命中,就根据主存地址访问主存,将数据存到cache特定的行,标记位置为1,区号存到tag中。如果命中,根据偏移地址从特定行中取出相应的数据。

直接映射的特点:空间利用率低;块冲突率高;淘汰算法简单。
适用于大容量的cache。

  • 组相联映射
    首先将cache分行,主存分块,两者大小相等。
    然后将cache分组,分组的依据是每组k行,再将主存分组,cache有几组,主存每组就有几个块。
    同样,主存的地址被分为三部分,从高位到低位分成的对应部分分别是:主存组号、cache组号、块内偏移地址
    映射算法:假设cache有n组,主存中第j块数据映射到cache的组号为:
    i = j   m o d   n i=j\ mod\ n i=j mod n
    即映射到特定组的任意行。

CPU访问时,根据主存地址划分为三部分,用比较器比较特定组的所有行,如果没有命中,就根据地址访问主存,将主存的数据存到cache中特定组的任意行,主存地址划分的主存组号存到tag中,有效位置为1。

组关联的特点介于直接映射和全相联映射,适用范围也介于二者之间。

替换算法

cache在使用一段时间后,空间会满,新进来的数据需要替换一定的数据块。
常见的算法有:

  • 先进先出算法FIFO
    用一个计数器记录先进来的数据,新进来的需要替换时替换掉最先进来的数据,即计数大的。
  • 最不经常使用算法LFU
    用计数器记录每个数据命中的次数,替换时替换命中次数最小的。
  • 近期最少使用算法LRU
    用一个计数器记录一定时间周期中一个数据没有命中的次数,如果命中计数器减一,没有命中加一,替换掉计数器大的数据。
  • 随机算法
  • 4
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

up-to-star

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值