Cache的工作原理文档格式.docx
- 文档编号:14106192
- 上传时间:2022-10-18
- 格式:DOCX
- 页数:6
- 大小:20.81KB
Cache的工作原理文档格式.docx
《Cache的工作原理文档格式.docx》由会员分享,可在线阅读,更多相关《Cache的工作原理文档格式.docx(6页珍藏版)》请在冰豆网上搜索。
因此,对这些地址的访问就自然地具有时间上集中分布的倾向。
数据分布的这种集中倾向不如指令明显,但对数组的存储和访问以及工作单元的选择都可以使存储器地址相对集中。
这种对局部范围的存储器地址频繁访问,而对此范围以外的地址则访问甚少的现象,就称为程序访问的局部性。
根据程序的局部性原理,可以在主存和CPU通用寄存器之间设置一个高速的容量相对较小的存储器,把正在执行的指令地址附近的一部分指令或数据从主存调入这个存储器,供CPU在一段时间内使用。
这对提高程序的运行速度有很大的作用。
这个介于主存和CPU之间的高速小容量存储器称作高速缓冲存储器(Cache)。
系统正是依据此原理,不断地将与当前指令集相关联的一个不太大的后继指令集从内存读到Cache,然后再与CPU高速传送,从而达到速度匹配。
CPU对存储器进行数据请求时,通常先访问Cache。
由于局部性原理不能保证所请求的数据百分之百地在Cache中,这里便存在一个命中率。
即CPU在任一时刻从Cache中可靠获取数据的几率。
命中率越高,正确获取数据的可靠性就越大。
一般来说,Cache的存储容量比主存的容量小得多,但不能太小,太小会使命中率太低;
也没有必要过大,过大不仅会增加成本,而且当容量超过一定值后,命中率随容量的增加将不会有明显地增长。
只要Cache的空间与主存空间在一定范围内保持适当比例的映射关系,Cache的命中率还是相当高的。
一般规定Cache与内存的空间比为4:
1000,即128kBCache可映射32MB内存;
256kBCache可映射64MB内存。
在这种情况下,命中率都在90%以上。
至于没有命中的数据,CPU只好直接从内存获取。
获取的同时,也把它拷进Cache,以备下次访问。
Cache的基本结构
Cache通常由相联存储器实现。
相联存储器的每一个存储块都具有额外的存储信息,称为标签(Tag)。
当访问相联存储器时,将地址和每一个标签同时进行比较,从而对标签相同的存储块进行访问。
Cache的3种基本结构如下:
DCACHE
ARMcache架构由cache存储器和写缓冲器(write-buffer)组成,其中写缓冲器是CACHE按照FIFO原则向主存写的缓冲处理器。
一般来说CACHEABILITY和BUFFERABILITY都是可以配置的,所以,一块存储区域可以配置成下面4种方式:
NCNBCNBNCBCB。
在实际应用当中,可以根据需要对主存进行配置。
对I/OMAP来说,一般都需要采用NCNB方式,以保证对I/O的正确操作。
而其他的存储区域一般都可以配置成CB方式,以获取最好的性能。
引入CACHE和WRITEBUFFER是为了提高存储访问的速度,提供系统性能。
如果CACHE打开的话,CPU读写主存的时候,都是通
过CACHE进行的。
进行读操作的时候,如果在CACHE里面找到了所需的内容(CACHEHIT),直接从CACHE里读取;
如果要读的内容不在CACHE上的时候(CACHEMISS),先把所需的内容装载到CACHE里,在从CACHE上读取。
进行写操作的时候,数据先写到CACHE上。
具体又可以分为WRITETHROUGH和WRITEBACK两种方式。
如果是WRITETHROUGH方式的话,每次写操作都通
过CACHE+WRITEBUFFER把数据直接写到主存当中去;
如果是WRITEBACK方式的话,数据最初只是写到CACHE上,必要的时候(CACHEREPLACEMENT)在将CACHE上的数据通过WRITEBUFFER实际回写到主存当中去。
DCaches使用的是虚拟地址,它的大小是16KB,它被分成512行(entry),每行8个字(8words,32Bits)。
每行有两个修改标志位(dirtybits),第一个标志位标识前4个字,第二个标志位标识后4个字,同时每行中还有一个TAG地址(标签地址)和一个validbit。
与ICaches一样,系统上电或重起(Reset)的时候,DCaches功能是被关闭的,我们必须往Ccrbit置1去开启它,Ccrbit在CP15协处理器中控制寄存器1的第2位(关闭DCaches功能则是往该位置0)。
与ICaches不同,DCaches功能是必须在MMU开启之后才能被使用的。
我们现在讨论的都是DCaches,你可能会问那WriteBuffer呢他和DCaches区别是什么呢其实DCaches和WriteBuffer两者间的操作有着非常紧密的联系,很抱歉,到目前为止我无法说出他们之间有什么根本上的区别(-_-!
!
),但我能告诉你什么时候使用的是DCaches,什么时候使用的是WriteBuffer.系统可以通过Ccrbit对Dcaches的功能进行开启与关闭的设定,但是在s3c2410中却没有确定的某个bit可以来开启或关闭WriteBuffer…你可能有点懵…我们还是来看一张表吧,这张表说明了DCaches,WriteBuffer和CCr,Ctt(descriptor中的Cbit),Btt(descriptor中的Bbit)之间的关系,其中“CttandCcr”一项里面的值是Ctt与Ccr进行逻辑与之后的值(Ctt&
&
Ccr).
从上面的表格中我们可以清楚的知道系统什么时候使用的是DCaches,什么时候使用的是WriteBuffer,我们也可以看到DCaches的写回方式是怎么决定的(write-backorwrite-througth)。
在这里我要对CttandCcr=0进行说明,能够使CttandCcr=0的共有三种情况,分别是
Ctt=0,Ccr=0
Ctt=1,Ccr=0
Ctt=0,Ccr=1
我们分别对其进行说明。
情况1(Ctt=0,Ccr=0):
这种情况下CPU的DCaches功能是关闭的(Ccr=0),所以CPU存取数据的时候不会从DCaches里进行数据地查询,CPU直接去内存存取数据。
情况2(Ctt=1,Ccr=0):
与情况1相同。
情况3(Ctt=0,Ccr=1):
这种情况下DCaches功能是开启的,CPU读取数据的时候会先从DCaches里进行数据地查询,若DCaches中没有合适的数据,则CPU会去内存进行读取,但此时由于Ctt=0(Ctt是descriptor中的Cbit,该bit决定该descriptor所描述的内存区域是否可以被Cache),所以CPU不会把读取到的数据Cache到DCaches(不发生linefill).
到此为止我们用两句话总结一下DCaches与WriteBuffer的开启和使用:
1.DCaches与WriteBuffer的开启由Ccr决定。
2.DCaches与WriteBuffer的使用规则由Ctt和Btt决定。
ICACHE
当系统上电或重起(Reset)的时候,ICaches功能是被关闭的,我们必须往lcrbit置1去开启它,lcrbit在CP15协处理器中控制寄存器1的第12位(关闭ICaches功能则是往该位置0)。
ICaches功能一般是在MMU开启之后被使用的(为了降低MMU查表带来的开销),但有一点需要注意,并不是说MMU被开启了ICaches才会被开启,正如本段刚开始讲的,ICaches的开启与关闭是由lcrbit所决定的,无论MMU是否被开启,只要lcrbit被置1了,ICaches就会发挥它的作用。
大家是否还记得discriptor(描述符)中有一个Cbit我们称之为Ctt,它是指明该描述符描述的内存区域内的内容(可以是指令也可以是数据)是否可以被Cache,若Ctt=1,则允许Cache,否则不允许被Cache。
于是CPU读取指令出现了下面这些情况:
如果CPU从Caches中读取到所要的一条指令(cachehit)且这条指令所在的内存区域是Cacheble的(该区域所属描述符中Ctt=1),则CPU执行这条指令并从Caches中返回(不需要从内存中读取)。
若CPU从Caches中读取不到所要的指令(cachemiss)而这条指令所在的内存区域是Cacheble的(同第1点),则CPU将从内存中读取这条指令,同时,一个称为“8-wordlinefill”的动作将发生,这个动作是把该指令所处区域的8个word写进ICaches的某个entry中,这个entry必须是没有被锁定的(对锁定这个操作感兴趣的朋友可以找相关的资料进行了解)
若CPU从Caches中读取不到所要的指令(cachemiss)而这条指令所在的内存区域是UnCacheble的(该区域所属描述符中Ctt=0),则CPU将从内存读取这条指令并执行后返回(不发生linefill)
通过以上的说明,我们可以了解到CPU是怎么通过ICaches执行指令的。
你可能会有这个疑问,ICaches总共只有512个条目(entry),当512个条目都被填充完之后,CPU要把新读取近来的指令放到哪个条目上呢答案是CPU会把新读取近来的8个word从512个条目中选择一个对其进行写入,那CPU是怎么选出一个条目来的呢这就关系到ICaches的替换法则(replacemnetalgorithm)了。
ICaches的replacemnetalgorithm有两种,一种是Random模式另一种Round-Robin模式,我们可以通过CP15协处理器中寄存器1的RRbit对其进行指定(0=Randomreplacement1=Roundrobinreplacement),如果有需要你还可以进行指令锁定(INSTRUCTIONCACHELOCKDOWN)。
虚拟cache
Cache位于MMU前面靠近CPU称为逻辑CACHE又叫虚拟Cache。
CPU可以直接访问CACHE的数据,而ARM11(ARMV6)的结构是CACHE在MMU后面CPU访问CACHE要通过MMU地址转换
在DM6446的core用的是哈佛结构,即把CACHE分为8K的D-CACHE(数据CACHE)和16K的I-cache(指令CACHE)
一个完整的CACHE分为CACHE控制器和CACHE存储器
例子
DavinciDM6446D-cache行应为512行,cache存储器主要分为三个部分:
目录存储段(driectory-story),状态信息段(statusinformation)和数据项段(datasection)每一行cache都包括这三部分。
Cache用目录存储段来存储主存的地址,数据项段存放的是主存的数据,在cache中用状态信息段来记录状态信息,其中v表示有效位,d表示脏位,有效位记录当前cache行是活动的,cache行的数据和主存中的数据是一致的,处理器可以读取。
脏位则表示cache行的数据和主存中的数据不一致。
在读写请求到达存储器前会被CACHE捕获,cache存储器将该请求分成三部分标签,组索引和数据索引域,cache通过组索引域确定可能包含地址和数据cache的行,cache存储器检查匹配的CACHE行的状态标签,如果
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Cache 工作 原理