操作系统16————虚拟存储器之抖动,工作集和页面置换算法

操作系统 专栏收录该内容
19 篇文章 4 订阅

操作系统16————虚拟存储器之抖动,工作集和页面置换算法

一.目录

二.多道程序度与抖动

1.抖动

刚被淘汰出内存的页面,过后不久又要访问它,需要再次将其调入,而该页调入内存后不入又再次被淘汰出内存,然后又要访问它,如此反复,使得系统把大部分时间用在了页面的调进换出上,而几乎不能完成任何有效的工作,这种现象称为抖动

2.多道程序度

由于虚拟存储器系统能从逻辑上扩大内存,这时,只需装入一个进程的部分程序和数据便可开始运行,故人们希望在系统中能运行更多的进程,即增加多道程序度,以提高处理机的利用率。但处理机的实际利用率却如图:

这里写图片描述

其中横轴表示进程的数量,纵轴表示多道程序度。之所以会发生后面阶段利用率趋于0的情况,是因为在系统中已发生抖动。

3.产生抖动的原因

发生“抖动”的根本原因是,同时在系统中运行的进程太多,由此分配给每一个进程的物理块太少,不能满足进程正常运行的基本要求,致使每个进程在运行时,频繁地出现缺页,必须请求系统将所缺之页调入内存。这会使得在系统中排队等待页面调进/调出的进程数目增加。显然,对磁盘的有效访问时间也随之急剧增加,造成每个进程的大部分时间都用于页面的换进/换出,而几乎不能再去做任何有效的工作,从而导致发生处理机的利用率急剧下降并趋于0的情况。

4.抖动的预防方法

  • 采取局部置换策略,即缺页时,只能在分配给自己的内存里进行置换,不允许从其他进程获取新的物理块,这样即使该进程发生抖动也不好影响其他进程。但效果不是很好,在某进程发生抖动后,他还会常去处于磁盘的io等待队列中,这会延迟其他进程区人员中断的处理时间。
  • 把工作集算法融入到处理机调度中,当调度程序发现处理机利用率低下时,它将试图从外存调入一个新作业进入内存,来改善处理机的利用率。 在融入工作集算法后,在调度程序从外存调入作业之前,必须检查每个进程在内存驻留页面是否足够多。如果都足够多,此时便可以将新作业调入内存中,反之则不调入。
  • 利用“L=S”准则调节缺页率,Denning于1980年提出了“L=S”的准则来调节多道程序度,其中L是缺页之间的平均时间,S是平均缺页服务时间,即用于置换一个页面所需的时间。如果是L远比S大,说明很少发生缺页,磁盘的能力尚未得到充分的利用;反之,如果是L比S小,则说明频繁发生缺页,缺页的速度已超过磁盘的处理能力。只有当L与S接近时,磁盘和处理机都可达到它们的最大利用率。理论和实践都已证明,利用“L=S”准则,对于调节缺页率是十分有效的。
  • 选择暂停的进程, 当多道程序度偏高时,已影响到处理机的利用率,为了防止发生“抖动”,系统必须减少多道程序的数目。 此时根据某种算法选择一个进程,暂停该进程。

三.工作集

1. 工作集的引入

1968 年 Denning 提出了工作集(Working Set) 理论。
工作集是指在某段时间间隔 ∆ 里,进程实际要访问的页面的集合。
把进程在某段时间间隔 ∆ 里,在时间 t 的工作集记为w(t,∆),变量 ∆ 称为工作集“窗口尺寸” 。
对于给定的页面走向,如果 ∆ = 10 次存储访问,在 t1时刻的工作集是 W(t1,10)=(1,2,5,6,7),在 t2 时刻,工作集是 W(t2,10)=(3,4)

这里写图片描述

2.工作集的特点

  • 工作集的大小是变化的。
  • 相对比较稳定的阶段和快速变化的阶段交替出现。
  • 根据局部性原理,进程会在一段时间内相对稳定在某些页面构成的工作集上。
  • 当局部性区域的位置改变时,工作集大小快速变化。
  • 当工作集窗口滑过这些页面后,工作集又稳定在一个局部性阶段。

工作集精确度与窗口尺寸 ∆ 的选择有关。如果 ∆ 太小,那么它不能表示进程的局部特征;如果 ∆ 为无穷大,那么工作集合是进程执行需要的所有页面的集合。

如果页面正在使用,它就落在工作集中;如果不再使用,它将不出现在相应的工作集中。

工作集是局部性原理的近似表示。

