ARM存储器之:高速缓冲存储器Cache
15.3.6Cache的替换策略
在Cache访问过程中,发现查找的Cache行已经失效,则需要从主存中调入新的行到Cache中。在采用组相联的Cache中,一个来自主存的行可以放入多个Cache组中。当所有组中的对应行都已经装满时,就要使用Cache替换算法,从这些组中找出一个Cache,把它调回到主存中原来存放它的地方,腾出新行来存放新调入的行。被选中替换的Cache行被称为丢弃者(victim)。如果丢弃者中包含有效的脏数据,那么在该行被写入新数据之前,控制器必须把该行中的数据写到主存。选择和替换丢弃Cache行的过程被称为淘汰(eviction)。
Cache控制器选择下一个丢弃Cache行的策略被称为替换策略。在ARM常用的替换算法有两种:轮转算法和随机替换算法。
轮转算法又叫循环法,这种算法维护一个逻辑计数器,每进行一次替换,计算器加1,当计算器达到最大值时,就被复位成预先定义好的一个基值。这种算法容易预测最坏情况下的Cache性能。但它一个明显缺点就是,在程序发生很小变化时,可能造成Cache性能急剧下降。
随机算法从特定的位置上随机地选出一行替换出去。它通过一个随机发生器来完成上述操作。当每次需要替换Cache行时,随机发生器将产生一个随机数,用新行将编号为该随机数的行替换出去。这种算法与轮转算法最大的区别在于它在每次产生替换行时,增加的是一个非连续值,这个值是由控制器随机产生的。同样,当丢弃计算器达到最大值时,会被复位成预先定义好的一个基值。
相比之下,随机算法没有考虑到程序的局部性特点,因而效果有时不尽人意,同时这种算法不易预测最坏情况下Cache性能。而轮转法就有更好的可预测性,容易预测最坏情况下Cache性能,在一些实时系统中,十分重视这一点。但是,轮转法替换策略在存储器访问发生很小变化时,可能造成Cache性能有较大变化。
表15.13显示了目前比较流行的ARM核所使用的策略。
表15.13 常见ARM核使用的替换策略
内核 | 写策略 | 替换策略 |
ARM720T | 直写法 | 随机 |
ARM740T | 直写法 | 随机 |
ARM920T | 直写法、回写法 | 随机、轮转 |
ARM940T | 直写法、回写法 | 随机 |
ARM926EJ-S | 直写法、回写法 | 随机、轮转 |
ARM946E | 直写法、回写法 | 随机、轮转 |
ARM1020E | 直写法、回写法 | 随机、轮转 |
ARM1026EJS | 直写法、回写法 | 随机、轮转 |
IntelStrongARM | 回写法 | 轮转 |
IntelXscale | 直写法 | 轮转 |
15.3.7与Cache相关的编程接口
与Cache编程相关的CP15的寄存器共有3个,它们分别为c1、c7及c9。
(1)寄存器c1中与Cache相关的位
c1寄存器在前面CP15寄存器一节中已经介绍过,下面对Cache的控制位进行详细介绍。
表15.14显示了c1中与Cache有关位的作用。
表15.14 c1中与Cache相关的位
相关位 | 作用 |
C(bit[2]) | 当数据Cache和指令Cache分开时,本控制位禁止/使能数据Cache 当数据Cache和指令Cache统一时,本控制位禁止/使能整个Cache 0:禁止Cache 1:使能Cache 如果系统中不含Cache,读取时该位返回0,写入时忽略该位 当系统中Cache不能禁止时,读取返回1,写入时忽略该位 |
续表
相关位 | 作用 |
I(bit[12]) | 当数据Cache和指令Cache是分开的,本控制位禁止/使能指令Cache 0:禁止指令Cache 1:使能指令Cache 如果系统中使用统一的指令Cache和数据Cache或者系统中不含Cache,读取该位时返回0,写入时忽略该位 当系统中的指令Cache不能禁止时,读取该位返回1,写入时忽略该位 |
RR(bit[14]) | 如果系统中Cache的淘汰算法可以选择的话,本控制位选择淘汰算法 0:选择常规的淘汰算法,如随机淘汰算法 1:选择预测性的淘汰算法,如轮转(round-robin)淘汰算法 如果系统中淘汰算法不可选择,写入该位时被忽略,读取该位时,根据其淘汰算法可以简单地预测最坏情况,并返回1或者0 |
存储器相关文章:存储器原理
评论