您的位置 首页 开关

Cache(高速缓存)技能详解

计算机系统一般都采用多级存储器结构,这种多级存储器的特点是从外存储器到CPU中的寄存器逐级向上,存储容量逐级减小,而存取速度逐级提高。Cache是一个速度等于或者接近上一级存储器访问速度的小容量存储器

计算机体系一般都选用多级存储器结构,如寄存器、主存、磁盘、光盘、磁带等。这种多级存储器的特色是从外存储器到CPU中的寄存器逐级向上,存储容量逐级减小,而存取速度逐级进步。因为上下两级存储器的速度能够相差l—2个数量级或许更高,因而,上一级和下一级存储器的数据交换常常成为体系瓶颈,大大下降了体系的功能。为了处理这个问题,一般选用的方法是在两级存储器之间添加一个高速缓冲存储器Cache。

所谓Cache是一个速度等于或许挨近上一级存储器拜访速度的小容量存储器,其间保存了下级存储器中部分当时所需的数据,因而CPU能够直接从Cache中获得所需的数据,而不用拜访下一级存储器。因为Cache的速度与上一级存储器恰当,因而确保了体系功率不会下降。Cache的规划依据是程序存取局部性原理,一般程序存取的一批数据总是寄存在存储器相邻的单元中,只要把这一批数据一起调入cache中,即可确保近期内需求的数据都能在Caclle中拜访成功。为了完结上述方针,在规划Cache时有必要做到以下两点:

1.确保拜访Cache有较高的射中率;
2.拜访Cache与拜访下级存储器的方法不变、容量不减。因而关于编程人员来说,Cache是彻底通明的,也便是说,他们感觉不到Cache的存在。

因为Cache的容量比下级存储器小l-2个数量级、要做到上述两点,则有必要考虑以下问题:

1.怎么安排Cache,使得下级存储器的每个部分都能够在需求时调入Cache
2.选用何种替换战略、使得拜访cache的射中率最高;
3.选用什么方法使得Cache和下级存储器的数据具有—致性,即修正Cache后确保下级存储器的内容也随之修正(或许相反)。

经过上面的介绍,咱们知道Cache也是一种存储器,其作业速度很高,如Ll和L2 Cache便是为了处理PU和DRAM主存之间的速度匹配而设置的。因而主存Cache也能够看作是高速CPU和低速DRAM之间的接口。或许说,把Cache当作一个适配器来处理CPU和DRAM之间的速度匹配问题。

当CPU要从存储器中读取一个数据字时,它首先在Cache中查找。假如找到了,则当即从Cache中读取并送到CPU中;假如在Cache中找不到,则用一个存储器读周期的时刻从主存个读出这个数据字送到CPU、并且把包括这个数据字的整个内存数据块都从主存送到Cache中。之所以要把包括被读数据字的整个内存数据块都从主存送到Cache中是因为对存储器的拜访具有局部性,也便是说接连读取的数据宇一般在内存中都是接连寄存的;调入一个数据块后,将使得今后若干次的访存都能够经过拜访Cache来完结。假如调度算法妥当,Cache的射中率能够很高。这样,从用户的视点看来,整个存储器(Cache+DRAM)就变成了既有Cache这样高的速度,又有DRAM这样的大容量的存储体系了。这关于处理存储器这个瓶颈是十分有用的。

综上所述,Cache具有以下一些特色:

·Cache尽管也是一类存储器.可是不能由用户直接拜访。
·Cache的容量不大,其间寄存的仅仅主存储器中某一部分内容的复制,称为存储器映象。
·为了确保CPU拜访时有较高的射中率,Cache中的内容应该按必定的算法替换。
·Cache中的内容应该与主存中对应的部分坚持一起。也便是说,假如主存守的内容在调入Cache之后产生了改动,那么它在Cache中的复制也应该随之改动。反过来,假如CPU修正了Cache中的内容,也应该修正主存中的相应内容。

现代的Cache体系常常选用分级安排的方法,在CPU中集成了一级Cache(L1),也称为片内Cache;在主板上装备二级Cache(L2)。CPU中的片内Cache尽管容量较小,可是能够以CPU相同的作业频率作业,因而速度极快。一般状况下在L1未射中时,才在L2中查找。从赛扬处理器开端,乃至现已把L2集成到CPU内部了(K6-3处理器也内置了二级缓存,而这时相应的Socket 7主板上的二级缓存就成为“三级”缓存了)。

所谓存储器映像问题便是怎么安排Cache.使得下级存储器的每个部分都能够在需求时调入Cache,并且确认调入的内容放在Cache中的什么地方,以便于精确迅速地查找。存储器映像的方法首要有全相联映像法、直接映象法和组相联映象法。

