2.命中率H:
命中率为CPU访问存储系统时,在中M1找到所需信息地概率。
访问M1和M2的次数为N1和N2,则
,不命中率或失效率F是指CPU访存时在M1中找不到所需信息的概率:
F=1-H
3.平均访问时间TA
分两种情况来考虑CPU的一次访存:
(1)当命中时,访问时间即为TA1。
TA1常称为命中时间(hit-time)
(2)大多数二级存储层次结构下,当不命中M1时,就必须从M2中访问这个字,并把包含所请求的字的信息块传送到M1。
设传送一个信息块所需的时间为TB,则不命中时的访问时间为:
TA1+TB+TA2=TA1+TM
其中TM=TB+TA2,为从向M2发出访问请求到把整个数据块调入M1中所需的时间。
TM常称为实效开销(miss-penalty)。
根据以上分析可知:
TA=HTA1+(1-H)(TA1+TM)=TA1+(1-H)TM或TA=TA1+FTM即:
平均访问时间=(命中时间)+(失效率)*(失效开销)
5.1.3“Cache-主存”和“主存-辅存”层次
1.“Cache-主存”层次
CPU和主存之间在性能上的差别越来越大,如图5-2所示(P181)。
现代计算机都采用Cache来解决这个问题。
“Cache-主存”层次的工作几乎完全由硬件实现,因此它不但对应用程序员是透明的,而且对系统程序员几乎也是透明的。
2.“主存-辅存”层次
为弥补主存的容量,在主存外面增加一个容量更大、价格更便宜、但速度更慢的存储器(称为辅存,一般是硬盘)。
“主存-辅存”层次目前通常采用虚拟存储器技术来实现,以向编程人员提供大量的程序空间。
3.“Cache-主存”层和“主存-辅存”层的简单比较
“Cache-主存”结构层次如图5-3(a)所示(P181)
“主存-辅存”结构层次如图5-3(b)所示(P181)
P182表5.1对“Cache-主存”层和“主存-辅存”层做了一个简单比较。
4.两级存储器之间的四个基本问题
●当把一个块调入高一层存储器时,可以放到那些位置上?
(映象规则)
●当所要访问的块在高一层存储器时,如何找到该块?
(查找方法)
●当发生失效时,应替换那一块?
(替换算法)
●当进行写访问时,应进行那些操作?
(写策略)
5.2Cache基本知识
Cache用于解决前面所说的四个基本问题,即映象规则、查找方法、替换算法、写策略。
Cache是按块进行管理的,Cache和主存均被分割成大小相同的块,信息以块为单位调入Cache。
CPU的访问地址被分割成两部分:
块地址和块内位移。
主存地址:
块地址
块内偏移量
5.2.1映象规则
三种映象规则如图5-4所示(P184)
1.全相联:
是指主存中的任一块可以被放置到Cache中的任何一个位置的方法。
2.直接映象:
是指主存中的每一个块只能被放置到Cache中唯一的一个位置。
3.组相联映象:
是指主存中的每一块可以被放置到Cache中唯一的一个组中的任何一个位置。
⏹全相联映象主存中的任一块可以被放置到Cache中的任何一个位置。
如图5-4(a)所示(P184)
⏹直接映象如图5-4(b)所示(P184)。
一般的,对于主存的第i块(即块地址为i),设它映象到Cache的第j块,则j=imodM,其中M为Cache的块数。
设M=2m,则当地址表示为二进制时,Cache的块号j实际上就是主存地址i的低m位。
如图所示:
j
主存块地址i
m位
因此,可以直接用主存块地址的低m位去选择直接映象Cache中的相应块。
⏹组相联映象如图5-4(c)所示(P184)。
它是直接映象和全相联的一种折衷:
首先是映象到唯一的一个组上(直接映象的特征),然后这个块可以被放入这个组中的任何一个位置(全相联的特征)。
若主存第i块映象到Cache的第k组,则:
k=imodG,其中G为Cache的组数。
设G=2j,二进制时,k就是i的低G位。
如图所示:
k
主存块地址i
g位
可以直接用主存块地址的低G位去选择Cache中的相应组。
这里的低G位以及上述直接映象中的低m位通称位索引(Index)。
n路组相联:
如果每组中有n个块(n=M/G),则称该映象规则为n路组相联。
n的值称为相联度。
直接映象和全相联是组相联的两种极端情况。
P185表5-2给出了路数n和组数G的取值。
表中M为Cache的块数。
下面进行一般性分析:
(1)相联度越高(即n值越大),Cache空间的利用率越高,块冲突(一个主存块要进入已被占用的Cache块位置)概率越低,因而Cache的失效率就越低;
(2)全相联的失效率最低,直接映象的失效率最高;
(3)增大n值并不一定能使整个计算机系统的性能提高,而且还会使Cache的实现复杂度和代价增大。
绝大多数计算机都采用直接映象,两路组相联或四路组相联。
作业:
P255
5.1解释术语:
存储层次、全相联映象、直接映象、组相联映象失效率、实效开销、相联度
5.2
5月26日----5月30日教学指导
5.2.2查找方法
两个问题:
(1)当CPU访问Cache时,如何确定Cache中是否有所要访问的块?
(2)若有的话,如何确定其位置?
步骤:
查找目录表。
Cache中设有一个目录表,该表共有M项,每一项对应于Cache中的一个块,称为标识(Tag)。
在目录表中给每一项设置一个有效位,记录Cache中相应块所包含的信息有效。
一个主存块被调入Cache中某一个块位置时,它的标识就被填入目录表中与该Cache块相对应的项中,并且该项的有效位被置“1”,否则为“0”。
候选位置:
根据映象规则不同,一个主存块可能映象到Cache中的一个或多个Cache块位置。
当CPU访问该主存块时,必须且只需查找它的候选位所对应的目录表项(标识)。
如果有与所访问的主存块相同的标识,且其有效值为“1”,则它所对应的Cache块即是所要找的块。
为了保证速度,对各候选位置的标识的检查比较应并行进行。
直接映象Cache的候选位置只有一个;全相联Cache的候选位置为m个;n路组相联则介于两者之间,为n个。
一般采用单体多字节存储器和比较器来实现并行查找。
N越大,实现查找的机制就越复杂,代价就越高。
无论是直接映象还是组相联,查找时,只需比较Tag,Index无需比较。
如果Cache的容量不变,提高相联度会增加每一组中的块数,从而会减少index的位数和增加Tag的位数。
P1865-5给出了4路组相联并行标识比较。
5.2.3替换算法
当要从主存调入一个块到Cache中时,会出现该块所映象的一组(或一个)Cache块已全被占用的情况。
这时,必须强迫腾出其中的一块,以接纳新调入的块。
腾出哪一块呢?
这就是替换算法所要解决的问题。
直接映象:
Cache中的替换很简单,因为只有一个块可选择。
组相联和全相联:
Cache中有多个块供选择,替换算法有随机法、FIFO和LRU三种。
评价替换算法的标准:
尽可能避免替换马上就要用到的信息。
1.随机法
随机地选择被替换的块。
优点:
简单、易于用硬件实现,且对于调试硬件很有用。
不足:
没有考虑Cache块被使用的情况,反映不了程序的局部性。
2.先进先出法FIFO
最早装入相应组的块作为被替换的块。
优点:
容易实现。
不足:
虽然利用了各块进入Cache的顺序这“历史”信息,但还是不能正确地反映程序的局部性。
因为最先进入的块,很可能是经常要用的块。
3.最近最少使用法LRU
选择近期最少被访问的块作为被替换的块。
优点:
反映程序的局部性原理,因而其失效率在上述三种方法中最低的。
不足:
LRU比较复杂,硬件实现比较困难,特别当组的大小增加时,LRU的实现代价会越来越高,而且经常知识近似实现(选择最久没有被访问过的块作为被替换的块)。
LRU实际上是依据局部性原理的一个推论:
如果最近刚用过的块很可能就是马上要再用到的块,则最久没用过的块就是最佳的被替换者。
P188表5-3给出了LRU与随机法在失效率方面的比较。
LRU和随机法分别因其失效率低和实现简单而被广泛采用。
5.2.4写策略
写需要对存储器和Cache两部分进行操作。
写和读的比较:
(1)检查标识不能与写入Cache块并行进行,“写”一般比“读”花费更多的时间。
(2)处理器要写入的数据的宽度不是定长的(通常1-8字节),写入时,只能修改Cache块中相应的部分,不能够多修改。
而“读”则可以多读出几个字节也没关系。
Cache与主存内容的一致性问题:
Cache内容是主存部分内容的一个副本。
“写”访问却可能导致它们内容的不一致。
显然,为了保证正确性,主存的内容也必须更新。
何时更新主存,是写策略所要解决的问题。
写策略是区分不同Cache设计方案的一个重要标志。
写策略主要有写直达法和写回法两种。
1.写直达法
该法也称为存直达法。
在执行“写”操作时,不仅把信息写入Cache中相应的块,而且也写入下一级存储器中相应的块。
优点:
易于实现。
下一级存储器中的数据总是最新的。
这一个优点对于I/O和多处理机来说是重要的。
问题:
写直达法在进行“写”操作的过程中CPU必须等待,直到“写”操作结束,称为CPU写停顿。
常用的优化技术:
写缓冲器。
CPU一旦把数据写入该缓冲器,就可以继续执行,使下一级存储器的更新和CPU的执行重叠起来。
2.写回法
该法也称为拷回法。
只把信息写入Cache中相应的块。
该块只有在被替换时,才被写回主存。
为了减少在替换时块的写回,为在Cache中的每一块设置一个“污染位”,用于指出该点是“脏”的(被修改过)还是“干净的”(没有被修改过)。
替换时。
若被替换的块是干净的,则不必写回下一级存储器。
只有被修改过的块写回。
写回法的优点:
速度快,“写”操作能以Cache存储器的速度进行。
对于同一单元的多个写只需最后一次写回下一级存储器。
有些写只能到达Cache,不能到达主存,所使用存储器频带较低。
这使得写回法对于多处理机很有吸引力。
写访问失效时的内存分配。
当发生写失效时,是否调入相应的块,有两种选择:
(1)按写分配法
写失效时,先把所写单元所在的块调入Cache,然后再进行写入。
与读失效类似。
这种方法也称为写时取法。
(2)不按写分配法
写失效时,直接写入下一级存储器而不讲相应的块调入Cache。
这种方法也称为绕写法。
写回法Cache一般采用按写分配法(这样以后对那个块的“写”就能被Cache捕获)。
写直达法一般采用不按写分配法(因为以后对那个块的“写”仍然还要到达下一级存储器)。
作业:
P255
5.1解释术语:
替换算法、LRU、写直达法、写回法、按写分配法、不按写分配法
6月2日----6月6日教学指导
5.2.521064的内部数据Cache
该Cache的结构如图5.6所示(P190)。
容量为8KB,块大小为32字节,共有256个块;直接相连映象;采用写直达方式,写缓冲器的大小为4个块,并且在写失效时不按写分配。
四选一的多路选择器:
数据RAM为8个字节宽;索引加上块内偏移量的高两位作为RAM的地址,就选取了相应的8个字节,多路选择器仅仅是块内偏移量高两位的译码示意。
(1)21064读数据Cache
第一步:
地址的分割。
21064微处理器传送给Cache的物理地址为34位。
这个地址被分为两部分:
块地址(29位)和块内偏移量(5位)。
块地址进一步被分为地址标识(21位)和Cache索引(8位);索引从256个Cache块中选择一块,读出数据和标识;标识用于判断要访问的块是否在Cache中(是否命中);索引的位数由Cache容量、块大小、相联度决定。
21064的Cache是直接映象的,所以相联度为1,索引所需的位数满足:
索引为8位,标识为29-8=21位。
第二步:
按索引选择标识和数据。
在直接映象的Cache中,读出数据并送往CPU与读出标识并进行匹配这两个过程可以并行进行。
第三步:
标识比较。
标识从Cache中读出来后,就去和CPU送来的物理地址中的标识部分进行比较。
为了保证标识信息有效,其相应的有效位必须位“1”,否则比较的结果就是无效的。
第四步:
CPU从Cache中取数据。
如果标识比较的结果是匹配,且有效位为“1”,那么最后一步就是发信号通知CPU从Cache中取走数据。
其它说明:
21064完成这4步骤需要2个时钟周期;在这两个周期中间。
指令需要用到本次“读”的结果,这条指令就只好等待。
(2)21064写数据Cache
写命中:
前三步跟上面是一样的。
在确认标识比较为匹配之后,才把数据写入。
因为21064使用写直达Cache,所以到此写过程还未结束,还应将数据送往写缓冲器。
21064的写缓冲器有四块,每块大小为4个字,缓冲器是按字寻址的(21064中每个字为8字节)。
写缓冲器为空,就把数据和完整的地址写入缓冲器。
对CPU而言,本次“写”访问已完成,