基于计算机组成的简单Cache讲解

本文目录

  • 为什么需要Cache
  • Cache的基本特点
  • 什么样的数据需要放入Cache
  • Cache的基本结构
  • Cache的工作流程
  • Cache的补充
  • Cache的改进

为什么需要Cache(高速缓冲存储器)?

我们都知道CPU处理数据的速度非常快,虽然内存的读写速度也不慢,但是相对于CPU它的速度就显得太慢了,所以如果单纯地让CPU对内存进行读写,所消耗的时间绝大部分是在内存对数据的处理上,而这时候CPU就在空等,浪费了资源,因此就需要在CPU与内存之间连接一个Cache来作为缓冲。

Cache的基本特点

由于Cache是为了缓解内存处理数据太慢而出现的,因此Cache应该具备的一个基本特点就是读写数据的速度快,能够比较好地匹配CPU的速度,尽可能地让CPU忙起来,但是就是因为它处理速度快,所以就造成了它的容量比较小,如果能够既可以容量大又可以速度快的话直接把内存的速度提高到匹配到CPU的速度就好了,但是由于材料的价格,技术复杂度等等原因,Cache还是很必要的。

什么样的数据需要放入Cache?

前面提到Cache的两大特点,速度快与容量小,就容量小这特点来说,我们就不能把所有的数据都放到Cache里,所以Cache里应该放CPU最有可能会对它进行处理的数据。
说到这里就不得不提到程序运行的局部性原理,这个原理完美地解释了什么样的数据很可能会被CPU处理,它包含两个部分:时间局部性与空间局部性。

  • 时间局部性是指当CPU处理了一个数据以后它很有可能会对它进行第二次处理。
  • 空间局部性是指CPU处理了内存中某一块的数据,它很可能会还对它附近的数据块进行读写操作。

所以这些就是需要放入CPU的数据,在CPU对某一数据进行操作后主存与Cache就开始行动,将可能需要的数据放入到Cache中。

Cache的基本结构

Cache的存储体的基本存储单元为块,每一个块内有块内地址,Cache的地址通过块号与块内地址来表示。除了块之外还有标记,通过标记来识别此时Cache里有误想要的数据,如果标记里有则直接对Cache进行处理,如果在标记里没有找到,则再对主存进行数据传输。Cache里还有几个机构,替换机构地址映射变换机构

Cache的工作流程

Cache的操作可以分为读操作写操作。在介绍操作之前首先应该介绍一下Cache几个机构的作用。

  • 替换机构:在CPU对内存进行读写操作时,如果发现想要的数据在Cache里没有,而且Cache的容量满了的情况下就需要对Cache旧的数据进行替换。
  • 地址映射变换机构:这个机构其实可以分为两个,映射机构与变换机构
    - 映射机构:可以查看将数据放到哪些块中
    - 变换机构:可以将Cache的块号与主存的块号相互转换
  • 读操作
    CPU对数据进行读操作时,首先应该查看Cache里的标记中有没有对应地址,如果发现Cache中有要找的数据,则直接从Cache中读取,节省时间。如果发现Cache中没有,则需要到内存中去读取,根据程序运行的局部性原理(时间局部性与空间局部性),需要将相关的数据写入Cache中,方便下一次的读操作,这时如果Cache中数据没满,则直接写入Cache,如果满了,就需要Cache的替换机构对需要替换的数据进行替换,将数据放入Cache存储体中。
  • 写操作
    写操作分为两种,写直达法与写回法。
    写直达法:将要写入的数据既写入Cache又写入主存,写操作的时间就是访问主存的时间。
    写回法:只把数据写入Cache而不写入主存,当Cache数据被替换出去时才写回主存

Cache的补充

  • 命中率:对于Cache来说,如果CPU要进行读写操作的数据在Cache中,则称为命中,如果不在Cache中,则没有命中。
  • Cache-主存的地址映射

直接映射:Cache与主存直接映射 主存被划分为多个区,Cache里的每一个块对应主存每个区的相应的块,Cache的一个块可对应主存每个区的相应的块,由区号选出具体的块,然后由子块内地址(偏移量)选定具体的数据 缺点:利用率较低
全相联映射:Cache的各个块对应主存储器的各个块
组相联映射:在直接映射的基础上Cache的每个组的块数变成了两块或者若干块,导致一块占满时可以放到另外一块

  • Cache的替换算法

在Cache的替换机构进行替换时需要采用相关的替换算法。
先进先出(FIFO)算法 缺点:可能会替换掉更有用的数据,没有体现程序运行局部性原理
近期最少使用(LRU)算法:将近期最少使用的块替换掉

Cache的改进

  • 增加Cache的级数
  • 统一缓存和分立缓存
    指令Cache 数据Cache

只适用于初学的朋友,如有错误,希望朋友们指正,一起加油!

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