局部页面置换算法Local Page Replacemen Algorithms

在网上搜索所得的大部分都在将FIFO,LRU什么的,所以做一个简单的记录。我们要实现的是以下所描述的三个局部页面置换算法,并且对他们进行对比。以下是要完成的算法的描述:


在局部页面置换算法那个,每个进程的框架的数目是不固定的。我们必须跟踪当前的工作集。对单进程系统,我们用一个数组VM[P]来表示,其中P是这个虚拟内存的页数。记录为VM[P]的每一个要素的一部分信息是依赖于所使用的特定算法。

工作集算法(working set algorithm,WS,每一个要素VM[p]值记录第p页是否现在存在,即是工作集的一个成员。为了跟踪工作集当前滑动窗口,我们创建一个心动的数组,WIN(t+1),在这里 t是一个系统常量。这个数组的长度是固定的;在任何时间点,它包含了过去t+1的时间步长的引用的页面。工作集算法使用两个数组(VM和WIN)如下:

对于任意一个在PS中的引用p,这个算法在队列WIN的头部插入p,同时移除元素q(现在在队尾的元素)。如果q没有穿现在这个数组,那么把对应的VM[q]设定为0,用“non-resident”标记他。下一次VM[p]被检查,如果它不是1,算法将他设为1并且记录一个页面错误。

对于最佳页面替换算法(这个不是一个无法实现的最佳算法和对于全局替换的最佳算法相同),VMIN,我们使用相同的数组VM和WIN。VM同样的记录存在的页面,WIN对前瞻性窗口(forward-looking window做相应),i.e. 他总是包含将会指向下一个的t+1页。每一个引用,WIN中在未来t步内将会被引用的页会替换现在引用的页p(滑动窗口一个一个时间点)。如果p不存在(VM[P]== 0)在那个时间的引用,将VM[p]设为1,记录一个页面错误。此外,所有的目前存且没有出现在WIN的页面被标记为不存在(nonresident)于VM。

对于页面错误高频算法(page fault frequency algorithm),PFF,我们扩展数组VM,其中的每一个条目是一个包括两个域的一个结构。其中一个域,我们称之为VM[p].res,记录是否p页现在存在。另一个域,VM[p].u,对应页结构使用的字节数。这两个域按照PFF算法这样被使用-》VM[p].u被设为1在每一个引用到p页。在页面出错时,p页的VM[p].res被设为1(标记他是常驻集resident set的一员)。接着,如果在现在页面错误和上一次页面错误的时间(算法需要一直跟踪记录)如果大于常数t ,系统找到所有满足VM[q].res==1同时VM[q].u==0的q页;自从上一次页面错误之后,这些页没有被引用,把他们移除resident set(设置VM[q].res为0)。最终所有的VM[*].u的所有的页面设置为0。在所有的页面错误之后这将被完成,无论页面是否被移除。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值