计算机组成原理 第三章(存储器)—第四节(高速缓冲存储器)

本文详细介绍了Cache在计算机组成原理中的作用,包括解决速度不匹配问题、程序访问局部性原理的应用,以及Cache的工作原理、基本结构、读写操作和改进方法。还探讨了不同地址映射和替换策略,如直接映射、全相联映射、LRU和LFU算法。
摘要由CSDN通过智能技术生成

写在前面:

  1. 本系列笔记主要以《计算机组成原理(唐朔飞)》为参考,大部分内容出于此书,笔者的工作主要是挑其重点展示,另外配合下方视频链接的教程展开思路,在笔记中一些比较难懂的地方加以自己的一点点理解(重点基本都会有标注,没有任何标注的难懂文字应该是笔者因为强迫症而加进来的,可选择性地忽略)。
  2. 视频链接:计算机组成原理(哈工大刘宏伟)135讲(全)高清_哔哩哔哩_bilibili

一、概述

1、Cache的作用

(1)在多体并行存储系统中,由于I/O设备向主存请求的级别高于CPU访存,这就出现了CPU等待I/O设备访存的现象,致使CPU要空等一段时间,从而降低了工作效率。为了避免CPU与I/O设备争抢访存,可在CPU与主存之间加一级缓存,这样主存可将CPU要取的信息提前送至缓存,主存在与I/O设备交换时CPU可以直接从缓存中读取所需信息,而不必空等

(2)主存速度的提高始终跟不上CPU的发展,Cache的出现也是为了解决主存与CPU之间速度不匹配的问题,CPU可以不直接访问主存,而与高速Cache交换信息。

(3)通过大量典型程序的分析,发现CPU从主存取指令或取数据,在一定时间内只是对主存局部地址区域的访问,这是因为指令和数据在主存内都是连续存放的,并且有些指令和数据往往会被多次调用,即指令和数据在主存的地址分布不是随机的,而是相对的簇聚,使得CPU在执行程序时,访存具有相对的局部性,这就称为程序访问的局部性原理。根据这一原理,很容易想到,只要将CPU近期要用到的程序和数据提前从主存送到Cache,那么就可以做到CPU在一定时间内只访问Cache

(4)Cache的速度比主存快,但是其价格却比主存贵,所以直接用等容量的Cache代替主存显然是不现实的,而且也没有必要。

2、Cache的工作原理

(1)下图所示的是Cache-主存存储空间的基本结构示意图,主存由2^{n}个可编址的字组成,每个字有唯一的n位地址。

①为了与Cache映射,将主存与缓存都分成若干块,每块内又包含若干个字,并使它们的块大小相同(即块内的字数相同),这就将主存的地址分成两段——高m位表示主存的块地址、低b位表示块内地址,则2^{m}=M表示主存的块数

②同样,缓存的地址也分为两段——高c位表示缓存的块号、低b位表示块内地址,则2^{c}=C表示缓存块数,且C远小于M

③主存与缓存地址中都用b位表示其块内字数,即B=2^{b}反映了块的大小,称B为块长。

(2)任何时刻都有一些主存块处在缓存中,CPU欲读取主存某字时有两种可能:

所需要的字已在缓存中,这种情况下直接访问Cache即可(CPU与Cache之间通常一次传送一个字)。

所需的字不在Cache中,此时需要将该字所在的主存整个字块一次调入Cache中(Cache与主存之间是字块传送,也就是一次传送一个字块)。

(3)如果主存块已调入缓存块,则称该主存块与缓存块建立了对应关系。上述第一种情况为CPU访问Cache命中(访问前目标主存块与缓存块建立了对应关系),第二种情况为CPU访问Cache不命中(访问前目标主存块与缓存块未建立对应关系)。

(4)由于缓存的块数C远小于主存的块数M,因此一个缓存块不能唯一地、永久地只对应一个主存块,于是每个缓存块需设一个标记标记用来表示当前存放的是哪一个主存块,该标记的内容相当于主存块的编号。CPU读信息时,要将主存地址的高m位(或m位中的一部分)与缓存块的标记进行比较,以判断所读的信息是否已在缓存中。

