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

发布时间:2026/7/11 17:00:39

【操作系统】页面置换算法(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/11 11:05:48

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

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

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

2026/7/8 7:20:30

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

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

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

2026/7/11 22:28:45

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

终极指南:如何利用Rats Search打造安全免费的分布式P2P搜索引擎

终极指南:如何利用Rats Search打造安全免费的分布式P2P搜索引擎

2026/7/12 11:44:33

终极指南:如何利用Rats Search打造安全免费的分布式P2P搜索引擎 【免费下载链接】rats-search rats-search: BitTorrent P2P multi-platform search engine for Desktop and Web servers with integrated torrent client 项目地址: https://gitcode.com/gh_mirror…

STC89C52单片机OLED数字频率计:1Hz–1MHz实时测量,含Keil工程与Proteus仿真

STC89C52单片机OLED数字频率计:1Hz–1MHz实时测量,含Keil工程与Proteus仿真

2026/7/12 11:44:33

本文还有配套的精品资源,点击获取 简介:基于STC89C52(或兼容51单片机)搭建的数字频率计,能准确测量1Hz到1MHz范围内的输入信号频率,并通过12864 OLED屏幕实时刷新显示结果。核心功能由标准C语言实现&…

STM32与A3910电机控制方案解析

STM32与A3910电机控制方案解析

2026/7/12 11:44:33

1. 硬件选型与核心组件解析在嵌入式电机控制领域,A3910与STM32F100ZE的组合堪称黄金搭档。A3910作为Allegro Microsystems推出的双半桥驱动器,其最大优势在于将功率MOSFET、栅极驱动和保护电路集成在单个3mm3mm QFN封装中。我在多个工业项目中实测发现&a…

MATLAB梳状导频LS信道估计仿真包:含完整流程代码与BER性能图

MATLAB梳状导频LS信道估计仿真包:含完整流程代码与BER性能图

2026/7/12 11:44:33

本文还有配套的精品资源,点击获取 简介:一套开箱即用的MATLAB信道估计实现,聚焦梳状导频结构下的最小二乘(LS)算法。主脚本Comb_polit.m完整覆盖导频插入、多径信道建模、接收信号生成、信道矩阵构建及LS解算全过程…

CentOS 7 devtoolset-11 升级:3步解决C++17编译,对比gcc 4.8.5性能提升实测

CentOS 7 devtoolset-11 升级:3步解决C++17编译,对比gcc 4.8.5性能提升实测

2026/7/12 11:44:33

CentOS 7 升级至 GCC 11:现代C项目编译性能实测与优化指南 对于仍在使用CentOS 7进行C开发的工程师来说,系统默认的GCC 4.8.5编译器已成为现代项目开发的瓶颈。本文将深入探讨如何通过devtoolset-11安全升级编译器环境,并通过实测数据展示升级…

工业负载控制:TPD2015FN与STM32F410RB的优化方案

工业负载控制:TPD2015FN与STM32F410RB的优化方案

2026/7/12 11:34:33

1. 工业负载控制的核心挑战与方案选型 在工业自动化领域,负载控制系统的可靠性直接决定了生产线的运行效率。我曾在某汽车零部件工厂亲眼目睹,由于电磁阀驱动电路设计不当,导致整条装配线每天平均停机2.3小时。这种场景下,TPD2015…

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

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

2026/7/12 0:03:42

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/12 0:03:42

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/12 0:03:42

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

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

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

2026/7/12 0:03:42

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/12 0:03:42

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/12 0:03:42

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