全相联映像法的基本思维是把一个主存块的地址(块号)和块的内容都复制到Cache行中;因为块地址也保存在Cache中,因而能够复制到Cache中的恣意方位。此法的长处是灵敏,可是查找比较困难,并且硬件的完结较为困难。

直接映像法的基本思维是一个主存块只能复制到Cache中固定的行内。该按硬件本钱低,可是因为一个Cache行要对应多个主存块,在运用中当这些主存块需求一起调入Cache时将产生冲突、添加调入调出的开支。

组相联映像法是上述两种方法的折衷方案。其基本思维是把Cache分为m个组,每个组分为n行。主存块分配时对组是固定的、而在组内的方位能够恣意。这样就归纳了两者的长处,这是现在最常用的方法。

因为Cache的容量总是远小于下一级存储器的容量,因而Cache中只能是下级存储器的部分映像。为了使下级存储器的内容都能在需求时复制到Cache中,有必要随时替换Cache内容:即把当时不需求的内容调出Cache,腾出空间,调入当时需求的内存块。在这种调入调出方法中,最重要的是替换的战略,即在需求时挑选Cache中的哪些行调出,再调入所需的内存块。这种替换战略一般称为调度算法,它是由硬件完结的。假如算法挑选不妥,将大大添加调入调出的频度。例如把一个当时不需求可是很快就将运用的行调出,必然会下降体系的功率。

常用算法有最不常常运用算法、最近最少运用算法

最不常常运用算法(LFU算法)的思维是把最近一段时刻内被拜访次数最少的行调出。因而需求对每一个行设置一个计数器,对该行的拜访次数计数、在需求时比较各个计数器的值,筛选计数次数最少的数据行。这种算法的问题是显着的、那些在程序前期被频频拜访而在后期不再运用的行,或许会在恰当长的时刻内不被淘沈而那些刚刚调入并将继续重复运用的行则或许因为其计数器中的值较小而频道筛选。这将严重影响体系的功率。

另一种较常用的算法是最近最少运用算法(LRU算法)。LRU算法的思维是将最近一段时刻内最少被拜访过的行筛选出局。因而也需求为每行设置一个计数器、可是计数方法与LFU算法不同。LRU算法是把射中行的计数器清零、其它各行计数器加1。当需求替换时筛选行计数器计数值最大的数据行出局。

此外还有一些算法,鉴于篇幅不再赘述。

因为Cache中的内容仅仅主存中相应单元的“复制”。因而有必要坚持这两处的数据肯定一起,不然就会产生过错。形成Cache和相应主存单元数据不一起的原因来自两个方面。一是CPU读人Cache数据作了修正后再写入Cache,而主存中相应单元的内容并未随之改变二是在有多个设备对主存拜访的状况下形成的。如多处理器或有DMA的体系,它们直接拜访主存储器,修正了其间的内容,而cache中的相应数据却末随之修正。

1.CPU修正Cache后的处理

关于CPU修正了Cache的数据,怎么使主存中相应单元的数据也随之修正的问题。一般有三种不同的处理方法。

一种方法称为“直写式(write—through)”,其原理是在CPU向Cache写入的一起,也把数据写入主存储器,以确保Cache和主存中相应单元数据的一起性。直写式体系简略牢靠,但因为CPU每次更新Cache时都要对主存储器写入,习此速度遭到了影响。

第二种方法称为“缓冲直写式(Posted Write)”,其原理是CPU在更新Cache时不直接更新主存中的数据,而是把更新的数据送入一个缓冲器中暂存,这样CPU就不用等候主存写入形成的延时而直接进入下一周期的操作在恰当的时分再把缓冲器中的内容写入主存中(例如在CPU读Cache的一起;把缓冲器的内容写入主存)。这种方法在必定程序上进步了速度,但因为缓冲器的容量有限,只能锁存——次写入的数据,假如产生接连的写操作则CPU仍需求等候。上述的直写式或缓冲直写式不只速度低,并且在许多时分向主存写入是不用要的。例如CPU或许屡次对同一个Cache单元更新内容,实际上只需把最终更新成果写入主存即可,而不用更新一次Cache,就向主存写入一次。依据这种思维提出了第三种方法,称为“回写式(Write—back)”。有的资猜中也称为“写回”。这种方法的原理是CPU修正了Cache的内容后并不当即修正主存中相应的单元,而在被修正的Cache单元的内容将从Cache中筛选时(如替换页面)才把它写入主存储器的相应单元中。回写式体系速度快,防止了不用要的冗余写操作,但结构上比较复杂。当时的微机遍及采回写式体系。

2.多处理器或DMA直接拜访主存储器后的处理

多处理器或DMA直接拜访主存储器形成主存和cache中的数据不一起产生在以下景象:当主存中某单元内容调入Cache后,又由其它处理器或DMA更新了主存储器该单元的内容。为了防止这种状况下的数据不一起,一般选用以下三种处理方法。

