zoukankan      html  css  js  c++  java
  • 操作系统--存储管理4

    -----页面置换算法------
    1.概念:当出现缺页异常的时候,并且内存中的空闲页面也用完,
    此时必须把进行外存与内存的一个页面置换。
    页面置换算法的功能:选择合适的页面进行置换。


    2.置换算法追求的目标
    * 尽可能减少页面置换的次数
    * 将未来不用/短时间内不使用的页面换出。
    注意:置换算法要考虑的是整个内存中所有进程执行的性能-并不只是某个进程


    3.页面锁定:内存中不能被置换的页面
    * 描述必须常驻内存的逻辑页面
    * 操作系统内核页面
    * 要求响应速度的代码和数据
    * 页表中的锁定标志位


    4.置换算法的评价方法
    记录进程访问内存页面的轨迹,模拟置换算法,记录缺页次数


    5.页面置换算法的分类
    局部置换算法:每个进程分配的页面个数确定,置换只会发生在自己的所属页面
    全局置换算法:置换页面是所有可能被置换的页面


    6.局部置换算法--进程分配的页面数固定
    最优算法:预测未来最长时间不会使用的页面--看的是后面的访问情况
    OPT特点:缺页最少,但是是理想情况,实际系统无法预测未来的访问序列
    可以作为其他置换算法的评价标准
    先进先出:按照时间顺序置换,但是这个并不能保证是和程序的访问特性一致
    其实根据的是队列的特性--时间。置换在内存中驻留时间最长的

    FIFO实现:维护一个链表:链头放时间最长,刚进来的页面放在链尾
    先进先出特点:实现简单;性能较差;增加进程页面个数,缺页率不一定会减少
    (Belady现象)很少会单独使用该算法

    最近最久未用算法:统计过去的访问特征,预测未来访问情况--算法过于复杂
    OPT的近似。选择最近最久未访问的页面被置换
    (LRU):依据最近最久没访问的页面在未来一段时间也不会访问
    记录每个页面上次访问的时间,到现在的时间差
    最大的一个页面被置换出来。
    LRU实现:1.系统维护一个按照最近一次访问时间顺序的页面链表;
    链头是刚刚访问的页面,链尾巴是最近未访问的;
    访问时候将刚访问的页面置于链头,缺页置换链尾的页面。
    2.维护一个活动页面栈
    访问页面时候压栈顶并将相同的页面删除
    缺页时候置换栈底的页面
    LRU实现过程:开销比较大

    时钟算法Clock:对LRU近似+FIFO综合;仅对页面访问情况进行大致的统计
    仅仅记录页面是否被访问;没访问的页面按照进来的先后
    顺序进行置换出去。
    Clock数据结构:在页表项中增加访问位;把页面组织成环形链表
    指针指向最先调入的页表
    算法实现:页面装入的时候:访问位0;页面访问的时候,访问位1;
    缺页时候指针从当前位置顺序查找环形链表
    访问位位0,就置换该页面,新放入页面为1
    访问位为1;则访问位置0;并移动到下一个页面直到找到
    访问位为0可以被置换的页面。
    特点:是在LRU和FIFO中做折中

    改进的Clock: 减小修改页面的处理开销:对于修改的页面不进行替换
    在页表项目:定义一个修改位;修改过1;未修改就0
    改进的Clock思路:在访问页面的时候进行相应的修改
    缺页,修改页面标志位,以跳过有修改的页面
    对于修改过的页面写回操作会被统一操作

    最不常用算法IFU:对LRU近似;缺页时候,置换的是最少次数访问的页面
    实现:为每个页面设置计数,缺页时候,置换出计数小的
    特点:算法开销大;开始频繁使用的页面,但是以后不使用就
    难以被置换出去,通过定期对这些页面的计数减小。、


    7.局部置换算法的特征
    1.belady现象:分配给进程页面数增加,可能就出现缺页次数增加
    产生的原因:FIFO算法的置换特征与进程访问的动态特征矛盾
    被置换出去的页面可能进程下次还会要访问
    产生belady的算法:FIFO
    2.LRU,FIFO,CLOCK比较
    LRU算法性能好,但是系统开销大(动态调整页面的顺序)
    FIFO系统开销小,但是会产生Belady现象(不进行动态调整)
    CLOCK是它们的折中;在访问的过程中通过标准描述动态的关系


    8.全局置换算法
    局部置换算法并没有考虑到进程的访问差异
    思路:为进程分配可变数目的物理页面
    在不同阶段为进程分配不同数目的物理页面
    算法:如何确定给进程分配多少页面
    进程个数与CPU利用率存在一个关系:前边是正比,但是存在极限限制
    引入工作集:一个进程当前正在使用的逻辑页面的集合。w(t,V)
    w(t,V):指的是当前时间之前的时间很短,访问页面的集合;工作集大小可变
    工作集变化规律:不同的阶段工作集大小不同
    常驻集:在当前时刻,进程实际驻留内存的页面集合。
    工作集与常驻集的关系:
    工作集是进程运行过程的固有特性
    常驻集是取决于系统分配给进程的物理页面和页面置换算法
    常驻集包含于工作集:缺页少
    工作集发在剧烈变化,缺页多
    进程的常驻集大小达到一定数目;缺页率不会明显下降
    工作集算法:可以理解为最优算法在全局置换的体现
    思路:换出不在工作集中的页面
    实现:访问链表:维护窗口内的访存页面链表
    访存时候换出不在工作集中的;更新链表
    缺页时候,换入,更新链表

    缺页率置换算法:缺页率定义:两次缺页时间间隔的倒数
    影响缺页率原因:页面置换算法
    分配给进程的页面数目
    页面大小
    程序的编写方法
    缺页率置换算法: 访存的时候设置标志
    缺页的时候计算时间间隔;>T置换未被引用<=T加入工作集
    抖动和负载控制
    抖动:进程拥有的物理页面过少,不能包含工作集
    造成大量缺页,频繁置换
    进程运行速度变慢
    产生抖动原因:内存中的进程数,每个进程获取的页面个数
    操作系统需要在并发和缺页率之间做折中
    负载控制:通过控制并发进程数来进行系统的负载控制

  • 相关阅读:
    高效代码审查的十个经验
    记事本
    cocos2d-x游戏引擎核心之十一——并发编程(消息通知中心)
    DE1-SOC开发板使用学习
    反思的话-180929
    反思的话-企业制度的作用180927
    XDS100V3连接Pandaboard ES OMAP4460开发板
    《手把手教你学DSP-基于TMS320F28335》书中的错误
    DSP28335做FFT傅里叶变换
    itop4412学习-上层应用多任务开发
  • 原文地址:https://www.cnblogs.com/sun1993/p/7746833.html
Copyright © 2011-2022 走看看