(5)Cache的容量与块长是影响Cache效率的重要因素,通常用“命中率”来衡量Cache的效率,命中率是指CPU要访问的信息已在Cache内的比率比率越接近1,说明访问效率越高)。

一般来说,Cache的容量越大,其CPU的命中率就越高,当然容量也没必要太大,太大将会增加成本,而且当Cache容量达到一定值时,命中率已不因容量的增大而有明显的提高

②块长与命中率之间的关系比较复杂,它取决于各程序的局部特性。当块由小到大增长时,起初会因局部性原理使命中率有所提高,但是倘若继续增大块长,命中率很可能会下降,这是因为所装入缓存的有用数据反而可能少于被替换掉的有用数据(由于块长的增大,导致缓存中块数的减少,而新装入的块要覆盖旧块,很可能出现少数块刚刚装入就被覆盖的情况,再者,块增大后,追加上的字距离已被访问的字更远,故近期被访问的可能性会更小)。块长的最优值是很难确定的,一般每块取4至8个可编址单位(字或字节)较好,也可取一个主存周期所能调出主存的信息长度。

3、Cache的基本结构

(1)Cache的基本结构原理框图如下图所示,它主要由Cache存储体、地址映射变换机构、Cache替换结构几大模块组成。

(2)Cache存储体:

        Cache存储体以块为单位与主存交换信息,为加速Cache与主存之间的调动,主存大多采用多体结构,且Cache访存的优先级最高。

(3)地址变换机构:

        地址变换机构的作用是将CPU送来的主存地址转换为Cache地址。由于主存和Cache的块大小相同,块内地址都是相对于块的起始地址的偏移量(即低位地址相同),因此地址变换主要是主存的块号(高位地址)与Cache块号间的转换

        如果转换后的Cache块已与CPU欲访问的主存块建立了对应关系,即已命中,则CPU可直接访问存储体;如果转换后的Cache块与CPU欲访问的主存块未建立对应关系,即不命中,此刻CPU在访问主存时,不仅将该字从主存中取出,同时还将它所在的主存块一并调入Cache,供CPU使用,当然,此刻能将主存块调入Cache内也是由于Cache原来处于未被装满的状态,倘若Cache已满,即无法再将更多的主存块调入Cache中时,就需要采用替换策略。

(4)替换机构:

        当Cache内容已满,无法接受来自主存块的信息时,就由Cache内的替换机构按一定的替换算法来确定从Cache内移出哪个块返回主存,而把新的主存块调入Cache。

4、Cache的读写操作

(1)读操作:

①Cache的读操作可用下图所示的流程图描述。

②读操作的流程:

[1]当CPU发出主存地址后,首先判断该存储字是否在Cache中

[2]若命中,直接访问Cache,将该字送至CPU;若未命中,一方面要访问主存,将该字传送给CPU,与此同时,要将该字所在的主存块装入Cache,如果此时Cache已装满,就要执行替换算法,腾出空位才能将新的主存块调入

(2)写操作:

①写操作比较复杂,因为对Cache块内写入的信息,必须与被映射的主存块内的信息完全一致,当程序运行过程中需对某个单元进行写操作时,就会出现如何使Cache与主存内容保持一致的问题,目前主要采用以下两种方法:

[1]写直达法:又称存直达法,即写操作时数据既写入Cache又写入主存,它能随时保证主存和Cache的数据始终一致,不过这种方法增加了访存次数。

[2]写回法:又称拷回法,即写操作时只把数据写入Cache而不写入主存,当Cache数据被替换出去时才写回主存。为了识别Cache中的数据是否与主存一致,Cache中的每一块都要增设一个标志位,该标志位有两个状态,分别表示数据块是否被修改过,在被替换出Cache时,未被修改过的块不必写回主存,被修改过的块则需要写回主存。

②写回法和写直达法各具特色:

[1]在写直达法中,由于Cache中的数据始终和主存保持一致,在读操作Cache失效时,只需选择一个替换的块(主存块)掉入Cache,被替换的块(Cache块)不必写回主存,可见读操作不涉及对主存的写操作,因此这种方法的更新策略比较容易实现,但是在写操作时,既要写入Cache又要写入主存,因此写直达法的“写”操作时间就是访问主存的时间

