【操作系统/OS笔记07】页面置换算法,最优、FIFO、最近最久未使用、时钟

本文深入探讨了页面置换算法,包括最优页面置换算法(理想情况)、先进先出(FIFO)算法及其存在的Belady现象、最近最久未使用(LRU)算法的实现与优势、时钟页面置换算法及其二次机会法的改进,以及全局页面置换算法下的缺页率策略和解决抖动问题的方法。通过对各种算法的比较和分析,阐述了页面管理在操作系统中的重要性和挑战。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本次笔记内容:
6.1 最优页面置换算法
6.2 先进先出算法
6.3 最近最久未使用算法
6.4 时钟页面置换算法
6.5 二次机会法
6.6 最不常用法
6.7 Belady现象、LRU、FIFO、Clock的比较
6.8 局部页替换算法的问题、工作集模型
6.9 两个全局置换算法
6.10 抖动问题

页面置换算法功能与目标

功能
  • 当缺页中断发生时,需要调入新页面;
  • 而此时物理内存已满,则需要选择页面进行替换。
目标
  • 尽可能减少页面的换进换出的次数(即缺页中断的次数)。因为读取磁盘比读取内存慢几个数量级。
  • 同时,操作系统常用的数据段要一直保留在内存中。
  • 页面锁定(Frame locking):用于描述必须常驻内存的操作系统的关键部分或时间关键(time critical)的应用进程。实现方法是:在页表中添加锁定标志位(lock bit)。

在这里插入图片描述

如上图,只保留进程对 页号 的访问轨迹,查看你产生缺页中断的次数。越少的缺页数量,越好的性能。

最有页面置换算法

  • 提出愿景:预知将来程序会访问哪些页面,由此决定替换谁。

  • 基本思路:一个缺页中断发生时,对于保存在内存当中的一个逻辑页面,计算在它的下一次访问之前,还需等待多长时间,从中选择等待时间最长的那个,作为被置换页面。

  • 这只是一种理想情况, 在实际系统中无法实现。 因为操作系统无法预知每一个页面要等待多长时间以后才会再次被访问。

  • 可以把本算法作为一个评价标准(在模拟器上运行,第二遍运行时采用这最优算法)。

在这里插入图片描述

最优置换算法例子如上。

先进先出(FIFO)算法

  • 基本思路:选择在内存中驻留时间最长的页面并淘汰之。具体来说,系统维护着一个链表,记录了所有位于内存当中的逻辑页面。从链表的排列顺序来看,链首页面的驻留时间最长,链尾页面的驻留时间最短。
  • 性能较差,调出页面可能是经常要访问的页面,并且有 Belady现象 ,FIFO算法很少单独使用。

在这里插入图片描述

例如上,产生了更多的缺页中断。

最近最久未使用算法

  • Least Recently Used, LRU;
  • 基本思路:当一个缺页中断发生时,选择最久未使用的那个页面,并淘汰之。
  • 它是对最优页面置换算法的一个近似,其依据是程序的局部性原理,即在最近一小段时间(最近几条指令)内,如果某些页面被频繁地访问,那么在将来的一小段时间内,它们还可能会再一次被频繁地访问。

在这里插入图片描述

LRU算法例如上。

LRU算法需要记录各个页面使用时间的先后顺序,两种可能的实现方法
  • 系统维护一个页面链表,最近刚刚使用过的页面作为首节点,最久未使用的作为尾结点。每一次访问内存时,找到相应的页面,把它从链表中摘
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值