cache替换策略
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
嵌入式处理器的低开销的缓存替换算法
我们提出一个新的一级(L1)数据缓存置换算法-----PRR(Protected Round-Robin)保护的轮询调度算法,很简单,被纳入嵌入式处理器。嵌入式应用的能量局限性使他只能用比较简单的缓存置换算法。
循环调度(Round Robin Scheduling)算法就是以循环的方式依次将请求调度不同的服务器,即每次调度执行i = (i + 1) mod n,并选出第i台服务器。算法的优点是其简洁性,它无需记录当前所有连接的状态,所以它是一种无状态调度。
为了简化与RAM之间的通信,高速缓存控制器是针对数据块,而不是字节进行操作的。
从程序设计的角度讲,高速缓存其实就是一组称之为缓存行(cache line)的固定大小的数据块,其大小是以突发读或者突发写周期的大小为基础的。
每个高速缓存行完全是在一个突发读操作周期中进行填充或者下载的。即使处理器只存取一个字节的存储器,高速缓存控制器也启动整个存取器访问周期并请求整个数据块。缓存行第一个字节的地址总是突发周期尺寸的倍数。缓存行的起始位置总是与突发周期的开头保
持一致。
每一个缓存行都有一个保护位,用来指示该行下次是不是被替换,初始的时候所有的保护位都是关闭的,当该行被访问时,保护位打开。
有一个专门指向cache块的指针,指针用来指向下一个要被替换的块,只有当未命中发生的时候,这个指针才会发生变化,当未命中发生时,这个指针指向的块要被替换。假如这个块是受保护的,则它的保护位将被关闭。而且指针指向下一个要被替换的块,这个过程一直持续到发现一个未受保护的块为止。
当新的缓存块进入缓存,其保护位是打开的,但指针不递增,即此时指针仍然指向新的缓存块。这意味着,下一个未命中发生时,其保护将关闭。这只提供了一个新的高速缓存行一个周期的保护。让我们更详细地看一下这个。
当新的缓存块进入,保护位打开,而指针递增时,他将会被保护两个循环周期。当新的缓存块进入,保护位关闭,而指针递增时,他也会被保护两个周期。
有选择性缓存的分段的LRU缓存替换机制
:567 算法在567 的基础上进行分段,每段的大小是可变的,每段均采用567 算法,可利用多条运动链来实现。分段的个数B 一旦确定就被固定了,并且个数越多,:567 算法就越精确,但实现起来就越复杂。每段拥有一个权值,用来标识该段中用户记录的活跃程度,权值越高,则表明该段中用户记录的活跃程度越高。沿用587 的做法,为每个用户记录分别设置一个访问次数计数器。每当某个用户记录被访问后,对应的访问次数计数器自动加$,同时调整用户记录在该段中所处的位置(移到该段对应的运动链的链首),以体现567 算法。如果计数器的值超过一个规定的门限值,该用户记录就要被移到下一个具有更高权值的段中,以表明该用户记录在过去时间内的活跃程度已经达到一个更高的级别。当活跃用户记录到达最高权值段的时候,不管访问计数器的值是否超过门限值,用户记录都不能再往上提升。按照前面的做法,在经历一段时间之后,就有可能出现低权值段上的用户记录很少,而绝大多数用户记录却拥挤在高权值段上的情况,这几乎退回到没有进行分段的567 算法的状态。为了防止这种情况的出现,同时能够及时精确地反映用户记录的活跃程度,需要对各段的权值定时进行调整。具体的做法是将两个最低权值段的用户记录合并到一个段中,把腾出来的那个段的权值设为最高,其它段的权值分别降一个等级,这样既活跃了用户记录,又可以向更高权值段迁移。这里把这个调整过程称为段的定时调整过程。
有选择性机制的分段的LRU
该机制基于他们的访问历史,选择要被绕过的指令。绕过死亡块可以提高性能,死亡块是指那些在被访问之前就被替换出去的块。