高速缓冲存储器Cache的原理、设计及实现
- 格式:doc
- 大小:47.50 KB
- 文档页数:3
cache介绍前⾯已多次提到了Cache,这可是⼀个讨⼈喜欢的东西,您有必要详细了解它的作⽤与原理。
Cache是介于CPU与主内存之间、或者主内存与磁盘之间的⾼速缓冲器,其作⽤是解决系统中数据读写速度不匹配的问题。
其中介于CPU与主内存之间的缓冲器⼜称为RAM Cache,⽽介于主内存与磁盘驱动器之间的缓冲器则称之为Disk Cache,这⾥要讨论的是前者,也就通常简称的Cache。
那么,Cache是怎样⼯作的呢?您⼀定明⽩CPU的运算速度⽐主内存的读写速度要快得多,这就使得CPU在访问内存时要花很长的等待时间,从⽽造成系统整体性能的下降。
为了解决这种速度不匹配的问题,需要在CPU与主内存之间加⼊⽐主内存更快的SRAM(Static Ram,静态存储器)。
SRAM储存了主内存中的数据(专业术语称为“映象”),使CPU可以直接通过访问SRAM来读写数据。
由于SRAM的速度与CPU的速度相当,因⽽⼤⼤缩短了数据读写的等待时间,系统的整体速度也就得到了提⾼。
既然SRAM那么快,为什么不⽤来作为主内存呢?这是因为SRAM采⽤了与CPU相类似的半导体制造⼯艺,成本极⾼,只有在那些只关⼼性能不考虑价格的场合才会这样做。
这也就使得Cache粉墨登场了,它能将CPU⽤过的数据,以及结果保存起来,让CPU下次处理时先来访问Cache,如果没有可⽤的数据再去别处找,以此来提⾼运⾏速度。
Cache由标记存储器和数据存储器两个基本部分组成。
标记存储器是⽤来储存Cache的控制位与块地址标签,控制位⽤于管理Cache的读写操作,⽽块地址标签则记录着Cache中各块的地址。
这个地址包含了与主内存映射的块地址,并且都与Cache中的⼀块“数据”相对应。
⽽这块“数据”正是贮存于Cache的数据存储器中。
当CPU读取数据时,先通过地址总线把物理地址送到Cache中,与Cache中的块地址标签进⾏对⽐。
若相符合,则表⽰此数据已经存在于Cache中(此情况被戏称为“命中”),这时只需把Cache中的对应数据经由数据总线直接传送给CPU即可。
什么是CacheCache”是什么Cache(即高速缓冲存储器(Cache Memory),是我们最常听到的一个词了。
在老鸟们眼中,这个词或许已没有再谈的必要,因为他们对Cache从设计的必要性到工作原理、工作过程等等都已了如指掌了;而对菜鸟朋友们而言,这些未必就很清楚。
那么,它们到底是指的什么呢?不用急,下面就请随笔者一起来全面认识Cache。
为什么要设计Cache我们知道,电脑的内存是以系统总线的时钟频率工作的,这个频率通常也就是CPU的外频(对于雷鸟、毒龙系列的处理器,由于在设计采用了DDR技术,CPU 工作的外频为系统总线频率的两倍)。
但是,CPU的工作频率(主频)是外频与倍频因子的乘积。
这样一来,内存的工作频率就远低于CPU的工作频率了。
这样造成的直接结果是:CPU在执行完一条指令后,常常需要“等待”一些时间才能再次访问内存,极大降了CPU工作效率。
在这样一种情况下,Cache就应运而生了!Cache是什么Cache是一种特殊的存储器,它由Cache 存储部件和Cache控制部件组成。
Cache 存储部件一般采用与CPU同类型的半导体存储器件,存取速度比内存快几倍甚至十几倍。
而Cache 控制器部件包括主存地址寄存器、Cache 地址寄存器,主存—Cache地址变换部件及替换控制部件等。
至于它们各自又是怎样工作的、有何作用等等,我想我们就没有必要做进一步的研究,知道一般Cache分为L1 Cache(其中又分为数据Cache、代码Cache)、L2 Cache就行了。
Cache是怎样工作的我们知道,CPU运行程序是一条指令一条指令地执行的,而且指令地址往往是连续的,意思就是说CPU在访问内存时,在较短的一段时间内往往集中于某个局部,这时候可能会碰到一些需要反复调用的子程序。
电脑在工作时,把这些活跃的子程序存入比内存快得多的Cache 中。
CPU在访问内存时,首先判断所要访问的内容是否在Cache中,如果在,就称为“命中”,此时CPU直接从Cache中调用该内容;否则,就称为“不命中”,CPU只好去内存中调用所需的子程序或指令了。
cache计算机组成原理小伙伴们!今天咱们来唠唠计算机组成原理里超级有趣的一个东西——Cache(高速缓冲存储器)。
你可以把计算机想象成一个超级大的办公室。
这里面有各种各样的员工(部件)在忙忙碌碌地干活。
而Cache呢,就像是办公室里最机灵的小秘书。
为啥这么说呢?你想啊,CPU(中央处理器)这个大老板,每天都要处理好多好多的数据,就像大老板每天要做各种决策一样。
这些数据呢,原本是放在内存这个大仓库里的。
可是呀,内存离CPU有点远,每次CPU要找个数据,就像大老板要从老远的大仓库里找个文件一样,特别费时间。
这时候,Cache就闪亮登场啦。
Cache这个小秘书特别聪明,它就在CPU的身边,离得超级近。
它就像有个超能力,会提前猜一猜CPU这个大老板接下来可能会用到哪些数据。
然后呢,它就偷偷地从内存这个大仓库里把那些可能会用到的数据拿过来,放在自己这里。
当CPU说:“我要找个数据啦。
”Cache就会特别快地说:“老板,你要的是不是这个呀?”然后一下子就把数据给CPU了。
这速度,就像闪电一样快。
Cache这个小秘书呀,它的存储空间可没有内存那么大。
它就像是一个小巧精致的文件柜,虽然装不了太多东西,但是放的都是最最常用的文件。
比如说,你每天都要用到的办公软件的一些小设置之类的。
它把这些常用的数据放在身边,就为了能让CPU快速拿到。
那Cache是怎么知道哪些数据是常用的呢?这就像是小秘书有自己的小秘诀。
它会根据数据被访问的频率呀,还有一些算法来判断。
就好像小秘书会观察,哪些文件大老板经常看,哪些偶尔才看一次。
经常看的就牢牢放在自己身边的小文件柜里,不常看的就先放一边。
有时候呀,也会出点小状况。
比如说,Cache以为CPU会用到某个数据,就把它从内存里拿过来了,结果CPU要的是另外一个数据。
这就像小秘书猜错了大老板的心思。
不过没关系呀,Cache会很快调整自己的策略,再去内存里找正确的数据。
而且呢,Cache还有不同的级别。
高速缓冲存储器Cache简介○王军评估计算机的主要性能指标之一是运行速度。
计算机的程序是在C PU中执行的,而平时程序和数据则存放在存储器中。
存储器分为外部存储器(如软盘、硬盘、磁带等)和内部存储器。
外部存储器容量大,速度慢,内部存储器容量小,速度快。
内存的使用在一定程度上解决了高速C PU和慢速存储设备之间速度上的矛盾。
但C PU和内存之间仍然存在速度上不匹配的矛盾。
为充分利用C PU的运行速度。
在C PU和内存之间又引入了高速缓冲存储器(C ac he)。
一、Cache的基本概念高速缓冲存储器Ca che是位于C PU和主存储器之间容量小而速度快的存储器,通常由SR AM(静态R A M)组成。
随着微电子技术和计算机技术的发展,CPU的工作频率越来越高,DR AM(动态R A M)可以用最低的价格和最小的体积提供更大的存储器空间,但是DR AM的速度难以满足C PU 的要求,因而访问系统存储器时都要插入等待周期,这对高速C PU来说是一种极大的浪费。
采用C ache技术是一种现实的解决问题的方法。
S R AM可以提供最高的总线性能。
由S R AM组成的C ac he即是把主存储器看作是高速存储器而设置的小容量局部存储器,这种高速存储器是面向C PU工作的存储器,存储C PU常用的数据和代码,Ca che的有效性是利用了程序对存储器的访问在时间和空间上具有局部区域性的特性,即对大多数程序来说,在某个时间片内会集中重复地访问某一个特定的区域。
C ac he通常由相联存储器实现。
相联存储器的每一个存储块都具有额外的存储信息,称为标签(T a g)。
当访问相联存储器时,将地址和每一个标签同时进行比较,从而对标签FRA M E E t h er n et—I IFRA M E E t h er n et—SNA PN e t W ar e DO S Requ es t erFI R ST N E TW O RK D RI V E=FN ET W A R E PR O TO CO L=N D S BI N D此时假设使用N E2000网卡,中断号为5,端口地址为300。
Cache存储器:电脑中为高速缓冲存储器,是位于CPU和主存储器DRAM(DynamicRandomAccessMemory)之间,规模较小,但速度很高的存储器,通常由SRAM(StaticRandomAccessMemory静态存储器)组成。
它是位于CPU与内存间的一种容量较小但速度很高的存储器。
CPU的速度远高于内存,当CPU直接从内存中存取数据时要等待一定时间周期,而Cache则可以保存CPU刚用过或循环使用的一部分数据,如果CPU需要再次使用该部分数据时可从Cache中直接调用,这样就避免了重复存取数据,减少了CPU的等待时间,因而提高了系统的效率。
Cache又分为L1Cache(一级缓存)和L2Cache(二级缓存),L1Cache 主要是集成在CPU内部,而L2Cache集成在主板上或是CPU上。
我们知道,电脑的内存是以系统总线的时钟频率工作的,这个频率通常也就是CPU的外频(对于雷鸟、毒龙系列的处理器,由于在设计采用了DDR技术,CPU工作的外频为系统总线频率的两倍)。
但是,CPU的工作频率(主频)是外频与倍频因子的乘积。
这样一来,内存的工作频率就远低于CPU的工作频率了。
这样造成的直接结果是:CPU在执行完一条指令后,常常需要“等待”一些时间才能再次访问内存,极大降了CPU工作效率。
在这样一种情况下,Cache就应运而生了!在实际应用中,Cache,尤其是L2Cache对系统的性能,特别是对浮点运算能力有较大的影响。
而我们知道,大部分游戏的流畅运行需要频繁的浮点运算。
因此,CPU运行游戏的性能的好坏与L2Cache的容量与速度有很大关系。
也许你会认为很多指令是寄存器指令,内存读写在整个程序中所占的比例并不大,但是请不要忘记很恐怖的一点是,所有的指令都在内存中,也就是说每执行一条指令都要去读内存。
有了这个前提,我们可以想象,在程序执行的时候,cpu会随时随刻地从内存中读取代码,整条总线会被cpu占住,这样的话总线上的其他master(比如说DMA控制器,I2C-Slave等)就将全部受到影响,由此可见没有Cache的结果就将是灾难性的。
cache百科名片cache n. 高速缓冲存储器一种特殊的存储器子系统,其中复制了频繁使用的数据以利于快速访问。
存储器的高速缓冲存储器存储了频繁访问的 RAM 位置的内容及这些数据项的存储地址。
当处理器引用存储器中的某地址时,高速缓冲存储器便检查是否存有该地址。
如果存有该地址,则将数据返回处理器;如果没有保存该地址,则进行常规的存储器访问。
因为高速缓冲存储器总是比主RAM 存储器速度快,所以当 RAM 的访问速度低于微处理器的速度时,常使用高速缓冲存储器。
目录[隐藏]基本简介简单理解地址镜像与变换[1][2]Buffer和Cache的区别[编辑本段]基本简介Cache的出现是基于两种因素:首先,是由于CPU的速度和性能提高很快而主存速度较低且价格高,第二就是程序执行的局部性特点。
因此,才将速度比较快而容量有限的SRAM构成Cache,目的在于尽可能发挥CPU的高速度。
很显然,要尽可能发挥CPU的高速度就必须CACHE用硬件实现其全部功能。
Cache与主存之间可采取多种地址映射方式,直接映射方式是其中的一种。
在这种映射方式下,主存中的每一页只能复制到某一固定的Cache页中。
由于Cache块(页)的大小为16B,而Cache容量为16KB。
因此,此Cache可分为1024页。
可以看到,Cache的页内地址只需4位即可表示;而Cache的页号需用10位二进制数来表示;在映射时,是将主存地址直接复制,现主存地址为1234E8F8(十六进制),则最低4位为Cache的页内地址,即1000,中间10位为Cache的页号,即1010001111。
Cache的容量为16KB决定用这14位编码即可表示。
题中所需求的Cache的地址为10100011111000。
Cache中的内容随命中率的降低需要经常替换新的内容。
替换算法有多种,例如,先入后出(FILO)算法、随机替换(RAND)算法、先入先出(FIFO)算法、近期最少使用(LRU)算法等。
计算机cache的名词解释引言:在计算机科学领域,Cache(缓存)是一种重要的硬件或软件组件,用于提高计算机数据访问的速度和效率。
无论是在个人电脑还是服务器中,Cache都扮演着重要的角色。
本文将介绍Cache的概念、原理以及在计算机系统中的应用。
一、Cache的定义与功能Cache,可以理解为“高速缓冲存储器”,它被设计用于临时存储计算机系统中的数据,以便更快地访问常用的数据。
Cache是位于中央处理器(CPU)和主存(RAM)之间的一层存储器,在数据传输和处理过程中起到了缓冲和加速的作用。
Cache的主要功能是通过存储常用数据和指令,在需要时迅速提供给CPU。
由于CPU频繁地从主存中获取数据的过程较慢,Cache通过存储经常使用的数据,可以减少对主存的访问时间,提高了计算机系统的性能。
二、Cache的工作原理Cache的工作原理可以简单概括为“命中”和“失效”。
当CPU请求数据时,Cache会先检查是否已经存储了所需数据。
如果已经存在于Cache中,称之为“命中”,CPU可以直接从Cache中获取数据,节省了主存访问和传输的时间。
如果所需数据不在Cache中,则称之为“失效”,此时Cache需要从主存中获取所需数据,并存储到Cache中,以备将来的访问。
Cache采用高速存储器技术,通常分为多个级别(L1、L2、L3等),其中L1 Cache距离CPU最近,速度最快,容量也最小。
而L2、L3等级别的Cache容量逐渐增大,速度逐渐变慢,但仍然比主存要快。
三、Cache的分类根据存放数据的位置和性质,Cache可以分为三类:指令Cache(Instruction Cache)、数据Cache(Data Cache)和统一Cache(Unified Cache)。
指令Cache用于存放CPU执行指令时所需要的数据,例如程序的代码段、跳转地址等。
数据Cache则用于存放计算机程序中所操作的数据,例如变量、数组等。
Cache的基本概念与⼯作原理1.背景知识随着 CPU 技术的飞速发展,常⽤的处理器飞奔在越来越⾼的频率之上,虽然处理器的速度越来越快,但是与之相匹配的存储器的速度却没有获得相应的提升,这⼤⼤限制了 CPU 的处理性能。
⽽我们本系列⽂档所介绍的主⾓Cache 技术就是⽤来解决这个难题的。
在 ARM 发布 Cortex-M7 架构之后,微控制器领域也出现了频率⾼达数百兆的芯⽚,如 ST 的 STM32F7 系列和NXP 的 i.MX RT 系列芯⽚,这些芯⽚内的处理器都⾃带 cache,在合理配置下可以表现出⼗分强悍的数据处理性能。
那么什么是 cache?如何利⽤这⼀新特性编写⾼性能的程序?⼜有什么要注意的地⽅吗?你可能会有上述这些疑问,别担⼼,本系列⽂章将会为你⼀⼀解答。
本系列⽂章分为三篇,第⼀篇为《cache 的基本概念与⼯作原理》,讲解 cache 相关的基础知识。
第⼆篇为《STM32F7 Cache 介绍与实战》,讲解如何在 STM32F7 系列芯⽚上使⽤ cache,并编写程序进⾏性能测试。
第三篇为《Cache 的⼀致性问题与使⽤技巧》,将会介绍 cache 的数据⼀致性问题和使⽤ cache 过程中的⼀些技巧。
下⾯我们从 cache 的基础知识开始,了解这⼀强⼤的特性吧。
2. 计算机的层次结构存储系统想要理解 cache 的⼯作原理,就必须要了解计算机系统中数据的存储⽅式。
在计算机中程序执⾏时所有的指令和数据都是从存储器中取出来执⾏的。
存储器是计算机系统中的重要组成部分,相当于计算机的仓库,⽤来存放各类程序及其处理的数据。
因此存储器的容量和性能应当随着处理器的速度和性能的提⾼⽽通过提⾼,以保持系统性能的平衡。
然⽽在过去的 20 多年中,随着时间的推移,处理器和存储器在性能发展上的差异越来越⼤,存储器在容量尤其是访问延时⽅⾯的性能增长越来越跟不上处理器性能发展的需要。
为了缩⼩存储器和处理器两者之间在性能⽅⾯的差距,通常在计算机内部采⽤层次化的存储器体系结构。
组成结构高速缓冲存储器是存在于主存与CPU之间的一级存储器,由静态存储芯片(SRAM)组成,容量比较小但速度比主存高得多,接近于CPU的速度。
主要由三大部分组成:Cache存储体:存放由主存调入的指令与数据块。
地址转换部件:建立目录表以实现主存地址到缓存地址的转换。
替换部件:在缓存已满时按一定策略进行数据块替换,并修改地址转换部件。
[作用介绍在计算机技术发展过程中,主存储器存取速度一直比中央处理器操作速度慢得多,使中央处理器的高速处理能力不能充分发挥,整个计算机系统的工作效率受到影响。
有很多方法可用来缓和中央处理器和主存储器之间速度不匹配的矛盾,如采用多个通用寄存器、多存储体交叉存取等,在存储层次上采用高速缓冲存储器也是常用的方法之一。
很多大、中型计算机以及新近的一些小型机、微型机也都采用高速缓冲存储器。
高速缓冲存储器的容量一般只有主存储器的几百分之一,但它的存取速度能与中央处理器相匹配。
根据程序局部性原理,正在使用的主存储器某一单元邻近的那些单元将被用到的可能性很大。
因而,当中央处理器存取主存储器某一单元时,计算机硬件就自动地将包括该单元在内的那一组单元内容调入高速缓冲存储器,中央处理器即将存取的主存储器单元很可能就在刚刚调入到高速缓冲存储器的那一组单元内。
于是,中央处理器就可以直接对高速缓冲存储器进行存取。
在整个处理过程中,如果中央处理器绝大多数存取主存储器的操作能为存取高速缓冲存储器所代替,计算机系统处理速度就能显著提高。
[工作原理高速缓冲存储器通常由高速存储器、联想存储器、替换逻辑电路和相应的控制线路组成。
在有高速缓冲存储器的计算机系统中,中央处理器存取主存储器的地址划分为行号、列号和组内地址三个字段。
于是,主存储器就在逻辑上划分为若干行;每行划分为若干的存储单元组;每组包含几个或几十个字。
高速存储器也相应地划分为行和列的存储单元组。
二者的列数相同,组的大小也相同,但高速存储器的行数却比主存储器的行数少得多。
Cache一致性[摘要]高速缓存(Cache)的设计是为了解决cpu与主存之间速度差距太大的矛盾,Cache技术的发明和使用是计算机科学发展史的重大发展,对于提高计算机系统性能起到了重要的作用。
一般Cache采用高速的SRAM制作。
高速缓冲(Cache)的工作原理就是在程序访问的局部性的基础上。
对于有些有多个处理器的系统,其各自都有其独立的Cache,且都共享主存,那么,这样又出现了新问题,即Cache的一致性问题。
即当其中的一个缓存中数据被修改了的时候,不仅是主存中相对应的字无效,就连同其他缓存中相对应的字也无效(当然恰好其他缓存也有相应的字)。
即使通过写直达法改变了主存的相应字,而其他缓存中数据仍然无效。
显然,解决系统中Cache一致性的问题很重要。
在具有多个处理器的系统中,由于多个处理器有可能对同个一数据块进行读写操作,当其中某个处理器对共享的数据块进行写操作时,其它处理器的高速缓冲cache中这个数据块的副本就将会成为无时效性的数据。
如果不及时地通知相应的处理器去处理,将会导致运行结果的出错。
此论文主要是在分析高速缓冲Cache的一致性问题的造成原因以及解决cache一致性这个问题的监听协议和基于目录的协议两种协议等。
[关键字]高速缓存、Cache、Cache一致性、监听cache协议、基于cache目录的协议一、高速缓存(Cache)的定义依据局部性的原理,发现,其实可以在主存与 CPU之间设置一个高速的、容量相对较小的存储器,若当前正在执行的程序和数据正存放在这个高速的、相对容量较小的存储器中,在程序运行时,不必再去从主存储器取指令以及取数据,只要能够访问这个高速的,容量相对较小的高速存储器即可,所以此举动大大提高了程序运行的速度,这个存储器称作高速缓存存储器(Cache:英文原意为“藏东西的地方”)。
高速缓存存储器介于 CPU和主存之间,它的工作速度数倍于主存,另外,对于此高速缓存器,其全部功能是由计算机硬件来实现的,并且对程序员而言是透明的。
高速缓冲存储器cache的作用高速缓冲存储器(Cache)是计算机中一种特殊的存储器,其作用是提高计算机的运行速度和效率。
它位于CPU和主存之间,作为CPU与主存之间的缓冲区域,用来存放最近被CPU频繁访问的数据和指令。
Cache的作用主要有以下几个方面:1. 提高数据访问速度:Cache采用了更快的存取速度和更短的访问时间。
由于CPU频繁访问Cache,而Cache又位于CPU旁边,因此数据可以更快地被CPU获取到,从而提高了计算机系统的整体运行速度。
2. 减轻主存压力:主存的访问速度相对较慢,而CPU的运行速度相对较快,这就导致了CPU频繁等待主存的情况。
通过引入Cache 作为中间缓冲区域,可以将CPU需要的数据和指令预先存放在Cache中,当CPU需要时,直接从Cache中获取,减轻了对主存的访问压力。
3. 提高命中率:Cache是根据局部性原理设计的,即程序访问的数据和指令往往具有一定的局部性。
Cache通过将近期被CPU频繁访问的数据和指令存放在Cache中,提高了命中率,即CPU在Cache中找到需要的数据和指令的概率增加,从而减少了访问主存的次数,提高了系统的效率。
4. 缓解存储器层次结构之间的速度不匹配:计算机系统中,存储器的层次结构是由快速但容量较小的Cache、速度适中但容量较大的主存和速度较慢但容量最大的辅助存储器组成。
Cache的引入可以缓解存储器层次结构之间的速度不匹配问题,通过Cache将较慢的主存和辅助存储器的访问速度与CPU相匹配,提高了整个存储器层次结构的效率。
5. 提高系统吞吐量:通过提高命中率、减轻主存压力和提高数据访问速度,Cache可以提高系统的吞吐量。
吞吐量是指单位时间内完成的任务数量,Cache的引入可以减少CPU等待数据和指令的时间,从而提高了系统每单位时间内处理任务的数量,进而提高了系统的吞吐量。
高速缓冲存储器Cache在计算机系统中起到了至关重要的作用。
高速缓冲存储器Cache的原理、设计及实现 前 言 虽然CPU主频的提升会带动系统性能的改善,但系统性能的提高不仅仅取决于CPU,还与系统架构、指令结构、信息在各个部件之间的传送速度及存储部件的存取速度等因素有关,特别是与CPU/内存之间的存取速度有关。若CPU工作速度较高,但内存存取速度较低,则造成CPU等待,降低处理速度,浪费CPU的能力。如500MHz的PⅢ,一次指令执行时间为2ns,与其相配的内存(SDRAM)存取时间为10ns,比前者慢5倍,CPU和PC的性能怎么发挥
出来?
如何减少CPU与内存之间的速度差异?有4种办法:一种是在基本总线周期中插入等待,这样会浪费CPU的能力。另一种方法是采用存取时间较快的SRAM作存储器,这样虽然解决了CPU与存储器间速度不匹配的问题,但却大幅提升了系统成本。第3种方法是在慢速的DRAM
和快速CPU之间插入一速度较快、容量较小的SRAM,起到缓冲作用;使CPU既可以以较快速度存取SRAM中的数据,又不使系统成本上升过高,这就是Cache法。还有一种方法,采用新型存储器。目前,一般采用第3种方法。它是PC系统在不大增加成本的前提下,使性能提升的一个非常有效的技术。
本文简介了Cache的概念、原理、结构设计以及在PC及CPU中的实现。 Cache的工作原理 Cache的工作原理是基于程序访问的局部性。 对大量典型程序运行情况的分析结果表明,在一个较短的时间间隔内,由程序产生的地址往往集中在存储器逻辑地址空间的很小范围内。指令地址的分布本来就是连续的,再加上循环程序段和子程序段要重复执行多次。因此,对这些地址的访问就自然地具有时间上集中分布的倾向。数据分布的这种集中倾向不如指令明显,但对数组的存储和访问以及工作单元的选择都可以使存储器地址相对集中。这种对局部范围的存储器地址频繁访问,而对此范围以外的地址则访问甚少的现象,就称为程序访问的局部性。 根据程序的局部性原理,可以在主存和CPU通用寄存器之间设置一个高速的容量相对较小的存储器,把正在执行的指令地址附近的一部分指令或数据从主存调入这个存储器,供CPU在一段时间内使用。这对提高程序的运行速度有很大的作用。这个介于主存和CPU之间的高速小容量存储器称作高速缓冲存储器(Cache)。 系统正是依据此原理,不断地将与当前指令集相关联的一个不太大的后继指令集从内存读到Cache,然后再与CPU高速传送,从而达到速度匹配。CPU对存储器进行数据请求时,通常先访问Cache。由于局部性原理不能保证所请求的数据百分之百地在Cache中,这里便存在一个命中率。即CPU在任一时刻从Cache中可靠获取数据的几率。命中率越高,正确获取数据的可靠性就越大。一般来说,Cache的存储容量比主存的容量小得多,但不能太小,太小会使命中率太低;也没有必要过大,过大不仅会增加成本,而且当容量超过一定值后,命中率随容量的增加将不会有明显地增长。只要Cache的空间与主存空间在一定范围内保持适当比例的映射关系,Cache的命中率还是相当高的。一般规定Cache与内存的空间比为4:1000,即128kB Cache可映射32MB内存;256kB Cache可映射64MB内存。在这种情况下,命中率都在90%以上。至于没有命中的数据,CPU只好直接从内存获取。获取的同时,也把它拷进Cache,以备下次访问。
Cache的基本结构 Cache通常由相联存储器实现。相联存储器的每一个存储块都具有额外的存储信息,称为标签(Tag)。当访问相联存储器时,将地址和每一个标签同时进行比较,从而对标签相同的存储块进行访问。Cache的3种基本结构如下: 全相联Cache 在全相联Cache中,存储的块与块之间,以及存储顺序或保存的存储器地址之间没有直接的关系。程序可以访问很多的子程序、堆栈和段,而它们是位于主存储器的不同部位上。因此,Cache保存着很多互不相关的数据块,Cache必须对每个块和块自身的地址加以存储。当请求数据时,Cache控制器要把请求地址同所有地址加以比较,进行确认。这种Cache结构的主要优点是,它能够在给定的时间内去存储主存器中的不同的块,命中率高;缺点是每一次请求数据同Cache中的地址进行比较需要相当的时间,速度较慢。
表1 pc中部分已实现的cache技术 系统 l0 l1cache l2cache l3cache cache 主存储器 8088 无 无 无 无 无 dram 80286 无 无 无 无 无 dram 80386dx 无 外部sram 无 无 sram dram 80486dx 无 内部8kb 外部sram 无 sram dram pentium 无 内部8kb+8kb 外部sram 无 sram dram ppro 无 内部8kb+8kb 内部封装256kb或512kb 无 sram dram mmx 无 内部16kb+16kb 外部sram 无 sram dram pⅡ/pⅢ 无 内部16kb+16kb 卡上封装512kb~1mb 无 sram dram
k6-Ⅲ 内部32kb+32kb 芯片背上封装256kb 外部1mb sram dram
直接映像Cache 直接映像Cache不同于全相联Cache,地址仅需比较一次。在直接映像Cache中,由于每个主存储器的块在Cache中仅存在一个位置,因而把地址的比较次数减少为一次。其做法是,为Cache中的每个块位置分配一个索引字段,用Tag字段区分存放在Cache位置上的不同的块。单路直接映像把主存储器分成若干页,主存储器的每一页与Cache存储器的大小相同,匹配的主存储器的偏移量可以直接映像为Cache偏移量。Cache的Tag存储器(偏移量)保存着主存储器的页地址(页号)。以上可以看出,直接映像Cache优于全相联Cache,能进行快速查找,其缺点是当主存储器的组之间做频繁调用时,Cache控制器必须做多次转换。
组相联Cache 组相联Cache是介于全相联Cache和直接映像Cache之间的一种结构。这种类型的Cache使用了几组直接映像的块,对于某一个给定的索引号,可以允许有几个块位置,因而可以增加命中率和系统效率。 Cache与DRAM存取的一致性 在CPU与主存之间增加了Cache之后,便存在数据在CPU和Cache及主存之间如何存取的问题。读写各有2种方式。 贯穿读出式(Look Through) 该方式将Cache隔在CPU与主存之间,CPU对主存的所有数据请求都首先送到Cache,由Cache自行在自身查找。如果命中,则切断CPU对主存的请求,并将数据送出;不命中,则将数据请求传给主存。该方法的优点是降低了CPU对主存的请求次数,缺点是延迟了CPU对主存的访问时间。 旁路读出式(Look Aside) 在这种方式中,CPU发出数据请求时,并不是单通道地穿过Cache,而是向Cache和主存同时发出请求。由于Cache速度更快,如果命中,则Cache在将数据回送给CPU的同时,还来得及中断CPU对主存的请求;不命中,则Cache不做任何动作,由CPU直接访问主存。它的优点是没有时间延迟,缺点是每次CPU对主存的访问都存在,这样,就占用了一部分总线时间。 写穿式(Write Through) 任一从CPU发出的写信号送到Cache的同时,也写入主存,以保证主存的数据能同步地更新。它的优点是操作简单,但由于主存的慢速,降低了系统的写速度并占用了总线的时间。 回写式(Copy Back) 为了克服贯穿式中每次数据写入时都要访问主存,从而导致系统写速度降低并占用总线时间的弊病,尽量减少对主存的访问次数,又有了回写式。它是这样工作的:数据一般只写到Cache,这样有可能出现Cache中的数据得到更新而主存中的数据不变(数据陈旧)的情况。但此时可在Cache 中设一标志地址及数据陈旧的信息,只有当Cache中的数据被再次更改时,才将原更新的数据写入主存相应的单元中,然后再接受再次更新的数据。这样保证了Cache和主存中的数据不致产生冲突。 Cache的分级体系设计 微处理器性能由如下几种因素估算: 性能=k(fⅹ1/CPI-(1-H)ⅹN) 式中:k为比例常数,f为工作频率,CPI为执行每条指令需要的周期数,H为Cache的命中率,N为存储周期数。 虽然,为了提高处理器的性能,应提高工作频率,减少执行每条指令需要的周期数,提高Cache的命中率。同时分发多条指令和采用乱序控制,可以减少CPI值;采用转移预测和增加Cache容量,可以提高H值。为了减少存储周期数N,可采用高速的总线接口和不分块的Cache方案。以前提高处理器的性能,主要靠提高工作频率和提高指令级的并行度,今后则主要靠提高Cache的命中率。设计出无阻塞Cache分级结构。 Cache分级结构的主要优势在于,对于一个典型的一级缓存系统的80%的内存申请都发生在CPU内部,只有20%的内存申请是与外部内存打交道。而这20%的外部内存申请中的80%又与二级缓存打交道。因此,只有4%的内存申请定向到DRAM中。 Cache分级结构的不足在于高速缓存组数目受限,需要占用线路板空间和一些支持逻辑电路,会使成本增加。综合比较结果还是采用分级Cache。 L1 Cache的设计有在片一级分离和统一设计两种方案。 Intel、AMD、原DEC等公司将L1 Cache设计成指令Cache与数据Cache分离型。因为这种双路高速缓存结构减少了争用高速缓存所造成的冲突,改进了处理器效能,以便数据访问和指令调用在同一时钟周期内进行。 但是,仅依靠增加在片一级Cache的容量,并不能使微处理器性能随之成正比例地提高,还需设置二级Cache。 在L1 Cache结构方面,一般采用回写式静态随机存储器(SRAM)。目前,L1 Cache容量有加大的趋势。 L2 Cache的设计分芯片内置和外置两种设计。 如AMD K6-3内置的256kB L2 Cache与CPU同步工作。外置L2 Cache,一般都要使二级Cache与CPU实现紧密耦合,并且与在片一级Cache形成无阻塞阶层结构。同时还要采用分离的前台总线(外部I/O总线)和后台总线(二级Cache总线)模式。显然,将来随着半导体集成工艺的提高,如果CPU与二级Cache集成在单芯片上,则CPU与二级Cache的耦合效果可能更佳。 由于L2 Cache内置,因此,还可以在原主板上再外置大容量缓存1MB~2MB,它被称为L3 Cache。 PC中的Cache技术的实现 PC中Cache的发展是以80386为界的。主要内容请参见“跟着CPU的脚步”一文。 目前,PC中部分已实现的Cache技术如表1所示。 结 语 目前,PC系统的发展趋势之一是CPU主频越做越高,系统架构越做越先进,而主存DRAM的结构和存取时间改进较慢。因此,Cache技术愈显重要,在PC系统中Cache越做越大。广大用户已把Cache做为评价和选购PC系统的一个重要指标。本文小结了Cache的源脉。希望可以给广大用户一个较系统的参考。