zoukankan      html  css  js  c++  java
  • 页面置换算法

    操作系统的虚拟存储器管理技术中,有一项比较重要的分支叫分页存储管理。分页管理是在页架中装入一些需要使用或过去使用过的页面,但是页架的数量是有限的,这里就会用到一些页面置换算法,使得页面访问的效率提高。判断一个置换算法优劣的指标就是缺页率,缺页是指当前的页架中没有需要访问的页面,而需要将该页面加入其中一个页架。缺页率=访问缺页次数/访问总次数。

    1.最佳置换算法OPT

    不可现实的算法
    总结:若出现缺页,从该页向后查找,先找到的M-1个页面保留在内存,另外那个替换掉。
     
    2.先进先出FIFO页面置换算法
    缺点:存在Belady现象,抖动现象。
     
    3.最近最久未使用(LRU)置换算法
    最有效的页面置换算法
    总结:若出现缺页,从该页向前查找,先找到的M-1个页面保留在内存,另外那个替换掉。
     
    4.Clock置换算法
    又称最近未使用算法又没有被修改。

    多了控制位
    2.先进先出算法(FIFO)是一个实现起来比较简单的页面置换算法,其基本原则是“选择最早进入主存的页面淘汰”,理由是最早进入的页面,其不再使用的可能性比最近调入的页面要大。
    理论上来说,如果分配的页架数增加的话,缺页率是会减少,但是FIFO算法对于一些特殊的页面访问序列会有随着分给的页架数增加,缺页率也增加的异常现象。
     

    4.Clock置换算法

    内存及控制信息 输入串 指针移动情况及帧替换信息 是否缺页?
    内存 访问位 指针 3 内存中没有3,需要找到一个帧放入3,
    指针所指的位置恰好有访问位为0的,
    于是就淘汰这个帧,指针下移
      0
      0  
      0  
    内存 访问位 指针 4 内存中没有4,需要找到一个帧放入4,
    指针所指的位置恰好有访问位为0的,
    于是就淘汰这个帧,指针下移
    3 1  
      0
      0  
    内存 访问位 指针 2 内存中没有2,需要找到一个帧放入2,
    指针所指的位置恰好有访问位为0的,
    于是就淘汰这个帧,指针下移
    3 1  
    4 1  
      0
    内存 访问位 指针 6 内存中没有6,需要找到一个帧放入6,
    指针所指的位置的访问位为1,
    将其变成0,再下移
    3 1
    4 1  
    2 1  
    内存 访问位 指针 指针所指的位置的访问位仍为1,
    将其变成0,再下移
    3 0  
    4 1
    2 1  
    内存 访问位 指针 指针所指的位置的访问位仍为1,
    将其变成0,再下移(回到开头)
    3 0  
    4 0  
    2 1
    内存 访问位 指针 指针所指的位置恰好有访问位为0的,
    于是就淘汰这个帧,指针下移
    3 0
    4 0  
    2 0  
    内存 访问位 指针 4 内存中有4,于是4所在帧的访问位变为1,
    指针下移
    ×
    6 1  
    4 0
    2 0  
    内存 访问位 指针 3 内存中没有3,需要找到一个帧放入3,
    指针所指的位置恰好有访问位为0的,
    于是就淘汰这个帧,指针下移
    6 1  
    4 1  
    2 0
    内存 访问位 指针 7 内存中没有7,需要找到一个帧放入7,
    指针所指的位置的访问位为1,
    将其变成0,再下移
    内存及控制信息 输入串 指针移动情况及帧替换信息 是否缺页?
    内存 访问位 指针 3 内存中没有3,需要找到一个帧放入3,
    指针所指的位置恰好有访问位为0的,
    于是就淘汰这个帧,指针下移
      0
      0  
      0  
    内存 访问位 指针 4 内存中没有4,需要找到一个帧放入4,
    指针所指的位置恰好有访问位为0的,
    于是就淘汰这个帧,指针下移
    3 1  
      0
      0  
    内存 访问位 指针 2 内存中没有2,需要找到一个帧放入2,
    指针所指的位置恰好有访问位为0的,
    于是就淘汰这个帧,指针下移
    3 1  
    4 1  
      0
    内存 访问位 指针 6 内存中没有6,需要找到一个帧放入6,
    指针所指的位置的访问位为1,
    将其变成0,再下移
    3 1
    4 1  
    2 1  
    内存 访问位 指针 指针所指的位置的访问位仍为1,
    将其变成0,再下移
    3 0  
    4 1
    2 1  
    内存 访问位 指针 指针所指的位置的访问位仍为1,
    将其变成0,再下移(回到开头)
    3 0  
    4 0  
    2 1
    内存 访问位 指针 指针所指的位置恰好有访问位为0的,
    于是就淘汰这个帧,指针下移
    3 0
    4 0  
    2 0  
    内存 访问位 指针 4 内存中有4,于是4所在帧的访问位变为1,
    指针下移
    ×
    6 1  
    4 0
    2 0  
    内存 访问位 指针 3 内存中没有3,需要找到一个帧放入3,
    指针所指的位置恰好有访问位为0的,
    于是就淘汰这个帧,指针下移
    6 1  
    4 1  
    2 0
    内存 访问位 指针 7 内存中没有7,需要找到一个帧放入7,
    指针所指的位置的访问位为1,
    将其变成0,再下移
    6 1
    4 1  
    3 1  
    内存 访问位 指针 指针所指的位置的访问位仍为1,
    将其变成0,再下移
    6 0  
    4 1
    3 1  
    内存 访问位 指针 指针所指的位置的访问位仍为1,
    将其变成0,再下移(回到开头)
    6 0  
    4 0  
    3 1
    内存 访问位 指针 指针所指的位置恰好有访问位为0的,
    于是就淘汰这个帧,指针下移
    6 0
    4 0  
    3 0  
    内存 访问位 指针 4 内存中有4,于是4所在帧的访问位变为1,
    指针下移
    ×
    7 1  
    4 0
    3 0  
    内存 访问位 指针 3 内存中有3,于是3所在帧的访问位变为1,
    指针下移(回到开头)
    ×
    7 1  
    4 1  
    3 0
    内存 访问位 指针 6 内存中没有6,需要找到一个帧放入6,
    指针所指的位置的访问位为1,
    将其变成0,再下移
    7 1
    4 1  
    3 1  
    内存 访问位 指针 指针所指的位置的访问位仍为1,
    将其变成0,再下移
    7 0  
    4 1
    3 1  
    内存 访问位 指针 指针所指的位置的访问位仍为1,
    将其变成0,再下移(回到开头)
    7 0  
    4 0  
    3 1
    内存 访问位 指针 指针所指的位置恰好有访问位为0的,
    于是就淘汰这个帧,指针下移
    7 0
    4 0  
    3 0  
    内存 访问位 指针 3 内存中有3,于是3所在帧的访问位变为1,
    指针下移
    ×
    6 1  
    4 0
    3 0  
    内存 访问位 指针 4 内存中有4,于是4所在帧的访问位变为1,
    指针下移
    ×
    6 1
    4 0  
    3 1  
    内存 访问位 指针 8 内存中没有8,需要找到一个帧放入8,
    指针所指的位置的访问位为1,
    将其变成0,再下移(回到开头)
    6 1  
    4 1  
    3 1
    内存 访问位 指针 指针所指的位置的访问位仍为1,
    将其变成0,再下移
    6 1
    4 1  
    3 0  
    内存 访问位 指针 指针所指的位置的访问位仍为1,
    将其变成0,再下移
    6 0  
    4 1
    3 0  
    内存 访问位 指针 指针所指的位置恰好有访问位为0的,
    于是就淘汰这个帧,指针下移(回到开头)
    6 0  
    4 0  
    3 0
    内存 访问位 指针 4 内存中有4,于是4所在帧的访问位变为1,
    指针下移
    ×
    6 0
    4 0  
    8 1  
    内存 访问位 指针 6 内存中有6,于是6所在帧的访问位变为1,
    指针下移
    ×
    6 0  
    4 1  
    8 1
    内存 访问位 指针 结束 完成 缺页8次
    6 1  
    4 1
    8 1
    6 1
    4 1  
    3 1  
    内存 访问位 指针 指针所指的位置的访问位仍为1,
    将其变成0,再下移
    6 0  
    4 1
    3 1  
    内存 访问位 指针 指针所指的位置的访问位仍为1,
    将其变成0,再下移(回到开头)
    6 0  
    4 0  
    3 1
    内存 访问位 指针 指针所指的位置恰好有访问位为0的,
    于是就淘汰这个帧,指针下移
    6 0
    4 0  
    3 0  
    内存 访问位 指针 4 内存中有4,于是4所在帧的访问位变为1,
    指针下移
    ×
    7 1  
    4 0
    3 0  
    内存 访问位 指针 3 内存中有3,于是3所在帧的访问位变为1,
    指针下移(回到开头)
    ×
    7 1  
    4 1  
    3 0
    内存 访问位 指针 6 内存中没有6,需要找到一个帧放入6,
    指针所指的位置的访问位为1,
    将其变成0,再下移
    7 1
    4 1  
    3 1  
    内存 访问位 指针 指针所指的位置的访问位仍为1,
    将其变成0,再下移
    7 0  
    4 1
    3 1  
    内存 访问位 指针 指针所指的位置的访问位仍为1,
    将其变成0,再下移(回到开头)
    7 0  
    4 0  
    3 1
    内存 访问位 指针 指针所指的位置恰好有访问位为0的,
    于是就淘汰这个帧,指针下移
    7 0
    4 0  
    3 0  
    内存 访问位 指针 3 内存中有3,于是3所在帧的访问位变为1,
    指针下移
    ×
    6 1  
    4 0
    3 0  
    内存 访问位 指针 4 内存中有4,于是4所在帧的访问位变为1,
    指针下移
    ×
    6 1
    4 0  
    3 1  
    内存 访问位 指针 8 内存中没有8,需要找到一个帧放入8,
    指针所指的位置的访问位为1,
    将其变成0,再下移(回到开头)
    6 1  
    4 1  
    3 1
    内存 访问位 指针 指针所指的位置的访问位仍为1,
    将其变成0,再下移
    6 1
    4 1  
    3 0  
    内存 访问位 指针 指针所指的位置的访问位仍为1,
    将其变成0,再下移
    6 0  
    4 1
    3 0  
    内存 访问位 指针 指针所指的位置恰好有访问位为0的,
    于是就淘汰这个帧,指针下移(回到开头)
    6 0  
    4 0  
    3 0
    内存 访问位 指针 4 内存中有4,于是4所在帧的访问位变为1,
    指针下移
    ×
    6 0
    4 0  
    8 1  
    内存 访问位 指针 6 内存中有6,于是6所在帧的访问位变为1,
    指针下移
    ×
    6 0  
    4 1  
    8 1
    内存 访问位 指针 结束 完成 缺页8次
    6 1  
    4 1
    8 1
    更多0
     
  • 相关阅读:
    在TNSNAMES.ORA文件中配置本机装的oracle
    Eclipse编辑jsp、js文件时,经常出现卡死现象解决汇总
    ExtJs GridPanel 给表格行或者单元格自定义样式
    Ext.core.DomQuery Dom选择器
    JavaScript 常用方法
    ExtJs Ext.data.Model 学习笔记
    JavaScript 深入理解作用域链
    Spring 网路搜集的情报
    SpringMVC 之类型转换Converter详解转载
    SpringMVC @RequestMapping 用法详解之地址映射
  • 原文地址:https://www.cnblogs.com/chengxuyuandashu/p/3629890.html
Copyright © 2011-2022 走看看