页面置换算法

     当进程在运行过程中,当发生缺页且主存中又无空闲块时,为了保证进程能正常运行,就必须从主存中调出一页程序或数据送磁盘的对换区。但是选哪个页面调出就要根据页面置换算法来确定。置换算法的好坏将直接影响系统的性能,不适当的算法可能会导致系统发生抖动。抖动是指刚被置换出去的页因很快又被访问而需重新调入,导致系统频繁地跟换页面,使进程在运行中把大部分时间花费在完成页面置换的工作上的现象。

常用的置换算法主要有四种:
a、最佳(Optimal)置换算法
b、先进先出(FIFO)置换算法
c、最近最久未使用(Least Recently Used,LRU)置换算法
d、CLOCK置换算法 (又称为最近未用(Not Used Recently,NUR)置换算法) 

一、Opt置换算法

     最佳置换算法是一种理想化的算法,它性能最好但是实际上难以实现。该算法选择那些永不使用的或者是
最长时间内不再访问的页面置换出去。由于很难确定哪一个页面是未来最长时间内不再被访问的,所以该算法通常用来评价其他算法。

二、FIFO置换算法

    FIFO置换算法总是淘汰最先进入主存的页,既选择在主存中驻留时间最久的页面调换出去。该算法实现简单,只需把一个进程已调入主存的页面按先后顺序链接成一个队列并设置一个指针即可。该算法会产生BELADY异常现象。

三、LRU置换算法

    LRU置换算法选择最近最久未使用的页面予以淘汰,系统在每个页面设置一个访问字段用以记录这个页面自上次被访问以来所经历的时间T,当要淘汰一个页面时选择T最大的页面。该算法在实现时需要硬件的支持(寄存器或栈)。

四、CLOCK置换算法

      1. 简单CLOCK置换算法
    为每页设置一个访问位,再将内存中的所有页面都通过链接指针链接成一个循环队列。 当某页被访问时,其访问位置为1。置换算法流程则是:当选择一页淘汰页时,只检查访问位;如果是0就置换;如果是1就重新置它为0,然后顺序检查下一个页面; 当检查到最后一个页面时,若其访问位仍为1,则循环返回对首又去检查第一个页面。
   2.改良后的CLOCK置换算法
    考虑到如果某一调入内存的页没有被修改过,则不必将它拷回到磁盘。于是在改进的Clock增加了一个M位, M=0 表示该页未被修改过。这样我们选择页面换出时,既要最近未访问过的页面,又要未被修改过的页面。其执行过程分一下三步:
    第一步:从开始位置循环扫描队列,寻找A=0、M=O的第一类面,找到立即置换。另外,第一次扫描期间不改变访问位A。
    第二步:如果第一步失败,则开始第二轮扫描,寻找A=0且M=1的第二类页面,找到后立即置换,并将所有扫描过的A都置0。
    第三步:如果第二步也失败,则返回指针开始位置,然后重复第一步,必要时再重复第二步,此时必能找到淘汰页。

下图是引自《操作系统:精髓与设计原理》第八章的例子:


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值