操作系统学习笔记(十六):页面置换算法

功能:

置换算法是指当出现缺页异常时,需要调入新页面而内存已满时,置换算法选择被置换的物理页面。

设计目标:

  • 尽可能减少页面的调入调出次数;
  • 把未来不再访问或短期内不访问的页面调出。

页面锁定:

了解具体的置换算法之前,先了解一个概念,页面锁定。页面锁定是用来描述某些必须常驻内存的逻辑页面,比如操作系统的关键部分,再比如一些要求响应速度的代码和数据。页面锁定是通过页表中的锁定标志位实现的。

分类:

1. 局部置换算法:

置换页面的选择范围仅限于当前进程占用的物理页面内。具体又有一系列算法:最优算法、先进先出算法、最近最久未使用算法,最近最久未使用算法又衍生出两种近似算法:时钟算法、最不常用算法,之后进行详细介绍。

2. 全局置换算法;

置换页面的选择范围是所有可换出的物理页面。具体有工作集算法、缺页率算法。

局部置换算法:

前面对置换算法进行了分类,接下来分别进行讨论。

1. 最优置换算法:

因为无法知道未来的访问顺序,实际是无法实现的,只是用来针对每个运行完的程序马后炮式地计算最优解,用于评价其他实际算法的性能优劣。

2. 先进先出置换算法(FIFO):

选择在内存驻留时间最长的页面进行置换。具体是通过链表实现:链表元素按驻留内存的时间排序,链首最长,链尾最短,出现缺页时,选择链首页面进行置换,新页面加到链尾。因此实现简单,但是性能较差,因为调出的页面可能是经常访问的,进程分配物理页面数增加时,缺页并不一定减少(这一点我是这样理解的:当分配给一个进程的物理页面增多时,进程就有更多的空间给它调配,最优置换算法就可以实现更少的缺页异常),这个现象被称为Belady现象。因此该算法很少单独使用。

3. 最近最久未使用算法(Least Recently Used, LRU):

选择最长时间没有被引用的页面进行置换。如果某些页面长时间未被访问,则他们在将来还可能会长时间不会被访问。具体实现是在缺页时计算内存中每个逻辑页面的上一次访问时间,选择上一次使用到当前时间最长的页面置换出去。该算法是最优置换算法的一种近似,但仍然很复杂,很难实现。比如下面是LRU算法的两种可能的实现算法:

a. 页面链表。系统维护一个按最近一次访问时间排序的页面链表,链表首节点是最近使用的页面,尾节点是最久未使用的页面,访问内存时找到相应页面,并把它移到链表之首,缺页时,置换链表尾节点的页面。

b. 活动页面栈。访问页面时将此页号压入栈顶,并将栈内相同的页号抽出,缺页时置换栈底的页面。

可以看到这两种方式存在一个问题就是平时不缺页时开销较大࿰

  • 6
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值