计算机组成原理 第三章(存储器) 您所在的位置:网站首页 寄存器是一级缓存吗 计算机组成原理 第三章(存储器)

计算机组成原理 第三章(存储器)

2024-07-13 04:14| 来源: 网络整理| 查看: 265

写在前面:

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

视频链接:计算机组成原理(哈工大刘宏伟)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的命中率。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有