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

发布时间:2026/7/13 2:47:55

【操作系统】页面置换算法(CLOCK/改进型CLOCK)
考点频率★★★★☆选择题常考是LRU的工程实现方案难度⭐⭐⭐建议重点掌握CLOCK算法的指针扫描过程理解改进型CLOCK中访问位和修改位的组合策略1️⃣ 为什么需要CLOCK算法上一篇文章讲了LRU最近最久未使用它性能很好但存在一个实际问题LRU需要记录每个页面的精确访问顺序如维护一个访问链表或时间戳硬件开销大实现成本高。能不能用更简单的硬件机制实现近似LRU的效果CLOCK算法就是这样一个经典方案。它用一个指针和一个“使用位”访问位来近似判断哪些页面最近被访问过被广泛应用于实际操作系统如Linux、Windows的页置换。2️⃣ 基本CLOCK算法又称NRUNot Recently Used2.1 数据结构内存中的页面排成一个循环队列每个页面有一个使用位Reference BitR位页面被访问时R位被硬件置为1页面未被访问时R位保持为0系统维护一个指针Hand指向当前要检查的位置2.2 算法步骤发生缺页时检查指针当前指向的页面如果R 0选择该页面换出淘汰指针指向下一个位置如果R 1将R位清零清为0指针指向下一个位置继续检查重复步骤1直到找到一个 R 0 的页面进行置换核心逻辑给每一个页面一个“第二次机会”。被访问过的页面R1指针经过时不清除相当于“保留一次”。如果一轮循环后所有页面都刚被访问过指针转了一圈自然会把第一个遇到的R0页面即最早被清0的淘汰。2.3 算法执行示例假设内存中有3个页面页框指针初始指向页框0访问序列中发生缺页时操作如下页框初始R位指针指向缺页处理过程结果页框01指针→页框0R1 → 清0指针移向页框1继续扫描页框11指针→页框1R1 → 清0指针移向页框2继续扫描页框20指针→页框2R0 →淘汰页框2装入新页R1指针移向页框0完成置换注意到R0的页面被淘汰后指针指到了下一个位置页框0而不是原地。这保证了公平性。2.4 优点与缺点优点缺点硬件开销小只需要一个访问位只是LRU的近似不能精确区分页面的访问时间先后顺序实现简单性能稳定如果所有页面的R位都为1需要扫描一整圈才能淘汰一个页面最坏情况3️⃣ 改进型CLOCK算法增强型NRU基本CLOCK算法只考虑了页面是否被访问过但没有考虑页面是否被修改过。如果换出一个被修改过的页面脏页需要写回磁盘代价比换出干净页要大得多。改进型CLOCK在R位的基础上增加了修改位Modified BitM位也称脏位根据R和M的组合决定淘汰优先级。3.1 四种页面类别类别R位M位含义淘汰优先级第1类00最近未访问且未被修改最高最优淘汰第2类01最近未访问但已被修改中等换出前需写回磁盘第3类10最近被访问但未被修改较低给第二次机会第4类11最近被访问且已被修改最低最不希望淘汰3.2 算法扫描过程改进型CLOCK执行多轮扫描每次扫描寻找不同类别的页面第一轮扫描寻找(R0, M0)的页面找到即淘汰。扫描过程中将遇到的R1的页面置为0给它们第二次机会但M位不变。第二轮扫描如果第一轮没找到寻找(R0, M1)的页面找到即淘汰。第三轮扫描如果还没找到重新扫描一遍此时所有R位都已被清零。再次寻找(R0, M0)并淘汰因为第一轮时R1的页面已被清0。第四轮扫描如果仍然没有再次寻找(R0, M1)并淘汰必能找到。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个页面。发生缺页中断时被淘汰的页面是哪个解析检查页0R1 → 清0指针→页1检查页1R0 → 淘汰页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页1B. 页0页2C. 页1页2D. 页2页0本专栏日更2篇点击头像 → 专栏《软考中级高频考点》订阅第一时间接收新内容#软考中级 #软件设计师 #CLOCK算法 #页面置换 #NRU #操作系统

相关新闻

高Tg PCB材料(Tg≥170°C)在无铅制程中的5项性能实测与失效分析

高Tg PCB材料(Tg≥170°C)在无铅制程中的5项性能实测与失效分析

2026/7/13 23:03:56

高Tg PCB材料在无铅制程中的性能实测与失效机理深度解析1. 高Tg材料的核心价值与测试方法论在当今电子工业向高密度、高可靠性发展的趋势下,PCB材料的玻璃化转变温度(Tg)已成为衡量基板性能的关键指标。不同于普通FR-4材料(130-150C),Tg≥170C的高性能基…

AI 辅助内容生产与网站优化的实践:效率提升在哪、边界在哪

AI 辅助内容生产与网站优化的实践:效率提升在哪、边界在哪

2026/7/12 13:20:26

对做内容和维护站点的技术从业者来说,这套"AI 员工"的用法很实用:把 AI 当作辅助工具,参与到内容生产、网站结构优化、数据监测等重复性工作中,从而提升效率、腾出人手做更需要判断的事。它是助手,不是万能钥…

AI编程接单实战复盘:Claude Code 4天完成电商开票系统迭代,5000元私活全过程

AI编程接单实战复盘:Claude Code 4天完成电商开票系统迭代,5000元私活全过程

2026/7/13 12:10:07

上个月,我在工资之外赚到了一笔开发费:5000块。 单子不大,但对一个写了10年Java的人来说,它回答了一个我惦记很久的问题:AI编程接私活,到底跑不跑得通? 这篇把整个过程复盘给你,包括…

打造沉浸式二次元个人空间:HTML+CSS+JS动态主页源码解析

