cache基本原理
1.cache的功能
cache是介于CPU和主存之间的小容量存储器,存取速度比主存快。它能高速地向CPU提供指令和数据,加快程序的执行速度。它是为了解决CPU和主存之间速度不匹配而采用的一项重要技术
2. cache的基本原理
CPU与cache之间的数据交换是以字为单位,而cache与主存之间的数据交换是以块为单位。一个块由若干定长字组成的。当CPU读取主存中一个字时,便发出此字的内存地址到cache和主存。此时cache控制逻辑依据地址判断此字当前是否在 cache中:若是,此字立即传送给CPU;若非,则用主存读周期把此字从主存读出送到CPU,与此同时,把含有这个字的整个数据块从主存读出送到cache中。由始终管理cache使用情况的硬件逻辑电路来实现LRU替换算法
3.cache的命中率
增加cache的目的,就是在性能上使主存的平均读出时间尽可能接近cache的读出时间。因此,cache的
命中率应接近于1。由于程序访问的局部性 ,这是可能的。 在一个程序执行期间,设Nc 表示cache完成存
取的总次数,Nm 表示主存完成存取的总次数,h定义为命中率,则有
h=Nc/(Nc+Nm) ...(3.4)
若tc 表示命中时的cache访问时间,tm 表示未命中时的主存访问时间,1-h表示未命中率,则cache/主
存系统的平均访问时间ta 为:
ta =htc +(1-h)tm (3.5)
设r表示主存慢于cache的倍率,e表示访问效率,则有:
r=tm /tc (3.6)
e=tc /ta=tc/(htc+(1-h)tm)=1/(r+(1-r)h)=1/(h+1-h)r)
为提高访问效率,命中率h越接近1越好,r值以5—10为宜,不宜太大。命中率h与程序的行为、cache的容
量、组织方式、块的大小有关。
【例5】 CPU执行一段程序时,cache完成存取的次数为1900次,主存完成存取的次数为100次,已知cache
存取周期为50ns,主存存取周期为250ns,求cache/主存系统的效率和平均访问时间。
【解】
h=Nc /(Nc +Nm )=1900/(1900+100)=0.95
r=tm /tc =250ns/50ns=5
e=1/(r+(1-r)h)=1/(5+(1-5)×0.95)=83.3%
ta =tc /e=50ns/0.833=60ns
主存与cache的地址映射
cache的容量很小,它保存的内容只是主存内容的一个子集,且cache与主存的数据交换是以块为单位。
地址映射 即是应用某种方法把主存地址定位到cache中。
址映射方式有全相联方式 、直接方式 和组相联方式 三种
1.全相联映射方式
主存中一个块的地址与块的内容一起存于cache的行中,其中块地址存于cache行的标记部分中。
这种方法可使主存的一个块直接拷贝到cache中的任意一行上,非常灵活。
它的主要缺点是比较器电路难于设计和实现,因此只适合于小容量cache采用。
直接映射方式
这也是一种多对一的映射关系,但一个主存块只能拷贝到cache的一个特定行位置上去。
cache的行号i和主存的块号j有如下函数关系:i=j mod m (m为cache中的总行数)
组相联映射方式
这种方式是前两种方式的折衷方案。它将cache分成u组,每组v行,主存块存放到哪个组是固定的,至
于存到该组哪 一行是灵活的,即有如下函数关系:m=u×v 组号 q=j mod u
替换策略
cache工作原理要求它尽量保存最新数据,必然要产生替换。
对直接映射的cache来说,只要把此特定位置上的原主存块换出cache即可。
★最不经常使用(LFU)算法
LFU算法将一段时间内被访问次数最少的那行数据换出。每行设置一个计数器。从0开始计数,每访
问一次, 被访行的计数器增1。当需要替换时,将计数值最小的行换出,同时将这些行的计数器都清零。
这种算法将计数周期限定在对这些特定行两次替换之间的间隔时间内,不能严格反映近期访问情况。
★近期最少使用(LRU)算法
LRU算法将近期内长久未被访问过的行换出。每行也设置一个计数器,cache每命中一次,命中行计
数器清零,其它各行计数器增1。当需要替换时,将计数值最大的行换出。
这种算法保护了刚拷贝到cache中的新数据行,有较高的命中率。
★随机替换
随机替换策略从特定的行位置中随机地选取一行换出。在硬件上容易实现,且速度也比前两种策略快。
缺点是降低了命中率和cache工作效率。
cache的写操作策略
CPU对cache的写入更改了cache的内容。可选用写操作策略使cache内容和主存内容保持一致。
★写回法
当CPU写cache命中时,只修改cache的内容,而不立即写入主存;只有当此行被换出时才写回主存。
这种方法减少了访问主存的次数,但是存在不一致性的隐患。
实现这种方法时,每个cache行必须配置一个修改位,以反映此行是否被CPU修改过。
★全写法
当写cache命中时,cache与主存同时发生写修改,因而较好地维护了cache与主存的内容的一致性。
当写cache未命中时,直接向主存进行写入。cache中每行无需设置一个修改位以及相应的判断逻辑。
缺点是降低了cache的功效。
★写一次法
基于写回法并结合全写法的写策略,写命中与写未命中的处理方法与写回法基本相同,只是第一次写命
中时要同时写入主存。这便于维护系统全部cache的一致性。
奔腾PC机的cache
奔腾PC机采用两级cache结构。安装在主板上的2级cache(L2)采用2路组相联映射方式,集成在CPU内的
1级cache(L1)也采用2路组相联映射方式,L1又是L2的子集,从而使L1未命中处理时间大大缩短。CPU中的
L1分设成各8KB的指令cache和数据cache,有利于CPU高速执行程序。
数据cache采用2路组相联结构,采用LRU替换算法,一组两行共用一个LRU二进制位。数据cache的工作
方式受CPU控制寄存器CR0中CD和NW位组合状态控制,如下表3.8所示。
表3.10 奔腾CPU片内数据cache工作方式
CD NW 新行填入 全写法 使无效 0 0 允许 允许 允许 1 0 禁止 允许 允许 1 1 禁止 禁止 禁止 其中CD=1,NW=1时复位后状态,而CD=0,NW=0时最佳使用状态