当前位置:首页 > 学习频道 > 计算机

现代微机系统采用高速缓冲存储器技术

日期:2016-03-24 10:56:59 来源:大学生学习网

  为了提高程序的运行速度,在现代微机系统中,采用了高速缓冲存储器(Cache)技术。它的用途是把程序中正在使用的部分(活跃块)存放在速度快、容量小的Cache中,使CPU的访问操作大多数对Cache进行,从而大大提高CPU的访问速度。

Cache采用存取速度快的SRAM器件构成。通常分为两级:集成在CPU芯片中的Cache称为一级(L1 Cache),其速度与CPU相匹配,但 容量较小,一般为几KB到几十KB;安装在主板上的Cache称为二级(L2 Cache),容量较大,从几百千字节到几兆字节不等。

80486 CPU芯片内有8KB的Cache,存放程序和数据。Pentium芯片内有16KB的Cache,分为两个独立的8KB区域,其中一个用 于存放程序,另一个用于存放数据。80486和Pentium支持L2 Cache, PentiumⅡ以后的CPU则将L2 Cache与CPU内核一 起封装在一只金属盒内,或者直接把L2 Cache也集成到CPU芯片内,进一步提高了速度,改善了性能。

5.5.1 Cache的工作原理

Cache介于CPU和主存之间,并和主存有机地结合起来,借助于辅助硬件组成Cache-主存层次结构,其工作原理。

Cache中的信息是主存中信息的一部分。Cache和主存都被分成若干个大小相等的块,每块由若干字节组成,由于Cache的容量远小于主存的容量, 所以Cache中的块数要远少于主存中的块数,它保存的信息只是主存中最活跃的若干块的副本。当CPU读/写信息时,首先通过Cache控制部件的地址变 换机构访问Cache,如果Cache被命中,就直接对Cache进行访问,与主存无关;如果Cache未命中,则仍须访问主存,并把要访问的信息块一次 从主存调入Cache内,若此时Cache已满,则须根据某种置换算法,用新块的信息置换旧块中的信息。

5.5.2 Cache的地址映射

为了把信息从主存中取出送入Cache中,必须使用某种地址变换机制把主存地址映射到Cache中定位,称之为地址映射。其实现方法是:将主存和 Cache都分为大小相等的若干块(或称页),每块的大小为2n个字节,通常为29(512B)或210(1024B)或211(2048B)等,以块为 单位进行映射。如假设某系统的主存容量为1MB,若每块容量为1KB,则被分为1024块;Cache容量为8KB,每块容量也是1KB,则被分为8块。 下面以此为例,介绍三种Cache的地址映射方法(见)。

1.直接地址映射

直接地址映射是指主存中每一个块只能映射到某一固定的Cache块中,如(a)所示。

把主存按Cache大小分为若干组,每一组按对应的块号进行映射。如主存的第0块,第8块……,第1016块,只能映射到Cache的第0块;而主存的第1块,第9块……,第1017块只能映射到Cache的第1块,依次类推。

这种映射方法比较简单,且地址转换速度快,但不够灵活,使得Cache的存储空间得不到充分利用。

2.全相联地址映射

全相联地址映射是指主存中的每一块都可以映射到Cache的任何一块位置上,如(b)所示。这种映射方法比较灵活,Cache的利用率高;但地址转换速度慢,而且需要采用某种置换算法将Cache中的内容调入调出,实现起来系统开销大。

3.组相联地址映射

组相联地址映射是直接地址映射和全相联地址映射的折中方案,如(c)所示。主存和Cache都分组,主存中一个组内的块数与Cache中的分组数相同。 组间采用直接地址映射,而组内采用全相联地址映射。主存中的各块与Cache的组号间有固定的映射关系,但可自由映射到对应的Cache组中的任何一块。 如主存中的第0块可映射到Cache的第0组的第0块或第1块;主存中的第1块可映射到Cache的第1组的第2块或第3块……这种映射方法比直接地址映 射灵活,比全相联地址映射速度快。

5.5.3 Cache的置换算法

在采用全相联地址映射和组相联地址映射方式时,在主存向Cache传送一个新块时,若Cache中的可用位置已被占用时,就应该调用置换算法,淘汰旧块,调入新块进行置换。下面简要介绍两种常用的置换算法。

1.先进先出(FIFO)算法

FIFO算法的基本思想是:按调入Cache的先后决定淘汰的顺序,即在需要更新时,将最先进入Cache的块作为被置换的块。这种算法不需要随时记录各个块的使用情况,容易实现,而且系统开销小;其缺点是可能会把一些需要经常使用的程序块被调入的新块置换掉。

2.近期最少使用(LRU)算法

LRU算法的基本思想是:把CPU近期最少使用的块作为被置换的块。这种置换算法相对合理,但需要随时记录Cache中各块的使用情况,以便确定哪个块是近期最少使用的块,实现起来比较复杂,系统开销较大。