当前位置: 首页 > news >正文

【操作系统】页面置换算法(CLOCK/改进型CLOCK)

考点频率:★★★★☆(选择题常考,是LRU的工程实现方案)
难度:⭐⭐⭐
建议:重点掌握CLOCK算法的指针扫描过程,理解改进型CLOCK中访问位和修改位的组合策略

1️⃣ 为什么需要CLOCK算法?

上一篇文章讲了LRU(最近最久未使用),它性能很好,但存在一个实际问题:LRU需要记录每个页面的精确访问顺序(如维护一个访问链表或时间戳),硬件开销大,实现成本高。

能不能用更简单的硬件机制,实现近似LRU的效果?CLOCK算法就是这样一个经典方案。它用一个指针和一个“使用位”(访问位)来近似判断哪些页面最近被访问过,被广泛应用于实际操作系统(如Linux、Windows的页置换)。

2️⃣ 基本CLOCK算法(又称NRU,Not Recently Used)

2.1 数据结构

  • 内存中的页面排成一个循环队列
  • 每个页面有一个使用位(Reference Bit,R位)
    • 页面被访问时,R位被硬件置为1
    • 页面未被访问时,R位保持为0
  • 系统维护一个指针(Hand),指向当前要检查的位置

2.2 算法步骤(发生缺页时)

  1. 检查指针当前指向的页面:

    • 如果R = 0:选择该页面换出(淘汰),指针指向下一个位置
    • 如果R = 1:将R位清零(清为0),指针指向下一个位置,继续检查
  2. 重复步骤1,直到找到一个 R = 0 的页面进行置换

核心逻辑:给每一个页面一个“第二次机会”。被访问过的页面R=1,指针经过时不清除,相当于“保留一次”。如果一轮循环后,所有页面都刚被访问过,指针转了一圈,自然会把第一个遇到的R=0页面(即最早被清0的)淘汰。

2.3 算法执行示例

假设内存中有3个页面(页框),指针初始指向页框0,访问序列中发生缺页时,操作如下:

页框初始R位指针指向缺页处理过程结果
页框01指针→页框0R=1 → 清0,指针移向页框1继续扫描
页框11指针→页框1R=1 → 清0,指针移向页框2继续扫描
页框20指针→页框2R=0 →淘汰页框2,装入新页(R=1),指针移向页框0完成置换

注意到R=0的页面被淘汰后,指针指到了下一个位置(页框0),而不是原地。这保证了公平性。

2.4 优点与缺点

优点缺点
硬件开销小(只需要一个访问位)只是LRU的近似,不能精确区分页面的访问时间先后顺序
实现简单,性能稳定如果所有页面的R位都为1,需要扫描一整圈才能淘汰一个页面(最坏情况)

3️⃣ 改进型CLOCK算法(增强型NRU)

基本CLOCK算法只考虑了页面是否被访问过,但没有考虑页面是否被修改过。如果换出一个被修改过的页面(脏页),需要写回磁盘,代价比换出干净页要大得多。

改进型CLOCK在R位的基础上,增加了修改位(Modified Bit,M位,也称脏位),根据R和M的组合决定淘汰优先级。

3.1 四种页面类别

类别R位M位含义淘汰优先级
第1类00最近未访问且未被修改最高(最优淘汰)
第2类01最近未访问但已被修改中等(换出前需写回磁盘)
第3类10最近被访问但未被修改较低(给第二次机会)
第4类11最近被访问且已被修改最低(最不希望淘汰)

3.2 算法扫描过程

改进型CLOCK执行多轮扫描,每次扫描寻找不同类别的页面:

  1. 第一轮扫描:寻找(R=0, M=0)的页面,找到即淘汰。扫描过程中,将遇到的R=1的页面置为0(给它们第二次机会),但M位不变
  2. 第二轮扫描:如果第一轮没找到,寻找(R=0, M=1)的页面,找到即淘汰。
  3. 第三轮扫描:如果还没找到,重新扫描一遍,此时所有R位都已被清零。再次寻找(R=0, M=0)并淘汰(因为第一轮时R=1的页面已被清0)。
  4. 第四轮扫描:如果仍然没有,再次寻找(R=0, M=1)并淘汰(必能找到)。

3.3 为什么第四轮一定能找到?

经过前三轮,所有的R位都已经是0,且页面的M位非0即1。因此第四轮扫描时,(0,0)(0,1)两类页面必然存在,至少能找到一类。这是算法终止的保障。

4️⃣ 基本CLOCK vs 改进型CLOCK

对比项基本CLOCK改进型CLOCK
使用位仅R位(访问位)R位(访问位)+ M位(修改位)
淘汰依据仅看是否最近被访问同时考虑是否被访问和是否被修改
是否考虑磁盘I/O代价是(优先淘汰干净页)
扫描轮数通常1轮最多4轮
实现复杂度中等

