cache工作原理

来源:互联网 发布:中国版图书馆cip数据 编辑:程序博客网 时间:2024/05/01 03:01

Cache的工作原理
    1.Cache的引入
    请注意下面两种情况:
    ①大容量主存一般采用DRAM,相对SRAM速度慢,而SRAM速度快,但价格高。
    ②程序和数据具有局限性,即在一个较短的时间内,程序或数据往往集中在很小的存储器地址范围内。    
    因此,在主存和CPU之间可设置一个速度很快而容量相对较小的存储器,如图3.35所示。在其中存放CPU当前正在使用以及一个较短的时间内将要使用的程序和数据,这样,可大大加快CPU访问存储器的速度,提高机器的运行效率。

 

 

 




   2.Cache的基本原理
  Cache与主存都分成块(常常将Cache块说成Cache行),每块由多个字节组成,大小相等。在一个时间段内,Cache的某块中放着主存某块的全部信息,即Cache的某一块是主存某块的副本(或叫映像),如图3.36所示。


 
    Cache除数据部分外,还应记录放在某块中的信息是主存中哪一块的副本。因此,还应有第二个组成部分,即标记(tag)——记录主存块的块地址信息。
    采用Cache后,进行访问存储器操作时,不是先访问主存,而是先访问Cache。所以存在访问Cache时对主存地址的理解问题(指物理地址)。由于Cache数据块和主存块大小相同,因此主存地址的低地址部分(块内地址)可作为Cache数据块的块内地址。
    对主存地址的高地址部分(主存块号)的理解与主存块和Cache块之间的映像关系
(mapping)有关。这里考虑一种最简单的情况——直接映像,例如(见图3.37),将主存空间分成4 096块,块编号应是地址码的高12位,写成十六进制为000H~FFFH。按同样大小,将Cache分成16块,块编号为OH~FH。映像关系约定见表3.7。这就是说块编号十六进制的第三位相同的主存块(共256块)只能和该位数码所指定的Cache块建立映像关系。根据这种约定,某一主存块和Cache建立起映像关系时,该Cache块的标记部分只需记住主存块的高2位十六进制数。例如,第010H号主存块当前和Cache第0块建立起映像关系,则Cache第0块的标记部分只需记住01H。由此可见,当用主存地址访问Cache时,主存的块号可分解成Cache标记和Cache块号两部分。因此,主存地址被理解成图3.38所示的形式。




 
    下面结合该映像关系的例子和图3.39来说明Cache的工作原理。设当前010号主存块在Cache中,即它和Cache的第0块建立起映像关系。现要对两个主存地址单元进行读操作,第一个地址的高3位(十六进制)为0lOH,第二个地址的高3位(十六进制)为020H。
    CPU进行读操作时,首先用主存地址的中间部分——Cache块号找到Cache中的一块(对此例,为第0块),读出此块的标记(对此例,现在为01H),然后拿它与主存地址的高位部分——标记进行比较。对于第一个主存地址,比较的结果是相等的。这表明主存地址规定的块在Cache中(有副本),这种情况称为命中。此时用主存地址的低位部分——块内地址从Cache块号所选择的块中读取所需的数据。对于第二个主存地址,比较的结果不相等。
这表明主存地址所规定的块不在Cache中,称为未命中,这时需要访问主存,并且将含有该地址单元的主存块的信息全部装入Cache的第0块,并修改第0块Cache标记,使其值为02H。


 
    通过上面的例子,可以这样来描述(2ache最基本的工作原理:在存储系统中设置了Cache的情况下,CPU进行存储器访问时,首先访问Cache标记,判是否命中,如果命中,就访问Cache(数据部分),否则访问主存。
    将访问的数据在Cache中的次数(即命中的次数)与总的访问次数之比称为命中率。影响命中率的因素主要有三个:Cache的容量、Cache块的划分以及Cache块与主存块之间的映像关系。一般来说,Cache的容量大一些,会提高命中率,但达到一定程度时,命中率的提高并不明显。目前,一般为256 KB或512 KB,命中率可达98%左右。
    下面还是通过例子来说明引入Cache块的好处。已知Cache的存取周期为50 ns,主存的存取周期为250 ns。设命中率为98%,即100次访问存储器的操作有98次在Cache中,只有2次需要访问主存,则这100次访问存储器操作的平均存取周期为(50 ns×98+250 ns×2)÷100=54 ns。由此可见,由于引入了Cache,使得CPU访问存储器的平均存取周期由不采用Cache时的250 ns降到了54 ns。也就是说,以较小的硬件代价使Cache/主存储器系统的平均访问时间大大缩短,从而大大提高了整个微机系统的性能。   
需要指出,Cache的功能全部由硬件实现,涉及Cache的所有操作对程序员都是透明的。
3.Cache的读/写操作
    CPU进行存储器读操作时,根据主存地址可分成命中和未命中两种情况。对于前者,从Cache中可直接读到所需的数据;对于后者,需访问主存,并将访问单元所在的整个块从内存中全部调入Cache,接着要修改Cache标记。若Cache已满,需按一定的替换算法,替换掉一个旧块。   
  CPU进行存储器写操作时,也可分成两种情况。一是所要写入的存储单元根本不在Cache中,这时写操作直接对主存进行操作(与Cache无关);二是所要写入的存储单元在Cache中。对于第二种情况需做一些讨论。Cache中的块是主存相应块的副本,程序执行过程中如果遇到对某块的单元进行写操作时,显然应保证相应的Cache块与主存块的一致。
这里有两种处理方式。一是暂时只向Cache写入,并用标志注明,直到这个块被从Cache,中替换出来时,才一次写入主存,称之为回写式;二是每次写入Cache的同时也写入主存,称之为通写式。两种方式各有优缺点。回写式占用总线时间少,写速度快,但不能随时保证Cache与主存保持一致,如果此期间发生DMA操作,则可能出错(DMA操作将在第四章介绍,暂时可将其理解为在输入/输出设备与存储器之间直接进行数据传送,这种操作不需要CPU参与。所以,可能出现CPU和DMA控制器同时访问同一主存块的情况);通写式可使Cache块和主存块始终保持一致,但占用总线时间长,总线冲突较多

原创粉丝点击