操作系统学习03 页面置换算法

操作系统学习03 页面置换算法_第1张图片
页面置换算法的目标:当缺页中断发生,需要调入新的页面而内存已满时,选择内存中的哪个物理页面被置换。
尽可能的减少页面换进换出的次数(缺页中断的次数),把未来不再使用或者短期内较少使用的页面换出。通常只能在局部原理指导下一句过去的统计数据来进行预测。
页面锁定:必须常驻内存的操作系统的关键部分或时间关键的应用进程,实现方法是在页表中添加锁定标志位(lock bit)。
记录一个进程对页访问的一个轨迹:
(虚拟)地址跟踪(页号,位移),生成页面轨迹:
操作系统学习03 页面置换算法_第2张图片

  1. 最优页面置换算法
    当一个缺页发生中断时,对于保存在内存当中的每一个逻辑页面,计算它的下一次访问之前还需要等待多长时间。从中选择时间最长的那个作为被置换的页面。
    只是理想状况,实际系统中无法实现。因为操作系统不知道每一个页面等待多久才会被再次访问。
    可作为其他算法的性能评价依据(模拟器上运行,记录每一次页面访问情况,第二次即可知道最优置换算法

  2. 先进先出算法FIFO:
    选择在内存中驻留时间最长的页面并淘汰之。
    性能较差,调出的页面可能是经常要访问的页面,并且有belady现象。FIFO算法很少单独使用

  3. 最久未使用算法LRU:
    当一个缺页中断发生时,选择最久未被使用的页面,并淘汰之。 如果程序有局部特征(即短时间内访问过的更可能被再次访问),LRU效果较好。
    LRU算法需要记录各个页面使用时间的先后顺序。开销较大。
    两种可能的实现方法:
    1.维护一个页面链表:操作系统学习03 页面置换算法_第3张图片
    2. 页面栈:
    操作系统学习03 页面置换算法_第4张图片
    结果虽然可能不错但是寻找过程开销很大。

  4. 时钟(clock)页面置换算法:
    LRU的近似,对FIFO的一种改进。找的不一定是最老的(由used bit访问位决定,只有1或0,不够准确)
    基本思路:操作系统学习03 页面置换算法_第5张图片
    操作系统学习03 页面置换算法_第6张图片

  5. 二次机会法/Enhanced Clock algorithm:
    判断是不止基于used bit,也基于dirty bit(有写操作则为1),替换used bit和dirty bit都为0. 如果两个有一个为1,修改为0;若两个都为1,只修改used,故有两次机会
    操作系统学习03 页面置换算法_第7张图片

  6. 最不常用算法(LFU):
    当一个缺页中断发生时,选择访问次数最少的页面,淘汰之。
    实现方法:对每个页面加一个访问计数器,每当访问一次,计数器加一。发生缺页中断时,淘汰计数值最小的的页面。
    与LFU的区别:LFU考察的是访问次数越多越好,LFU是访问时间越短越好。
    问题:一个页面在进程开始时使用很多,但之后就不用了。实现也费时费力。解决办法:定期把次数寄存器右移一位(除2)

  7. Belady现象,FIFO,LRU,Clock的比较
    belady现象:采用FIFO算法时,有时会出现分配的物理页面增加,缺页率反而也提高的异常现象。
    1 原因:FIFO置换特征与进程访问内存的动态特征是矛盾的,与置换算法的目标是不一致的(即替换较少使用的页面)。因此,被它置换出去的页面不一定是进程不会访问的。
    操作系统学习03 页面置换算法_第8张图片
    操作系统学习03 页面置换算法_第9张图片

  8. 局部页替换算法的问题,工作集模型
    在之前的假设中,给每个程序分配的页帧是固定的,程序运行中上需要的页帧是动态变化的

操作系统学习03 页面置换算法_第10张图片
工作集模型working set:
操作系统学习03 页面置换算法_第11张图片
操作系统学习03 页面置换算法_第12张图片
下图中,t2的局部性好于t1
操作系统学习03 页面置换算法_第13张图片
操作系统学习03 页面置换算法_第14张图片
常驻集:当前时刻实际驻留在内存当中的页面集合:
操作系统学习03 页面置换算法_第15张图片
9. 两个全局置换算法:
工作集页面替换算法 :滑动窗口
操作系统学习03 页面置换算法_第16张图片
缺页率页面置换算法:
操作系统学习03 页面置换算法_第17张图片
操作系统学习03 页面置换算法_第18张图片
操作系统学习03 页面置换算法_第19张图片
操作系统学习03 页面置换算法_第20张图片

  1. 抖动问题:

操作系统学习03 页面置换算法_第21张图片
操作系统学习03 页面置换算法_第22张图片

你可能感兴趣的:(windows)