Cache的替换策略

根据程序局部性规律可知:程序在运行中,总是频繁地使用那些最近被使用过的指令和数据。这就提供了替换策略的理论依据。综合命中率、实现的难易及速度的快慢各种因素,替换策略可有随机法、先进先出法、最近最少使用法等。

  1.随机法(RAND法)

  随机法是随机地确定替换的存储块。设置一个随机数产生器,依据所产生的随机数,确定替换块。这种方法简单、易于实现,但命中率比较低。

  2.先进先出法(FIFO法) 

  先进先出法是选择那个最先调入的那个块进行替换。当最先调入并被多次命中的块,很可能被优先替换,因而不符合局部性规律。这种方法的命中率比随机法好些,但还不满足要求。先进先出方法易于实现,例如Solar-16/65机Cache采用组相联方式,每组4块,每块都设定一个两位的计数器,当某块被装入或被替换时该块的计数器清为0,而同组的其它各块的计数器均加1,当需要替换时就选择计数值最大的块被替换掉。

  3.最近最少使用法(LRU法)

  LRU法是依据各块使用的情况, 总是选择那个最近最少使用的块被替换。这种方法比较好地反映了程序局部性规律。
  实现LRU策略的方法有多种。 下面简单介绍计数器法、寄存器栈法及硬件逻辑比较对法的设计思路。
  计数器方法:缓存的每一块都设置一个计数器,计数器的操作规则是:
  (1) 被调入或者被替换的块, 其计数器清“0”,而其它的计数器则加“1”。
  (2) 当访问命中时,所有块的计数值与命中块的计数值要进行比较,如果计数值小于命中块的计数值,则该块的计数值加“1”;如果块的计数值大于命中块的计数值,则数值不变。最后将命中块的计数器清为0。
  (3) 需要替换时,则选择计数值最大的块被替换。
  例如IBM 370/65机的Cache用组相联方式,每组4块,每一块设置一个2位的计数器,其工作状态如表2.3.1。

表2.3.1 计数器法实现LRU策略

 

主存块地址

块4

块2

块3

块5

 

块号

计数器

块号

计数器

块号

计数器

块号

计数器

Cache块0

1

10

1

11

1

11

5

00

Cache块1

3

01

3

10

3

00

3

01

Cache块2

4

00

4

01

4

10

4

11

Cache块3

XX

2

00

2

01

2

10

操作

起始状态

调入

命中

替换

 

 

  寄存器栈法:设置一个寄存器栈,其容量为Cache中替换时参与选择的块数。如在组相联方式中,则是同组内的块数。堆栈由栈顶到栈底依次记录主存数据存入缓存的块号,现以一组内4块为例说明其工作情况,如表2.3.2所示,表中1~4为缓存中的一组的4个块号。

表2.3.2 寄存器栈法实现

 

缓存操作

初始状态

调入2

命中块4

替换块1

寄存器0

3

2

4

1

寄存器1

4

3

2

4

寄存器2

1

4

3

2

寄存器3

1

1

3

 

  (1) 当缓存中尚有空闲时,如果不命中,则可直接调入数据块,并将新访问的缓冲块号压入堆栈,位于栈顶。其他栈内各单元依次由顶向下顺压一个单元,直到空闲单元为止。
  (2) 当缓存已满,如果数据访问命中,则将访问的缓存块号压入堆栈,其他各单元内容由顶向底逐次下压直到被命中块号的原来位置为止。如果访问不命中,说明需要替换,此时栈底单元中的块号即是最久没有被使用的。所以将新访问块号压入堆栈,栈内各单元内容依次下压直到栈底,自然,栈底所指出的块被替换。
  比较对法:比较对法是用一组硬件的逻辑电路来记录各块使用的时间与次数。
  假设Cache的每组中有4块,替换时,是比较4块中那一块是最久没使用的,4块之间两两相比可以有6种比较关系。如果每两块之间的对比关系用一个RS触发器,则需要6个触发器(T12,T13,T14,T23,T24,T34),设T12=0表示块1比块2最久没使用,T12=1表示块2比块1最久没有被使用。在每次访问命中或者新调入块时,与该块有关的触发器的状态都要进行修改。按此原理,由6个触发器组成的一组编码状态可以指出应被替换的块。例如,块1被替换的条件是:T12=0,T13=0,T14=0;块2被替换的条件是:T12=1,T23=0,T24=0等等。

  • 5
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
PLRU是一种缓存替换策略,它代表了Pseudo-LRU(伪LRU)。PLRU替换法是一种针对缓存的最近最少使用(LRU)法的优化。PLRU法通过使用位向量来跟踪每个缓存行的使用情况,以决定哪些行应该被替换。 PLRU法的实现使用了一种类似于二叉树的数据结构,其中每个节点表示缓存中的一个行。每个节点都有两个位,称为左位和右位,用于表示在该节点之后是否访问了左子节点或右子节点。 当需要替换缓存行时,PLRU法会从根节点开始遍历这个二叉树。如果遇到一个节点的左位为0,则选择替换该节点的行,并将该节点的左位设置为1。如果遇到一个节点的右位为0,则选择替换该节点的行,并将该节点的右位设置为1。如果遇到一个节点的左位和右位都为1,则继续向下遍历。 PLRU法的优点是它能够保持相对较高的命中率。由于它使用了一个类似二叉树的结构,它可以快速找到最近最少使用的缓存行进行替换。与传统的LRU法相比,PLRU法的实现更加高效。 因此,PLRU是一种缓存替换策略,它通过使用位向量和类似二叉树的结构来选择要替换的缓存行,以提高缓存的性能。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Cache 替换策略](https://blog.csdn.net/luoganttcc/article/details/128319347)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [缓存替换策略cache replacement policies)](https://blog.csdn.net/uncle_ll/article/details/103164974)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [基于BWDSP指令Cache的PLRU替换法研究](https://download.csdn.net/download/weixin_38622983/12952266)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值