如果能找出一个作业的各个工作集,并求出其页面数最大者,就可估计出该进程所需的物理块数。

利用工作集模型可以进行页面置换。工作集页面置换法的基本思想:找出一个不在工作集中的页面,把它淘汰。

四.页面置换算法

地址映射过程中,若在页面中发现所要访问的页面不在内存中,则产生缺页中断。当发生缺页中断时,如果操作系统内存中没有空闲页面,则操作系统必须在内存选择一个页面将其移出内存,以便为即将调入的页面让出空间。而用来选择淘汰哪一页的规则叫做页面置换算法。

1. 最佳置换算法(OPT)(理想算法)

思想:从主存中移出永远不再需要的页面;如无这样的页面存在,则选择最长时间不需要访问的页面。于所选择的被淘汰页面将是以后永不使用的,或者是在最长时间内不再被访问的页面,这样可以保证获得最低的缺页率。

2.先进先出置换算法(FIFO)

思想::当需要淘汰一个页面时,总是选择驻留主存时间最长的页面进行淘汰,即先进入主存的页面先淘汰。其理由是:最早调入主存的页面不再被使用的可能性最大。

这种算法的实现和队列是一样,OS维护一个当前在内存中的所有页面的链表,最新进入的页面在尾部,最久的在头部,每当发生缺页中断,就替换掉表头的页面并且把新调入的页面加入到链表末尾。

一种合理的改进,称为第二次机会算法。即给每个页面增加一个R位,每次先从链表头开始查找,如果R置位,清除R位并且把该页面节点放到链表结尾;如果R是0,那么就是又老又没用到,替换掉。

3.最近最久未使用置换算法(LRU)

思想::当需要淘汰一个页面时,总是选择最近最久未使用的页面予以淘汰

4.最少使用算法置换算法(LFU)

思想::当需要淘汰一个页面时,总是选择最近最少使用的页面予以淘汰

5.Clock置换算法

LRU算法的性能接近于OPT,但是实现起来比较困难,且开销大;FIFO算法实现简单,但性能差。所以操作系统的设计者尝试了很多算法,试图用比较小的开销接近LRU的性能,这类算法都是CLOCK算法的变体。

简单的CLOCK算法是给每一帧关联一个附加位,称为使用位。当某一页首次装入主存时,该帧的使用位设置为1;当该页随后再被访问到时,它的使用位也被置为1。对于页替换算法,用于替换的候选帧集合看做一个循环缓冲区,并且有一个指针与之相关联。当某一页被替换时,该指针被设置成指向缓冲区中的下一帧。当需要替换一页时,操作系统扫描缓冲区,以查找使用位被置为0的一帧。每当遇到一个使用位为1的帧时,操作系统就将该位重新置为0;如果在这个过程开始时,缓冲区中所有帧的使用位均为0,则选择遇到的第一个帧替换;如果所有帧的使用位均为1,则指针在缓冲区中完整地循环一周,把所有使用位都置为0,并且停留在最初的位置上,替换该帧中的页。由于该算法循环地检查各页面的情况,故称为CLOCK算法,又称为最近未用(Not Recently Used, NRU)算法。

CLOCK算法的性能比较接近LRU,而通过增加使用的位数目,可以使得CLOCK算法更加高效。在使用位的基础上再增加一个修改位,则得到改进型的CLOCK置换算法。这样,每一帧都处于以下四种情况之一:

  • 最近未被访问,也未被修改(u=0, m=0)。
  • 最近被访问,但未被修改(u=1, m=0)。
  • 最近未被访问,但被修改(u=0, m=1)。
  • 最近被访问,被修改(u=1, m=1)。

算法执行如下操作步骤:

  • 从指针的当前位置开始,扫描帧缓冲区。在这次扫描过程中,对使用位不做任何修改。选择遇到的第一个帧(u=0, m=0)用于替换。
  • 如果第1)步失败,则重新扫描,查找(u=0, m=1)的帧。选择遇到的第一个这样的帧用于替换。在这个扫描过程中,对每个跳过的帧,把它的使用位设置成0。
  • 如果第2)步失败,指针将回到它的最初位置,并且集合中所有帧的使用位均为0。重复第1步,并且如果有必要,重复第2步。这样将可以找到供替换的帧。

改进型的CLOCK算法优于简单CLOCK算法之处在于替换时首选没有变化的页。由于修改过的页在被替换之前必须写回,因而这样做会节省时间。

五.参考资料

《操作系统第四版》

  • 5
    点赞
  • 0
    评论
  • 14
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

相关推荐
©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值