[2]在写回法中,写操作时只写入Cache,故“写”操作时间就是访问Cache的时间,因此速度较快。这种方法对主存的写操作只发生在块替换时,而且对Cache中一个数据块的多次写操作只需一次写入主存,因此可减少主存的写操作次数,但在读操作Cache失效时要发生数据替换,引起被替换的块写回主存的操作,增加了Cache的复杂性。

5、Cache的改进

(1)Cache刚出现时,典型系统只有一个缓存,近年来普遍采用多个Cache,其含义有两个方面。一是增加Cache的级数,二是将统一的Cache变成分立的Cache。

(2)单一缓存和两级缓存:

        所谓单一缓存,是指在CPU和主存之间只设一个缓存,随着集成电路逻辑密度的提高,又把这个缓存直接与CPU制作在同一个芯片内,故又称片内缓存(片载缓存)。

        由于片内缓存在芯片内,其容量不可能很大,这就可能导致CPU欲访问的信息不在缓存内,整机工作速度将会因此下降。如果在主存与片内缓存之间再加一级缓存,称为片外缓存,由比主存动态RAM和ROM存取速度更改的静态RAM组成,而且不使用系统总线作为片外缓存与CPU之间的传送路径,而是使用一个独立的数据路径以减轻系统总线的负担,那么从片外缓存调入片内缓存的速度就能提高,而CPU占用系统总线的时间也就大大下降,整机工作速度有明显改进。

(3)统一缓存和分立缓存:

        统一缓存是指指令和数据都存放在同一缓存内的Cache;分立缓存是指指令和数据分别存放在两个缓存中,一个称为指令Cache,另一个称为数据Cache。两种缓存的选用主要考虑以下两个因素:

        其一,它与主存结构有关,如果计算机的主存是统一的(指令、数据存储在同一主存内),则相应的Cache采用统一缓存;如果主存采用指令、数据分开存储的方案,则相应的Cache采用分立缓存。

        其二,它与机器对指令执行的控制方式有关,当采用超前控制或流水线控制方式时,一般都采用分立缓存。

二、Cache—主存地址映射

1、直接映射

(1)下图示出了直接映射方式主存与缓存中字块的对应关系,图中每个主存块只与一个缓存块相对应,映射关系式为i=j \, mod \, Ci=j \, mod \, 2^{c},其中i为缓存块号,j为主存块号,C为缓存块数,可见每个缓存块可以和若干个主存块对应,而每个主存块只能和一个缓存块对应

(2)这种方法的优点是实现简单,只需利用主存地址的某些位直接判断,即可确定所需字块是否在缓存中。由上图可见,主存地址高m位被分成两部分,低c位是指Cache的字块地址,高t位是指主存字块标记,它被记录在建立了对应关系的缓存块的“标记”位中,当缓存接到CPU送来的主存地址后,只需根据中间c位字段(假设为00…01)找到Cache字块1,然后根据字块1的“标记”是否与主存地址的高t位相符来判断,若符合且有效位为“1”(有效位用来识别Cache存储块中的数据是否有效),表示该Cache块已和主存的某块建立了对应关系(即已命中),则可根据b位地址从Cache中取得信息;若不符合,或有效位为“0”(即不命中),则从主存读入新的字块来替代旧的字块,同时将信息送往CPU,并修改Cache“标记”,如果原来有效位为“0”,还需要将有效位置成“1”