打造沉浸式二次元个人空间:HTML+CSS+JS动态主页源码解析

2026/7/14 0:26:38

1. 二次元风格个人主页的魅力在这个数字化时代,个人主页早已不再是简单的信息展示窗口,而是成为了展现个性与审美的艺术空间。作为一名长期混迹ACG圈子的开发者,我深深理解二次元文化对年轻一代的吸引力。那种高饱和度的色彩、夸张的造型、充…

Unity Addressables资源热更新实战:三步实现高效增量更新

Unity Addressables资源热更新实战:三步实现高效增量更新

2026/7/14 0:26:38

1. 项目概述与核心价值最近在项目里折腾资源热更新,发现很多团队还在用传统的AssetBundle,每次更新都得重新打包、上传、下载,流程繁琐不说,还容易出错。后来我们全面转向了Unity的Addressables系统,发现它简直是资源管…

Unity VR开发实战指南:从环境搭建到性能优化的完整路径

Unity VR开发实战指南:从环境搭建到性能优化的完整路径

2026/7/14 0:26:38

1. 项目概述:为什么Unity是VR开发的“圣典”?如果你正在寻找一个能让你从零开始,系统性地掌握虚拟现实应用开发的路径,那么“Unity虚拟现实VR开发圣典完整指南”这个标题,可以说精准地戳中了你的需求。作为一名在游戏和…

基于 TCN-Transformer-BiLSTM 与噪声抑制半监督学习的锂离子电池 SOH 估计(Python代码实现)

基于 TCN-Transformer-BiLSTM 与噪声抑制半监督学习的锂离子电池 SOH 估计(Python代码实现)

2026/7/14 0:26:38

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 &#x1f381…

gala-filetrace实战指南:监控vim/sed/echo等命令的5个实用技巧

gala-filetrace实战指南:监控vim/sed/echo等命令的5个实用技巧

2026/7/14 0:26:38

gala-filetrace实战指南:监控vim/sed/echo等命令的5个实用技巧 【免费下载链接】gala-filetrace Real-time monitoring component of configuration files based on eBPF 项目地址: https://gitcode.com/openeuler/gala-filetrace 前往项目官网免费下载&…

CSP 真题解析:[CSP-J 2019-T4] 加工零件

CSP 真题解析:[CSP-J 2019-T4] 加工零件

2026/7/14 0:16:38

[CSP-J 2019-T4] 加工零件 摘要: 本文详细解析了 CSP-J 2019 第四题「加工零件」的解题思路与 C 实现。题目本质上是判断无向图中从 1 号点出发,能否恰好走 L 步到达目标点 a。利用「反复横跳不改变路径奇偶性」的图论性质,问题转化为求 1 号…

Unity游戏文本翻译架构深度解析:XUnity.AutoTranslator的技术实现与工程实践

Unity游戏文本翻译架构深度解析:XUnity.AutoTranslator的技术实现与工程实践

2026/7/13 7:41:16

Unity游戏文本翻译架构深度解析:XUnity.AutoTranslator的技术实现与工程实践 【免费下载链接】XUnity.AutoTranslator 项目地址: https://gitcode.com/gh_mirrors/xu/XUnity.AutoTranslator XUnity.AutoTranslator作为Unity游戏社区中最成熟的文本翻译解决方…

openEuler Raspberry Pi Kernel设备驱动开发指南:为树莓派硬件添加支持

openEuler Raspberry Pi Kernel设备驱动开发指南:为树莓派硬件添加支持

2026/7/13 20:43:19

openEuler Raspberry Pi Kernel设备驱动开发指南:为树莓派硬件添加支持 【免费下载链接】raspberrypi-kernel It provides openEuler kernel source for Raspberry Pi 项目地址: https://gitcode.com/openeuler/raspberrypi-kernel 前往项目官网免费下载&…

openEuler系统集成测试实战:基于smoke-test套件的环境验证技巧

openEuler系统集成测试实战:基于smoke-test套件的环境验证技巧

2026/7/13 20:43:10

openEuler系统集成测试实战:基于smoke-test套件的环境验证技巧 【免费下载链接】integration-test The repo contains test suits for system integration test 项目地址: https://gitcode.com/openeuler/integration-test 前往项目官网免费下载:…

XUnity.AutoTranslator 游戏实时翻译插件:从原理到实战的完整指南

XUnity.AutoTranslator 游戏实时翻译插件:从原理到实战的完整指南

2026/7/14 0:06:37

1. 项目概述:当游戏语言成为一堵墙作为一名玩了十几年日系、欧美独立游戏的“老油条”,我太懂那种面对一款心仪已久、画风玩法都戳中G点的游戏,却因为语言不通而望而却步的痛了。尤其是那些基于Unity引擎开发的、体量不大但内容精良的作品&am…

2026普通文员学数据分析的价值

2026普通文员学数据分析的价值

2026/7/14 0:06:37

一、2026年普通文员学习数据分析的必要性随着数字化转型加速,数据分析技能正逐渐成为职场基础能力。普通文员学习数据分析可以提升工作效率、增强竞争力,并为职业转型提供更多可能性。二、数据分析对文员的价值自动化办公:通过数据分析工具&a…

2026从计划员到主管,生产管理者学数据分析有用吗?

2026从计划员到主管,生产管理者学数据分析有用吗?

2026/7/14 0:06:37

一、生产管理领域的职业发展路径 从计划员到主管的角色转变,是生产管理者职业发展的典型路径。计划员主要负责生产排程、库存管理和资源协调等基础工作,而主管则需要承担团队管理、决策支持和效率优化等更高级别的职责。这种转变不仅仅是职位的提升&…