5️⃣ 经典例题

例题1:某系统采用基本CLOCK置换算法,内存中有4个页面,R位依次为[1, 0, 0, 1],指针当前指向第0个页面。发生缺页中断时,被淘汰的页面是哪个?

解析

  • 检查页0:R=1 → 清0,指针→页1
  • 检查页1:R=0 → 淘汰页1

答案:页1


例题2:某系统采用改进型CLOCK算法,某时刻内存中4个页面的R位和M位分别为:
页0: (1,0),页1: (0,1),页2: (0,0),页3: (1,1),指针指向页0。发生缺页时,淘汰哪个页面?

解析

  • 第一轮扫描查找(0,0)
    • 页0: (1,0) → R清0,变成(0,0),指针→页1
    • 页1: (0,1) → 不是目标,指针→页2
    • 页2: (0,0) →找到!淘汰页2

答案:页2


例题3(概念):改进型CLOCK算法相比基本CLOCK算法,主要改进之处在于( )。

A. 增加了R位
B. 增加了M位,优先淘汰未被修改的页面
C. 用链表代替循环队列
D. 淘汰页面时不需要扫描

解析:改进型CLOCK增加了修改位(M位),优先淘汰(0,0)类页面(未被访问且未被修改),以减少磁盘I/O开销。选B

6️⃣ 记忆口诀

时钟算法循环查,R位为零就换它。
R位为一清零走,二次机会给一下。
改进加上M位判,优先替换干净页。
零零最优零一次,一一最差放一边。

7️⃣ 小测验(评论区对答案)

某系统采用基本CLOCK置换算法,内存中有3个页面,R位依次为[0, 1, 1],指针当前指向页0。发生缺页中断时,被淘汰的页面是( )。经过这次淘汰后,指针指向( )。
A. 页0,页1
B. 页0,页2
C. 页1,页2
D. 页2,页0

🔔本专栏日更2篇,点击头像 → 专栏《软考中级高频考点》订阅,第一时间接收新内容

#软考中级 #软件设计师 #CLOCK算法 #页面置换 #NRU #操作系统

http://www.jsqmd.com/news/1132345/

相关文章:

  • Redis--Redis分布式系统的原理与实操
  • 你的前端代码打包后究竟经历了什么?
  • 白话MVP
  • Agent出现LLM因为历史工具调用消息而误解工具调用方式的问题
  • Gromacs 分子动力学 远程安装介绍 全网最详细的Gromacs安装前说明 该怎么选择合适的安装方式 Windows直接可用的Gromacs(预编译版)有什么危害?Gromacs安装需要准备什么?
  • Langchain文本切割器在RAG中的使用
  • K/R/F/S 四大系列斜齿轮减速机的区别与选型要点?
  • Cline 配置 Claude Sonnet 5 实战指南:思考深度调优与切换 Fable 5 的时机
  • 3步解锁Text-to-CAD:如何用文字描述生成专业机械设计
  • Pandoc Lua 过滤器:免外部工具,高效处理文档转换!
  • 图最短路评测:Dijkstra 对了,也可能用错场景
  • [实例] SPI接口的ADC芯片全通道纯硬件驱动——基于HAL库和TLA2518芯片
  • 74LS73 异步计数器设计实战:2片芯片实现4位二进制与8421BCD电路对比
  • Claude Code的完美国产替代小米 MiMo Code安装指南
  • 前端应用的离线暂停更新策略:原理、实现与最佳实践
  • 星火插件:面向资深开发者的认知增强型IDE插件
  • [特殊字符] Git 协作指南
  • Recursive vs. Recurrent RNN 结构辨析:从链式到树状的3种建模范式
  • Vben精讲:06-Vben环境变量配置
  • VS code 连接 remote SSH 一些基本教程
  • CameraGraph™全域相机拓扑推理引擎 视频孪生跨镜目标连续追踪核心支撑 空间相机关系张量建模:根治跨镜头目标ID跳变、身份混淆底层算法拆解
  • 拯救开题困难户!Paperxm三步标准化,把“憋不出来”变成“一键生成”
  • 全域实景动态复刻,公安治安视频孪生快速溯源研判技术解析 跨辖区视频流时空融合 · 全域人员连续追踪管控 · 实景三维动态预警 · 城市安防一体化指挥底层全解
  • 2025反爬系统深度解析:从Canvas指纹到AI行为画像的攻防实战
  • ML预测半导体良品率——样本缺失值模式分析(Python+Pandas+Matplotlib)
  • Docker中文件修改的三种方法
  • 低代码平台与AI融合:从代码生成到智能开发的技术架构演进
  • 【硬件+APP+云平台】44.1.无线密码锁(PCB版)-基于STM32嵌入式物联网单片机软硬件毕业生系统设计
  • claude常用的cli
  • 想了解实力强的陕西GEO优化流程收费情况?这里有答案!