在设计和开发系统程序和应用程序时,程序员通常采用模块化的程序设计方法。某一模块的程序,往往集中在存储器逻辑地址空间中很小的一块范围内,且程
序地址分布是连续的。也就是说,CPU在一段较短的时间内,是对连续地址的一段很小的主存空间频繁地进行访问,而对此范围以外地址的访问甚少,这种现象称
为程序访问的局部性。
高速缓冲存储器(Cache)技术就是利用程序访问的局部性原理,把程序中正在使用的部分(活跃块)存放在一个小容量的高速Cache中,使CPU的访存操作大多针对Cache进行,从而解决高速CPU和低速主存之间速度不匹配的问题,使程序的执行速度大大提高。
1. Cache的功能
Cache是介于CPU和主存之间的小容量存储器,存取速度比主存快,接近CPU。它能高速地向CPU提供指令和数据,提高程序的执行速度。Cache技术是为了解决CPU和主存之间速度不匹配而采用的一项重要技术。
Cache是主存的缓冲存储器,由高速的SRAM组成,所有控制逻辑全部由硬件实现,对程序员而言是透明的。随着半导体器件集成度的不断提高,当前
有些CPU已内置Cache,并且出现了两级以上的多级Cache系统。Cache系统与CPU和主存的关系如图3-12所示。
2. Cache的基本原理
CPU与Cache之间的数据交换是以字为单位的,而Cache与主存之间的数据交换则是以块为单位的。一个块由若干个定长字组成。
当CPU读取主存中的一个字时,该字的主存地址被发给Cache和主存,此时,Cache控制逻辑依据地址判断该字当前是否存在于Cache中:若
在,该字立即被从Cache传送给CPU;若不在,则用主存读周期把该字从主存读出送到CPU,同时把含有这个字的整个数据块从主存读出送到Cache
中,并采用一定的替换策略将Cache中的某一块替换掉,替换算法由Cache管理逻辑电路来实现。
Cache原理图如图3-13所示。图中,按内容寻址的相联存储器(表),用于存放与Cache中数据相对应的主存地址,可以快速检索、判断CPU读取的某个字当前是否存在于Cache中。
3. Cache的命中率
基于程序访问的局部性原理,增加Cache使得要访问的数据绝大多数都可以在Cache中找到,这样才能在性能上使主存的平均读出时间尽可能接近Cache的读出时间。Cache的工作效率通常用“命中率”来表示。
命中率指的是CPU要访问的信息在Cache中的概率,Cache的命中率越高,CPU访问主存的速度就越接近访问Cache的速度。通常
Cache的容量越大,存储的块也越多,CPU的命中率就越高。但是,当Cache的容量达到一定值时,命中率并不会随着容量的增大而增加,而且
Cache容量的增大将导致成本的增加,所以,Cache的容量一般是命中率与成本价格的折中。
在一个程序执行期间,设 Nc表示Cache完成存取的总次数,Nm表示主存完成存取的总次数,h定义为命中率,则有
若tc表示命中时的Cache访问时间,tm表示未命中时的主存访问时间,1-h表示未命中率,则Cache-主存系统的平均访问时间ta为:
设e表示访问效率,则有
为提高访问效率e,命中率h越接近1越好。命中率h与程序的行为、Cache的容量、组织方式、块的大小有关。
------------分享自上海交通大学,网络教育精品资源共享课