页面置换算法

  页面置换算法根据置换页面的选择范围分为局部页面置换算法和全局页面置换算法。

  局部页面置换算法只置换本进程内的物理页面,进程中一个页面进内存,就代表一个页面已经被替换出内存,所以一个进程所占用的物理页面的总数是确定的。全局页面置换算法置换内存中所有可换出的物理页面,即换进内存的是进程A的页面,换出内存的可能是进程B的页面,所以进程在内存中占用的页面总数是可变的。

  

一、局部页面置换算法:

   1.最优页面置换算法:

     预测未来最晚被使用的页面,然后把它置换到外存中去。缺页最少,但无法实现,只是一种理想状态,所以作为其他置换算法的评测标准。

   

     2.先进先出算法

   有一个逻辑页面的链表,链表头在内存中呆的时间最长,链表尾最短,所以每次置换都是把链表头的页面置换到外存中去,把新加进来的页面放到链表尾。这个算法虽然简单,但是造成的缺页率比较高,性能比较差。

  

  3.最近最久未使用算法/最近最少使用算法

   替换内存中上次被引用时间最早的一个页面。可以用链表或栈来记录按被引用时间长短排序的页面,但不管是栈还是链表,每次替换都会牵扯到整个链表或栈的移动,算法性能比较好,但开销比较大。

      

   

  4.时钟算法

   用环形链表存储各页面。初始化时各页面的访问位为0。如果不缺页,则把相应页面的访问位设置为1。如果缺页,则从最先进入链表的页面开始遍历,遇到访问位为1的页面,则访问位设置为0;遇到访问位为0的页面,则把它替换到外存中去,然后把需要的页面替换进内存,且访问位为1。然后把当前指针移到下一个页面上,再进行下一次页面请求处理。

   比FIFO多了个访问位来记录页面的访问情况,但比LRU少了访问的先后顺序,所以说是FIFO和LRU的折中。

   

  

  5.改进的时钟算法

   在页面中增加了修改位,1为修改过,0为未修改过。因为当发生缺页中断时,把未修改过的页面替换进外存就相当于把页面直接从内存中删除,因为内存和外存中所对应的该页面的内容相同,处理时间只有一次缺页中断访问外存的时间。而修改过的页面则还需要向外存中写入一次,再加上缺页中断的时间,相当于访问了两次外存,是上述未修改的两倍。所以避免把修改过的页面替换下去可以提高性能。

  有了修改位之后,指针经过修改位为1的页面时,如果使用位为1,则只把使用位设置为0,修改位不变;如果使用位为0,则把修改位设置为0,然后向外存写入该页面以做更新。替换时,只会替换修改位和使用位均为0的页面。

    

  

   6.最不常用算法:

   页面中有几位作为访问计数,每次访问就把访问的次数加上去,替换时把访问计数最小的替换出内存。

   

   

   

   

  7.BeLady现象

   按理说,一个进程被分配的物理页面越多,那缺页的次数应该越少。但也有缺页次数反而增加的现象,那就是Belady现象。

    

   8.比较

   看图吧。。(对于未被访问的页面,Clock,LRU和FIFO性能一样)

    

     

二、全局置换算法:

  

  

  1.工作集算法:

   工作集表示为二元函数W(t,△),t为当前时刻,△为页面访问时间窗口,工作集就是在t-△到t的这段时间内所有访问页面的集合。

   常驻集是在当前时刻,进程实际驻留在内存当中的页面集合。

   工作集置换算法就是说每次访问内存时,就把不存在于工作集中的页面从内存中换出,不管这次访问缺页与否。

     

   

   

   

  

  2.缺页率置换算法

   访问内存不缺页时,就把相应的页面的引用为设置为1。缺页时,就把当前时间和上次缺页的时间相减计算时间间隔,如果时间间隔大于给定窗口的话,就说明缺页率过低了,进程在内存中的物理页面数太多了,进程并发度下降,CPU效率会降低,需要置换出去一些页面。如果时间间隔小于给定窗口的话,就说明缺页率过高,把缺页的添加进内存。

   与上述工作集算法不同的是,缺页率置换算法只在缺页时才进行页面的增加或减少。这样在缺页中断的时候可以把置换的过程部分提交给硬件进行处理,提高了性能。

  

  

  

 3.抖动和负载控制

  

  

   

  

 

posted @ 2016-05-24 19:32  kk_kk  阅读(5970)  评论(0编辑  收藏  举报