(3)这种方法的缺点是不够灵活,每个主存块只能固定地对应某个缓存块,即使缓存块内还空着许多位置也不能占用(比如Cache的字块1不能被主存的字块0占用),使缓存的存储空间得不到充分的利用,再者,如果程序恰好要重复访问对应同一缓存位置的不同主存块(比如CPU要反复访问主存中的字块0和字块2^{c},就要不停地进行替换,从而降低命中率

2、全相联映射

(1)全相联映射允许主存中每一字块映射到Cache中的任何一块位置上,这种映射方式可以从已被占满的Cache中替换出任一旧字块,显然这种方式更加灵活,命中率也更高。

(2)与直接映射相比,它的主存字块从t位增加到t+c位,这就使Cache“标记”的位数增多,而且访问Cache时主存字块标记需要和Cache的全部“标记”位进行比较,才能判断出所访问主存地址的内容是否已在Cache内

3、组相联映射

(1)组相联映射是对直接映射和全相联映射的一种折中,它把Cache分为Q组,每组有R块,并有关系i=j \, mod \, Q,其中i为缓存的组号,j为主存的组号。某一主存块按模Q将其映射到缓存的第i组内,如下图所示。

(2)与直接映射相比,Cache字块地址字段由c位变为组地址字段q位,且q=c-r,其中2^{c}表示Cache的总块数,2^{q}表示Cache的分组个数,2^{r}表示组内包含的块数,主存字块标记字段由t位变为s=t+r位。

(3)主存的第j块会映射到Cache的第i组内,两者之间一一对应,属直接映射关系;另一方面,主存的第j块可以映射到Cache的第i组内的任一块,这又体现出全相联映射关系。当r=0时,该方式即直接映射方式;当r=c时,该方式即全相联映射方式。

三、替换策略

1、先进先出(FIFO)算法

        FIFO算法选择最早调入的Cache字块进行替换,它不需要记录各字块的使用情况,比较容易实现,但没有利用访存的局部性原理,所以不能提高Cache的命中率,因为最早调入的信息可能以后还要用到或者经常要用到,如循环程序。

2、近期最少使用(LRU)算法

        LRU算法比较好地利用访存的局部性原理,替换出近期用得最少的字块,它需要随时记录Cache中各字块的使用情况,以便确定哪个字块是近期最少使用的字块,它实际是一种推测的方法(以近期使用字块的记录推断出短期内最可能不会使用的字块)。

        LRU算法可以只记录每个块最近一次使用的时间,具体实现是对每个块设置一个计数器,Cache每命中一次,命中块的计数器清零,其它块的计数器的值均加1,需要替换时比较各块配有的计数器,将数值最大的块换出即可。

3、最不经常使用(LFU)算法

        LFU算法也比较好地利用访存的局部性原理,替换出最不经常使用的字块,它同样要随时记录Cache中各字块的使用情况,以便确定哪个字块是最不经常使用的字块。

        LFU算法是将一段时间内被访问次数最少的字块换出,具体实现是每个块设置一个计数器,Cache每命中一次,命中块的计数器的值加1,需要替换时比较各块配有的计数器,将数值最小的块换出即可。

4、随机法

        随机法是随机地确定被替换的块,但它明显没有利用访存的局部性原理,故不能提高Cache的命中率。

  • 40
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 程序局部性是指在程序执行过程中,相同或相邻的指令和数据往往会被反复访问并多次使用的特性。其原理主要包括时间局部性和空间局部性。 时间局部性指的是在执行过程中,程序的某个指令或者数据项在一段时间内被反复多次使用。这是由于计算机执行时,指令和数据往往以顺序的方式被取出和执行,因此当前执行的指令和数据有较大的概率在近期内再次使用。 空间局部性指的是在执行过程中,程序相邻的指令和数据在存储器中相对位置较近,因此在访问某个指令或数据时,往往会连续地访问其相邻的指令和数据。这是因为计算机在执行指令时,往往以块的方式从内存中读取数据,因此在读取一个数据时,很可能连续地读取其相邻的数据。 高速缓冲存储器(cache)是位于中央处理器(CPU)和主内存之间的一层存储器,用来加快计算机的数据访问速度。其原理是通过提前将CPU需要访问的数据和指令缓存在高速缓存中,以满足CPU持续快速访问数据的需求。 高速缓存存储器采用了多级存储结构,通常包括L1、L2和L3三级缓存。L1缓存是与CPU核心直接相连的缓存,速度最快,容量较小;L2缓存是位于L1缓存和主内存之间的缓存,速度相对较慢但容量较大;L3缓存是当前多核处理器中常见的共享缓存,用于多个核心之间的数据共享。 高速缓存采用了缓存替换策略和缓存写策略来管理缓存中的数据。常见的缓存替换策略有最近不经常使用(LRU)、先进先出(FIFO)等,用来确定替换哪些数据;而缓存写策略主要有写回(Write Back)和写直达(Write Through),用来决定何时将数据写回主内存。其中,写回策略可以减少对主内存的写入次数,提高效率。 高速缓存的主要技术指标包括缓存容量、缓存关联度和缓存块大小。缓存容量表示缓存可以存储的数据量,一般以字节或字来衡量;缓存关联度表示CPU访问缓存时,需要比较的地址数量,常见的关联度有直接映射、全相联和组相联三种;缓存块大小则是指一次从主存中读取的连续数据的大小。这些指标的选择需要在缓存成本和命中率之间进行权衡。 ### 回答2: 程序局部性是指在程序执行过程中,程序具有空间局部性和时间局部性的特点。空间局部性指程序在一段时间内往往只访问某一部分数据,而时间局部性指程序在某一时刻访问的数据,很可能在未来的几个时刻仍然需要被访问。 程序局部性的原理是基于程序的运行特点。在程序执行过程中,通常会存在循环结构和函数调用等,导致代码的局部执行次数较高。而在循环结构中,往往会反复访问相同的内存位置,这样就形成了空间局部性。同时,程序的执行也会遵循顺序性,即执行的指令往往是紧邻着的,这就形成了时间局部性。 高速缓冲存储器(cache)是位于CPU和主存之间的一级缓存,其主要目的是加快CPU对数据的访问速度。cache的原理是通过存储最常用的数据,将其快速提供给CPU,从而减少了对主存的访问次数,提高了程序的执行效率。 cache的主要技术指标包括容量、速度和命中率。容量是指cache能够存储的数据量大小,容量越大可以存储更多的数据,但相应的访问速度可能降低。速度是指从cache中获取数据的时间,速度越快,就可以更快地满足CPU的需求。命中率是指CPU请求的数据在cache中的比例,命中率越高,表示cache中存储的数据满足CPU需求的概率越高。 为了提高cache的效率,可以采用多级缓存、使用更快的存储介质、采用更高效的替换算法等。同时,还可以根据程序的局部性原理,设计合理的访问策略,例如预取技术和写策略等,来进一步提高cache的性能。 ### 回答3: 程序局部性是指在程序的执行过程中,存在着指令局部性和数据局部性。指令局部性是指程序在一段时间内,执行的指令往往是同一部分代码附近的指令。数据局部性是指程序在一段时间内,使用的数据往往是同一部分内存附近的数据。 程序局部性的原理主要是基于计算机的存储结构和程序的执行特点。首先,由于计算机的主存和CPU的速度差异很大,为了提高程序的执行效率,计算机将一部分经常被访问的指令和数据存放在高速缓冲存储器(cache)中。其次,程序的执行往往有顺序性和循环性,即程序的指令和数据往往存在较好的局部性。因此,通过合理的缓存算法和数据替换策略,将程序中高频访问的指令和数据放入高速缓存中,可以大大减少主存和CPU之间的数据传输次数,从而提高程序的执行效率。 高速缓存存储器(cache)是位于CPU与主存之间的一级缓存,其主要目的是缓解CPU对主存的访问速度和处理器运算速度之间的矛盾。高速缓存存储器的原理是基于程序局部性原理。当CPU需要访问指令或数据时,首先在高速缓存中进行查找,如果找到则命中,直接从高速缓存中读取;如果没有找到,则访问主存并将所需要的指令或数据加载到高速缓存中,并将原有的数据替换掉。 高速缓存存储器的主要技术指标包括容量、关联度和替换策略。容量指的是高速缓存能够存放的指令和数据的数量,容量越大,命中率越高;关联度指的是高速缓存中存放指令和数据的方式,可以采用直接映射、组相联或全相联等方式;替换策略则是指当高速缓存已满时,该如何选择被替换的指令或数据,常见的替换策略有先进先出(FIFO)、最近最少使用(LRU)等。这些技术指标的选择要根据计算机的架构和应用需求进行权衡和调整,以达到最佳的性能和效率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Zevalin爱灰灰

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

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

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

打赏作者

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

抵扣说明:

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

余额充值