常用的页面置换算法小结。

这篇文章是对现代操作系统(第三版)第三章存储管理中页面置换算法的一个读书笔记,希望对各位有用。

一. 最优页面置换算法

     该算法是最好的页面置换算法,但在现实中不可能实现,根据其算法描述即可知道原因。

      最优页面置换算法的基本思想:

       当发生缺页中断时,对于在内存中的页面,有的页面会立即被访问,有个页面第一次访问可能在1000条指令后被访问,有个页面可能在100万条指令后被访问。可以用某个页面第一次被访问时所需的指令数作为页面标记值。当需要置换出一个页面时,选择标记值最大的页面置换出。

      显然该算法是最好的页面置换算法,但是这在现实中不可能实现,因为操作系统不可能知道下次页面访问在什么时候。

二. 最近未使用(Not Recently Used,NRU)页面置换算法

       该算法基本思想如下:

       a. 我们为每个页面设置了两个状态位:页面被访问为R位和页面被修改为M位。

       b. 当页面被访问时,硬件将R设置为1;页面被写入(修改)时,M为被设置为1。R与M的复位由操作系统来完成。

       c. 当进程被调度时,它的所有页面的R与M位被操作系统初始化为0,同时R位将定期被时钟中断清零。

       d. 根据R位与M位的取值,我们将页面分为了4类:

           -------第0类:没有被访问,没有被修改(R=0,M=0)
           -------第1类:没有被访问,已被修改(R=0,M=1)
           -------第1类:已被访问,没有被修改(R=1,M=0)
           -------第3类:已被访问,已被修改(R=1,M=1)

        e. 最近未使用页面置换算法则是在页面编号最小的页面中随机选择一个页面被换出。

三. 先进先出(FIFO)页面置换算法

        该算法的基本思想如下:

        操作系统维护一个所有在当前内存中页面的链表。其中最迟进入内存的页面在链表尾,最早进入内存的页面在链表头。当发生缺页中断时,将表头的页面淘汰,然后将新的页面加载链表尾。

四. Second chance 页面置换算法

        该算法是对FIFO算法的一种优化,因为FIFO淘汰出的页面虽然是最老的页面,但可能是使用频率很高的页面。

         该算法的基本思想如下:

         我们在选择页面淘汰时,需要检查该页面的R位。如果最老的页面R位为0,则选择其淘汰;如果R位为1,则将该页面添加到表尾,同时修改其装入时间为当前时间;而后继续检索下一个页面,知道发现R为0的页面。

五. 时钟算法

         时钟算法是对FIFO算法的一种优化。

         该算法将链表转化一个环的形式,并使指针指向最老的页面。当缺页中断发生时,算法首先检索指针指向的页面。如果该页面的R位为0,则淘汰这个页面,同时在该位置将新的页面装入。如果该页面的R位为1,则将该R复位为0,当时指针下移到下一个页面。而后重复直道找到一个页面被替换出。

六. 最近最少使用(Least Recently Used,LRU)页面置换算法

         该算法的基本思想是替换出未使用时间最长的页面。

         有两种特殊的硬件用以实现这两种算法:

         硬件一: 硬件维护一个64位的计数器C,每当指令完成后自动加1,每个页表项需要域来保存该计数器的值。每当访问内存结束后,C的值被更新到页表项中。一旦发生缺页中断,则选择值最小的页面被替换出。

        硬件二:在一个由n个叶框的机器中,该硬件维护一个n×n大小的矩阵,该矩阵初始全零。每当访问叶框K,则将矩阵K行的值置为1,K列的值置为0. 如果发生缺页中断,则首先计算所有行的二进制数值的大小,选择值最小的页淘汰。

七. 最不常用NFU(Not Frequently Used)算法

          该算法将每个页面与一个软件计数器关联,计算器初值为0。每当时钟中断触发,操作系统扫描所有的页面,如果R位为1,则将该页面计算器加1。一旦发生缺页中断,就选择计算器值最小的页面替换。

八. 老化算法

          老化算法对最不重用NFU算法做了一些修改:
 
           每当检测到R时,先将当前计算器右移一位,而后将R的值加到计数器的最左端。

九. 工作集算法

          工作集值当前进程所使用的页面的集合。而后被定义为过去实际运行时间t内进程访问的页面集合。实际运行时间是指进程从开始运行到当前所使用的CPU时间总数。

           工作集页面置换算法的基本思想如下:

           基本思路是找出一个不在工作集中的页面替换出去。

           该算法中,每个页面都有一个R位以及上次使用该页面的一个近似时间。当发生缺页中断时,扫描页表,对于每个表项,需要检查它的R位,如果R位为1,则将当前时间写进上面提到的“上次使用该页表时间”然后扫描下一个表项。如果R为0,则表示当前页表未被访问,其可作为候选可被替换页表。计算该页表生存时间T(用当前时间减去上次使用时间),如果T>t,则该页表被替换,否则继续扫描。

            上述算法会得到如下结果:

             -----找到一个生存时间T>t的页面被替换

             -----所有候选可替换页表的生存时间T≤t,则淘汰T最大的页表。
             -----如果所有的页表R都为1,则随机选择一个页面淘汰。

十. 工作集时钟页面置换算法

             该算法基于时钟算法,将工作集以环的形式存放。

             该算法的基本思路如下:

             当发生缺页中断时,首先检索指针指向的页面。如果其R位为1,则将R复位,然后指针指向下一个页面。
 
              如果R为0,则计算生存时间T。如果T>t,且页面是干净的,则该页面不在工作集中,将其替换。如果页面被修改过(M位为1),则不能理解申请替换,因为该页面在磁盘上没有副本。应该继续检索,因为有可能会发现一个旧的且干净的页面可以被替换。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值