CPU和主存之间的性能差距
总线占用:CPU和I/O争抢访问主存
访问冲突:指令预取和数据读写
CPU不直接访问主存,只与高速Cache交换信息
CPU与Cache的数据传送以字为单位
主存与Cache的数据传送以块为单位
一个块由若干字组成,是定长的
原理:按内容存取的存储器,可以选择关键字的一个字段作为地址
写入时:按顺序写入,不需要地址
读出时:CPU给出一个相联关键字,用它和存储器中所有单元中的一部分信息进行比较,若它们相等,则将 此单元中余下的信息读出。
在虚拟存储器中存放段表、页表和快表
Cache的行地址
主存的平均读出时间尽可能接近Cache的读出时间
在所有的存储器访问中,由cache满足CPU需要的部分应占很高的比例
程序访问的局部性
CPU欲访问的数据已经在缓存中,即可直接访问Cache
CPU欲访问的数据不在Cache内,此时需要将该数据所在的主存整个子块一次调入Cache中
CPU要访问的信息已在Cache内的比率
在一个程序执行期间,设Nc表示cache完成存取的总次数,Nm表示主存完成存 取的总次数,h定义为命中率,则有h = Nc/(Nc + Nm)
若tc表示命中时的Cache访问时间,tm表示未命中时的主存访问时间,1-h表示 未命中率,则cache/主存系统的平均访问时间ta为: ta =h* tc + (1-h) * tm
程序访问模式
当Cache容量达到一定值时,命中率不会因为容量的增大而明显提高
块的大小
块大小=行大小=个字
主存的块数=
主存地址长度=(s+w)位
标记大小=块号的位数=s位
cache的行数: 不由地址格式确定
优点:冲突概率小,Cache的利用高。
缺点:比较电路实现成本高,需要一个访问速度很快代价高的相联存储器
应用场合:适用于小容量的Cache
块大小=行大小=个字
主存的块数=
主存地址长度=(s+w)位
Cache的行数=m=2
标记大小=(s-r)位
优点:比较电路少,所以硬件实现简单
缺点:冲突概率高(易抖动,频繁交换)
应用场合:适合大容量Cache
比全相联容易实现,冲突低
v=1,则为直接相联映射方式
u=1,则为全相联映射方式
v的取值一般比较小, 一般是2的幂,称之为v路组相联cache
主存地址长度=(s+w)位
块大小=行大小=2w个字
主存的块数=2s
组号的位数为d 2d=u
标记大小=(s-d)位
V路比较器较易实现
块在组中存放有一定灵活性,冲突较少
是全相联映射和直接映射方法的折衷
应用场合:因兼顾了二者优点又尽量避免了缺点,被普遍使
LFU(最不经常使用,Least Frequently Used)
被访问的行计数器增加1,换值小的行
不能反映近期cache的访问情况
LRU(近期最少使用,Least Recently Used)
被访问的行计数器置0,其他的计数器增加1
换值大的行,符合cache的工作原理
从特定的行位置中随机地选取一行换出
在硬件上容易实现,且速度也比前两种策略快
缺点是随意换出的数据很可能马上又要使用,从而降低命中率和cache工作效率
但这个不足随着cache容量增大而减小
随机替换策略的功效只是稍逊于前两种策略
当CPU写cache命中时,只修改cache的内容,而不立即写入主存
只有此行被换出时才写回主存
这种方法使cache真正在CPU-主存之间读写两方面都起到了高速缓存作用
对一个cache行的多次写命中都能够在cache中快速完成,只是需要替换时才写回速度较慢的主存,减少访问主存的次数
每个cache行配一个修改位,换出时,对行的修改位进行判断,决定是写回还是舍掉
显著减少写主存次数,但存在不一致性隐患
当写cache命中时,cache与主存同时发生写修改,因而较好地维护了cache与主存内容的一致性
是否将修改后的主存块取到cache,有两种选择方法 WTWA:取主存块到cache并为它分配一个行位置
WTNWA:不取主存块到cache
基于写回法并结合全写法
对称多处理器系统中(每个处理器地位相同,且都有内置的Cache)/多级Cache
写命中与写未命中的处理方法与写回法基本相同
因为第一次写cache命中时,CPU要在总线上启动一个存储写周期, 其他cache监听到此主存块地址及写信 号后,即可拷贝该块或及时作废,以便维护系统全部 cache的一致性