操作系统笔记:(四) 页面置换算法

本篇文章简要总结虚拟存储中的页面置换算法,结构组织如下:

  • 相关概念
  • 局部置换算法
  • 全局置换算法

相关概念

设计目标

  • 减少页面 swap in/out 次数
  • 把未来不在访问或者短期内不在访问的页调出

页面锁定

有些页是不用调出的

  • 描述必须常驻内存中的逻辑页
  • OS 的关键部分
  • 要求响应速度的 code/data
  • 页表项中的锁定页(lock bit)

评价方法

  • 记录访存的页面轨迹(编号)
  • 模拟/记录缺页次数

分类

  • 局部置换算法: 仅限当前进程的页
  • 全局置换算法: OS管理的所有页

局部置换算法

OPT(最优置换算法)

idea: 未来最长时间不访问的页(理想情况)
这里写图片描述

implement: 缺页时找到未来最长时间不访问的页,换出

特点

  • 无法实现
  • 最理想的策略
  • 作为其他算法的评测依据

FIFO 先进先出

这里写图片描述

字面意思

特点:

  • 实现简单
  • 性能较差
  • 容易产生belady 现象

LRU(Least Recently Used algorithm)

idea: 缺页时用最近最少使用的页替换掉它

这里写图片描述

implement

  1. 为每个页表增加一个时钟域记录每次访问时间,缺页时换掉时间最小的
  2. 实现 进来一个新的页,就重新压栈,缺页时仅却出栈顶元素就好,不过当页已在栈中时,仍然耗时很大,具体地,若访问的页在栈顶需要将其摞到栈首.

这里写图片描述

特点:

  • 实现难
  • 时间开销大

clock 算法(时钟置换算法)

这是一种近似的LRU 算法,是对 FIFO 和LRU的折中

implement:

Data Structure:

  • 在页表项中增加引用位,标记当前这一页是否被引用
  • 将页面组织成环形链表
  • pointer指向最先调入的页面

Algorithm:

  • 访问页,在页表项记录下页面访问情况
  • 缺页,从指针指向的页面开始,若遇见引用位为0的页面,就将其换出,并置访问位为1;若引用位为1,将其置1,可以发现这样最终总会找到一个适当的页
    这里写图片描述

增强的clock 算法

将引用位和修改位作为一个序对来考虑,那么会有四种类型

  • 00 最近未使用也没有修改,用于置换的最佳页
  • 01 最近未使用但是修改过,不是很好,需要将其写回磁盘
  • 10 最近使用过,但是未修改,很快可能又被使用
  • 11 最近使用过且修改过,不好

这种方法给修改过的页更高的级别,可能需要多找几圈,但是降低了I/O操作
这里写图片描述

belady 现象

分配的物理页面增加,缺页率反而上升

FIFO : 存在belady现象,这个例子很好找到
LRU:不存在,(多增加页面后,每次换出的页面相同???,PS:个人想法)
clock: 存在,(e.g.: 带填坑)

全局置换算法

就是操作系统考虑当前所有进程页面的分配,将不常用的页交换出去,给其他进程多一点空间,由于进程在生命周期内的内存需求是变化的。

主要有两种,一种是工作集,一种是缺页率

工作集

  • 工作集:
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
本实验使用一下算法 使用rand()函数随机产生页面号,用数组装入页面号,模拟页面调入内存发生页面置换的过程。 整个过程,都是使用数组来实现每个算法,模拟队列,模拟堆栈的功能,实现每一个置换算法。 页面置换算法 最佳置换算法(OPT):选择永不使用或是在最长时间内不再被访问(即距现在最长时间才会被访问)的页面淘汰出内存。用于算法评价参照。 随机置换算法 (S):产生一个取值范围在0和N-1之间的随机数,该随机数即可表示应被淘汰出内存的页面。 先进先出置换算法(FIFO):选择最先进入内存即在内存驻留时间最久的页面换出到外存。 最近最久未使用置换算法(LRU): 以“最近的过去”作为“最近的将来”的近似,选择最近一段时间最长时间未被访问页面淘汰出内存 Clock置换算法:为进入内存的页面设置一个访问,当内存某页被访问访问置一,算法在选择一页淘汰时,只需检查访问,若为0,则直接换出,若为1,置该访问为0,检测内存的下一个页面访问。 改进型Clock置换算法: ①从查寻指针当前置起扫描内存分页循环队列,选择A=0且M=0的第一个页面淘汰;若未找到,转② ② 开始第二轮扫描,选择A=0且M=1的第一个页面淘汰,同时将经过的所有页面访问置0;若不能找到,转①

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值