工作集替换算法

2021/6/1 20:51:02

本文主要是介绍工作集替换算法,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

工作集替换算法

  • 局部最佳页面替换算法
  • 工作集模型和工作集置换算法
  • 模拟工作集替換算法
  • 缺页频率替换算法

局部最佳页面替换算法

1976年由 Pieve提出一种局部最佳页面替换算法,它与全局最佳替换算法类似,需事先知道程序的页面引用串,再根据进程行为改变页面数量。现在介绍此算法的思想,进程在时刻t访问某页面,如果该页面不在内存中,导致一次缺页,把该页面装入一个空闲页框。 不论发生缺页与否,算法在每一步要考虑引用串,如果该页面在时间间隔(t,t+T)内未被再次引用,那么就移出页面;香则,该页被保留在进程的驻留集中,直到再次被引用。T为个系统常量,间隔(t,t+T)称作滑动窗口,因为,在任意给定时刻,驻留集包含这个窗口中可见的那些页面(当前引用的页面,未来的r次内存访问引用的页面),因此,窗口实际大小为T+1
通过例子说明此算法,假如进程页面引用为:p3、p3、p4、p2、p3、p5、p3、p5、p1、p4.滑动窗口T=3,初始时页面p4己被装入。若采用局部替换,通过图1来了解驻留集的变化情况。时刻t0时,p4被引用,因为它在时刻t4时再次被引用,即在时间间隔(0,0+3)之内,故p4留在驻留集。时刻t1时,p3被引用,它被装入空闲页框中,这时驻留集中包含p3与p4。在时刻t2和13,显然,页面p3与p4被保留。页面p4在时刻t4被移出驻留集,因为,在时间间隔(4,4+3)之内,不再被引用。同时,p2被装入空闲页框,但p2在时刻t5就脱离滑动窗口并移出驻留集,而p3依然驻留,直到时刻t7再次被引用。发生在时刻t6的下次缺页把p5装入页框,它被保持驻留,直到时刻t8再次被引用。最后两次引用装入p1与p1页面。本例中,缺页总数为5,驻留集大小在1-2之间变化,任何时刻至多两个页框被占用,通过增加T值,缺页数目可减少,但代价是花费更多页框。
在这里插入图片描述

工作集模型和工作集置换算法

P.J.Denning 提出了工作集模型,用来对局部最佳页面替换算法进行模拟实现,也使用了滑动窗口概念,但并不向前查看页面引用串,而是基于程序的局部性原理向后看,该原理意味着,在任何给定时刻,一个进程不久的将来所需内存数量,可通过考查其过去最近的时间内的内存需求做出估计。进程工作集指:“在某一段时间间隔内,一个进程运行所需访问的页面集合"用 W(t,A) 表示在时刻 t-A 到时刻 t 之间所访问的页面集合, 则它就是进程在时刻t 的工作集,A 是系统定义的一个常量。

变量A称为“工作集窗口尺寸",可以通过窗口来观察进程的行为,还把工作集中所包含的页面数目“工作集尺寸"。 图 2 例子中,页面引用串与上例相同,工作集窗口尺寸A =4。如果系统有足够空闲页框供分配,并且在时刻 t0 时,初始工作集为(pl, p4, p5) ,其中pl 在时刻 tO 被引用,p4 在时刻 t-1 被引用,而 p5 在时刻 t-2 被引用。

图中说明了每次引用时的工作集,第 1 次缺页发生在时刻 t1,页面 p3 被装入一个空闲页框。另外 3 个当前驻留页面 p1、p4 和 p5 在窗口(1-3, 1) 中仍然可见,并被保留。在时刻t2,页面 p5 离开了当前窗口 (2-3, 2) ,它被移出工作集。在时刻 t4,缺页会把 p2 装入,它占用了移出的页而 pl 的位置,因为,pl 离开了当前窗口 (4-3, 4) 。时刻 t6,发生缺页并装入了p5,并且当前驻留页面 p2、p3 和 pd 作为由当前窗口 (6-3, 6) 定义的当前工作集的一部分被保留。在下面频次引用中,工作集会缩小到仅两个页而 p3 和 p5,并因为在时刻 t9 和t10 发生栈次缺页,使工作集青次增长到 4 个页而。此算法总的缺页数为 5 次,工作集尺寸在 2-4 个页框问波动。
在这里插入图片描述
工作集是程序局部性的近似表示,可以通过它来确定驻留集的大小:①监视每个进程的作集,只有属于工作集的页面才能留在内存。②定期地从进程驻留集中删去那些不在工作集中的页面。③仅当一个进程的工作集在内存时,进程才能执行。