一种方法称为“总线监督”,即由cache控制器随时监督体系的地址总线,若有其它部件向主存中写入了内容,则把Cache中相应单元的内容置为无效,CPU有必要从头从主存中读人该单元的内容。

第二种方法称为“主存监督”、由Cache控制器监督一切主存储器的读写操作一切对主存的拜访都有必要经过Cache来完结。这样,凡对主存的写入也就对Cache中的相应单元进行复制然后确保了两者数据的一起性。

第三种方法是设置“不行Cache区 (Non Cacheable Block)”,这种方法的基本思维是在主存中拓荒一块区域,该区域中数据不受cache控制器的办理,不能调入Cache,CPU只能直接读写该区域的内容。其它总线设备也只能把数据直接写入该区域中。因为该区域不与Cache产生关系,也就不存在数据不一起的问题。不行Cache区方法是微机中最首要的方法,不少BIOS设置程序答应用户设置不行Cache区的首地址和尺度、以及可Cache区的地址规模。

Cache在微机体系中获得了广泛应用。除了CPU中的cache外,硬盘、光盘乃至主存中部可找到它的踪迹。

1 CPU中的Cache

从486CPU开端,在CPU芯片内集成了Cache,称为片内Cache。此刻因为遭到工艺上的约束,片内Cache的容量很小,只要8KB。片内Cache的最大长处是,CPU对它的拜访是在芯片内部进行的,不需求经过总线传送数据因而速度很快;可是因为其容量很小,而处理器的时钟频率又很高,一旦呈现片内cache末射中的状况,功能将显着化。因而在处理器芯片之外的主板上再加Cache,称为二级Cache(L2Cache),或称为板载Cache。

在实际运用中,进入Cache的内容既能够是指令也能够是数据,而CPU关于这两者的处理是不彻底相同的。为了使体系功率到达最佳状况,从Pentium处理器开端把片内Cache容量添加到16KB。其间指令CBche和数据Cache各占8KB。

Intel公司在1995年底推出了Pentium Pro(P6),为了进一步改进体系功能,P6选用了双穴封装,即除了CPU外,还把256/5l2KB的二级Cache也封装在同一个陶瓷片内。这样,L2也能以处理器的时钟高速运转,大大地进步了体系功率

因为P6选用的方法本钱很高,在InteI随后推出的Pentium II中,把L2又从CPU陶瓷封装中分立出来,和CPU一起装置在一块称为SEC的卡盒内,而Pentium II处理器则选用了双独立总线结构,其间一条总线联接L2高速缓存,另一条担任主存。因为Pentium II的L2只能以CPU时钟的一半作业。因而比Pentium Pro的L2慢一些。作为一种补偿,Intel将Pentium II上的Ll高速缓存从16K加倍到32K,然后削减了对L2高速缓存的调用频率。而在非Intel CPU中,L1的容量则更大,以期求得更好的体系功能。

为了匹配硬盘和主存在数据传送速度上的对立,微机体系中毫无例外地选用了硬盘高速缓存,或称为硬盘Cache。硬盘高速缓存分为两种:硬件高速缓存和软件高速缓存。软件高速缓存是使用软件东西(如Smart Drive)在体系主存中拓荒的一块区域作为数据传送缓冲区,硬件高速缓存则是在磁盘控制器中装置的一块RAM,经过RAM缓冲区读写数据能够得到更高的拜访速度。前期硬盘中的cache很小,只要数十KB到数百KB,现在新式硬盘的高速缓存均到达2MB。在选购硬盘时除了留意容量、带宽、转速等参数外,还应该考虑Cache的容量,越大越好。当Cache容量大时,能够确保较安稳的突发数据传送;而假如Cache容量较小,在读写大型图形或视频文件时,因为接连传送的数据量很大,缓冲区则不能表示出其优越性,使得数据传送不再能处于突发传送方法,而处于继续传送方法,下降了数据带宽。

3.光盘

以CD—ROM驱动器为例,其间装备的Cache一般为128KB或许256KB,高级CD—ROM驱动器中的Cache容量可达512KB乃至更高。在CD ROM中装备Cache的意图仍然是作为光盘的高速缓存,以便削减读盘的次数,这关于改进CD RoM的功能是很有优点的。
相同,其它种类的光盘驱动器,如CD-R、CD—RW、M0、DVD—ROM等,也都装备了Cache。

4.主存储器中的Cache

主存一般是选用DRAM(动态随机存取存储器)器材制造的,而Cache一般选用速度更高的SRAM(静态随机存取存储器)制造。一种新式的增强DRAM)选用了在DRAM芯片上集成一个小容量SRAM的方法,咱们能够把这一小片SRAM称为主存中的Cache。这个Cache在突发式读写时十分有利,使DRAM芯片的功能得到了显着的进步。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/dianyuan/kaiguan/198862.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部