页置换算法-工作集模型(Working Set Strategy)

工作集模型假设

假设认为,一个应用程序在一段时间x内使用的内存页集合,也会在下一段时间x内使用。因此,在每个时间段x内,工作集应当保存在物理内存中。

早期实现

早期工作集的实现是all-or-nothing,即要么将工作集都加载入物理内存,要么全部换出。现在很少用这种原则,但工作集的概念依然指导者操作系统的换页策略,即优先将非工作集中的页换出

如何追踪工作集

常见做法是“工作集时钟算法”。操作系统利用定时器周期运行一个时间追踪函数,假设时间间隔为T。该函数为每个内存页维护两个状态上次使用时间访问位,均初始化为0。

本文选择与原书《现代操作系统 原理与实现》不同的叙事顺序,根据功能进行叙述。
关于访问位的行为
每次访问某个页时,对应访问位会置为1,每当函数检查完一个页状态后,将访问位置为0(即每隔一个周期,访问位置为0)。这样做的作用是,每当周期函数执行时,如果检查到某个页的访问位为1,说明这个页在时间T内被访问过(然后将该位还原为0)。

关于上次使用时间的行为
每当周期函数执行时,如果检查到某个页的访问位为1,把当前系统时间赋值给该页的上次使用时间。检查发现访问位是0呢那就计算该页的年龄(当前系统时间-该页的上次使用时间),如果超过了预设的时间间隔x,则该页不在属于工作集。

效果解释

为什么要用周期为T运行的函数,并检查未访问页的年龄呢?这有什么用意?

我们考虑理想状况下,该函数是随时运行的,而不是每隔时间T运行的。也就是说,这个函数会时刻检查每个页距离上次访问的时间是否大于x,只要大于,就将其剔除工作集。这样做的话,该函数确实能时刻保持时间x内被访问过的页面集合。但问题是,函数是不能每个瞬间都在执行的,它只能以某个周期T运行
所以,当退化为周期运行的函数时,行为就会调整,把一段时间内访问过的页,其访问时间都归约在T的检查点上。比如下图所示,每个小圆圈是那个页被访问的时刻。只有红圈的上次使用时间距离函数检查点为3T,大于x=2T。因此只有红圈代表的页面被剔除工作集。
检查间隔
个人认为,在实践中x都较大于T,使得周期运行的函数能模拟“时刻在检查”的效果。

总结

周期运行的函数实现了类似于这样的效果:检查函数每隔时间T的周期执行一次,如果有页面上次访问距今超过x,则剔除工作集。所有T之内不同时刻访问的页面,其最近访问时间都归约到T的检查点上。

能够追踪工作集后,当发生页面置换时,可以优先从非工作集的页面置换。

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值