Windows2000/XP的页面替換机制结合了工作集模型和 clock算法的优点,采用局部替换算法,一个进程缺页时,不会逐出其他进程的页面。系统为每个进程维护一个当前工作集,系统指定了一个工作集最小尺寸(20-50个页框)和最大尺寸(45-345个页框)。缺页时,把引用到的页面添加到进程工作集中,直至达到最大值,此时,若还发生缺页,必须要从工作集中移出一个页面。淘汰页而选择使用模拟LRU和 clock策略的变种,每个页框有一个访问位u及一个计数器 count。该页被引用时,u位被使件置1,当在工作集中寻找淘汰页面时,工作集管理程序扫描工作集中页面的访问位,并执行操作:如果u=1,那么,把u和 count清0:否则, count加1。扫描结束时,移出 count值最大的页面。凡从工作集中逐出的页框被放入两个内存队列之一:一个是保存暂时移出的并已被修改过的页面:另一个保存暂时移出的并为只读的页面。如果其中页面被再次引用,可迅速从队列中找到,而不会产生缺页仅当实际的空闲页框队列为空时,它们才被用来满足缺页需求。

模拟工作集替換算法

工作集策略在概念上很有吸引力,但实现中监督驻留页面变化的开销很大,估算合适的窗口△的大小也是个难题,为此,已经设计出各种工作集近似算法,下面介绍两种。

进程在运行前要把它的工作集预先装入主存,为每个页设置引用位及年龄寄存器,寄存器初始化为0,每隔时间T,系统扫描内存中所有页面,先将寄存器右移一位,再把引用位R位的值加到对应寄存器的最左边位,这样,没有引用的页面,其年龄寄存器的值逐步减小。

当达到下限或0值时,由于页面已经落在窗口之外,就可把它从工作集中移去。例如,年龄寄存器共有四位,时间间隔T定为1000次存储器引用(即1000个指令周期),页面P在时刻t时寄存器为“1000”,在时刻t 1000时存器为“0100”,在时刻t 2000时寄存器为“0010”,在时刻t 3000时寄存为“0001”,在时刻t 4000时奇存器为“0000此时,页面p被移出工:作集。这就有效地模拟了窗口大小为1000×4的一个工作集

它义破称为“老化( Aging)算法”,年龄寄存器各位的累加值,反映了页面最近使用的情况,访问次数越多,累加值越大。而较早访问的页面,随着寄存器的右移,由于老化使得其作用越来越小。

另一种方法是为每个页面设置引用位及关联的时间戳,通过超时中断,至少每隔若干条指令就周期性地检查引用位及时间戳。当发现使用位为1时,就把它置0并把这次改变的时间作为时间戳记录下米。每当发现使用位为0时,通过系统当前时间减去时间戳时间,计算出从它常次使用以来未被再次访问的时间量,记作t_off.t_off值会随着每次超时中断的处理而不断增加,除非页面在此期间被再次引用,导致其使用位为1。把t_off与系统时间参数tmax相比,若t_off>t_max,就把页面从1.作集中移出,释放相应页框

缺页频率替换算法

工作集算法中保证最少缺页次数是通过调整工作集大小米回接实现的,个直接的改普系统性能的方法是用缺页频率替換算法(Page Fault Frequency).它根据连续的缺卖之间的时间间隔来对缺页频率进行测量,每次缺页时,利用测量时间调整进程工作集尺寸。其规则是:如果本次缺页与前次缺页之间的时间超过了临界值T,那么,所有在这个时间间隔内没有引用的页面都被移出工作集。这就保证了进程工作集不会不必要地扩大,与工作集模型相比,实现效率高,只在发生缺页时才调整页面,而不是每次引用时需要调整。

图3的例子再次使用上选引用串,并设临界值T=2,在时刻t0时,驻留的集合包含页面p1、p4和p5。在时刻t1发生第1次缺页,假设前一次缺页刚刚发生,故本次无页面被移出。下次缺页发生在时刻t4,因为本次缺页时刻(4)-上次缺页时刻(1)>T成立,所以在时间间隔(1,4)内未被引用的页面p1和5应当移出。继而缺页发生在时刻t6,但由于本次缺页时刻(6)-上次缺页时刻(4)并不并不>T,所以,这次无页面被移出。但在时刻t9发生下次缺页时,因移出条件又为真了,故页面p2和p4被移出。在时刻t10发生最后一次缺页时,当然无页面需要移出。PFF替换算法对此引用串共产生5次缺页,工作集页面数在3-4之间波动。
在这里插入图片描述



这篇关于工作集替换算法的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程