计算机组成原理 Cache超仔细详解 期末一遍过

一.为什么要使用Cache(什么是Cache)?

  • 我们都知道,CPU主频的提升会带动系统性能的改善,但系统性能的提高不仅取决于CPU,还与系统架构、指令结构、信息在各个部件之间的传送速度及存储部件的存取速度等因素有关,特别是CPU与主存之间的存取速度有关
  • 若CPU工作速度特别高,但内存存取速度相对较低,则造成CPU等待,降低处理速度,一定程度上是在浪费CPU的能力。
  • 由以上两点,我们得知要想进一步改善计算机系统的性能,就应该减少CPU与内存之间的速度差异,所以我们可以在慢速的DRAM和快速的CPU之间插入一至多级的速度较快、容量较小的SRAM起到缓冲作用;使CPU既可以较快地存取主存中的数据,又不使系统成本上升过高,这就是Cache法
    Cache的作用

二.Cache采用的程序访问的局部性原理

1.程序访问的局部性原理是什么?

  • 程序访问的局部性:在一个较短的时间间隔内,由程序产生的地址往往集中在存储器逻辑地址空间的很小范围内,这种对局部范围的存储器地址频繁访问,而对此范围以外的地址则访问甚少的一种现象。
    程序访问的局部性原理
  • 程序访问的局部性原理和Cache的关系:利用程序访问的局部性原理,可以在主存和CPU的通用寄存器之间设置Cache,把正在执行的指令地址附近的一部分指令或数据从主存调入这个寄存器,供CPU在一段时间内使用,从而提高CPU访问存储系统的速度。当程序继续执行时,程序访问的局部性原理也不断变化,新的数据将不断地从主存调入Cache中替换掉原有的数据。

三.Cache的工作原理

1.主存地址的划分

在这里插入图片描述

  • 为了方便比较和快速查找,Cache和主存都被分成了若干大小相同的块,每块又包含若干个字。显然Cache分块数远远小于主存的分块数。
  • 上述地址中不同字段的作用分别如下:
  • 主存块地址:是CPU访问主存单元地址按块大小划分后得到的一个地址,用于标识CPU所访问的主存单元所在的主存块号。通过该地址可以缩小查找的范围。
  • 块内偏移地址:又称块内地址,表示CPU所要访问的单元在某块的偏移值,找到数据所在的块后,根据该值可以定位CPU要访问的具体单元。
  • 索引:即作为Cache存储体的地址指示器,指出CPU访问Cache存储体的范围,如指定Cache的某一行或某几行。
  • 标记:标记也是对主存块地址进一步划分后得到的更细粒度的地址,作为判断CPU所要访问的内容是否在Cache中的依据。

2.Cache的基本结构

Cache的结构主要包括3部分:

  • 数据存储体:用于存放主存数据的副本。
  • 标记存储体:用于存放标记,不同类型的映射方式标记位数不同。因此,所需要的标记存储体的容量也不同。
  • 有效位:用来标识存放在Cache中的数据是否有效,CPU查找Cache以及Cache更新时都需要使用有效位。

在这里插入图片描述

3.Cache的组织及CPU访问Cache的流程

在这里插入图片描述

  • 该图为CPU在不同情况下访问Cache的流程,下面我们以读操作为例,将对其进行进一步的详细分析。
  • Cache命中的流程:
    (1)对CPU访问存储器的地址进行逻辑划分,从而得到标记、索引、块内地址。
    (2)按照索引字段的值我们从Cache标记存储体的特定单元读出标记值,并与(1)中的标记值进行比较。
    (3)若比较结果相同(命中),则形成Cache地址。
    (4)根据形成的Cache地址访问Cache数据存储体,其中标记部分定位访问数据存储体的范围,而块内地址在该范围内找到所要访问的访问单元
    (5)从Cache读出的信息送至CPU。
  • Cache不命中的流程:
    (1)对CPU访问存储器的地址进行逻辑划分,从而得到标记、索引、块内地址。
    (2)按照索引字段的值我们从Cache标记存储体的特定单元读出标记值,并与(1)中的标记值进行比较。
    (3)比较结果不同(称为不命中),说明CPU所要的访问单元不在Cache中,则进入Cache替换策略中。
    (4)若Cache数据存储体内已满,则将Cache数据存储体中某单元的数据块交换到主存中 ,被换出数据的单元地址也由索引字段指出;若Cache数据存储体内未满,则将信息从主存中调入Cache的数据存储体内,存放的位置与映射方法有关,任由索引字段指出。
    (5)从主存向Cache数据存储体调入数据块后,同时将CPU访问单元的信息直接送至CPU。
    (6)更新Cache标记存储体内特定单元的标记,单元的地址与采用的地址映射方式有关,任由索引字段指出。

4.Cache的命中率计算详解

为了评价Cache系统的效果,引入命中率的概念。

  • 设Nc为某程序在运行过程中命中Cache的次数,Nm为从主存中访问信息的次数,则命中率(hit radio)H定义为:
    在这里插入图片描述
    • 1-H为丢失率(miss radio),或称为未命中率。若以Tc表示命中时Cache的访问时间Tm表示未命中时访问主存的时间,则Cache/主存系统的平均访问时间Ta为:
      在这里插入图片描述
    • 设计高速缓冲存储器的目的是以较小的硬件开销使 Cache/主存系统的平均访问时间Ta越接近Tc越好。若以E=Tc/Ta作为访问效率,则有:
      在这里插入图片描述其中r=Tm/Tc,表示主存访问时间与Cache访问时间的倍数。
    • 我们不难看出,存储系统的访问效率主要与H和r有关,命中率H越接近1,E越高,另外r的值不能太大,一般为5~10左右。

四.Cache的地址映射及变换方法

1.什么是Cache的地址映射?

  • 地址映射是指把主存地址空间映射到Cache的地址空间,即把存放在主存中的程序或数据按照某种规则装入Cache,并建立两者之间地址的对应关系。

2.什么是Cache的地址变换?

  • 地址变换是指在程序运行时,根据地址映像函数把主存地址变换成Cache地址。地址映射与变换方法有关,不同的地址映射方法具有不同的地址变换方法。

3.三种地址映射方法:

(1)全相联映射

在这里插入图片描述在这里插入图片描述在这里插入图片描述

(2)直接映射

在这里插入图片描述在这里插入图片描述在这里插入图片描述

(3)组相联映射

在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

五.Cache的三种替换算法

1.先进先出(FIFO)

FIFO算法选择最早调入Cache的字块进行替换,它不需要记录各字块的使用情况,比较容易实现,开销小,但没有根据访存的局部性原理,故不能提高Cache的命中率。因为最早调入的信息以后可能还要用到。

2.近期最少使用(LRU)和最不经常使用(LFU)

LRU将近期内长久未被访问过的行换出。为此,每行设置一个计数器,Cache每命中一次,命中行计数器清零,其他各行计数器增1,因此它是未访问次数计数器,能有效提高Cache命中率。
LFU是将一段时间内被访次数最少的那行数据换出,每行设置一个计数器,新调入行的数据从0开始计数,每访问一次计数器加一。但是,LFU的不足是无法严格反映近期访问情况,若特定行中的A、B两行,A在前期被频繁访问而后期未被访问,而B在前期未被访问而后期被频繁访问,则B有可能因为计数小于A而被替换。

3.随机法

随机法就是随机地确定被替换的块,这种方法实现最容易,但是不能提高Cache的命中率,在有的情况下甚至会降低命中率。

猜你喜欢

转载自blog.csdn.net/qq_43663263/article/details/102797565