操作系统中四种页面置换算法

一、四种页面置换算法解释

1. 先进先出(FIFO)算法:将最早进入内存的页面替换出去。
2. 最近最少使用(LRU)算法:将最近最少被访问的页面替换出去。
3. 最不常用(LFU)算法:将最不经常被访问的页面替换出去。
4. 时钟置换算法:通过一个指针按照顺时针方向遍历页面,当需要替换页面时,替换指针指向的页面,并将该页面的访问位清零。
 

二、举例

(1)FIFO算法

假设操作系统中有一个物理页面框(内存块)的数量是3,现在有一个进程需要访问5个页面,分别是A、B、C、D、E。初始时内存中没有任何页面,按照FIFO算法的置换规则,当内存不够时需要置换页面。

1. 首先,进程访问页面A,将页面A加载到内存中。
内存状态:A

2. 进程访问页面B,将页面B加载到内存中。
内存状态:A, B

3. 进程访问页面C,将页面C加载到内存中。
内存状态:A, B, C

4. 进程访问页面D,此时内存已经满了,需要进行页面置换。根据FIFO算法,最早进入内存的页面A将被替换出去,页面D加载到内存中。
内存状态:D, B, C

5. 进程访问页面E,此时内存已经满了,需要进行页面置换。根据FIFO算法,最早进入内存的页面B将被替换出去,页面E加载到内存中。
内存状态:D, E, C

通过以上步骤,我们可以看到FIFO算法是按照页面进入内存的顺序进行置换的。
 

(2)LRU算法

假设操作系统中有一个物理页面框(内存块)的数量是3,现在有一个进程需要访问7个页面,分别是A、B、C、D、E、A、B。初始时内存中没有任何页面,按照LRU算法的置换规则,当内存不够时需要置换页面。

1. 首先,进程访问页面A,将页面A加载到内存中。
内存状态:A

2. 进程访问页面B,将页面B加载到内存中。
内存状态:A, B

3. 进程访问页面C,将页面C加载到内存中。
内存状态:A, B, C

4. 进程访问页面D,此时内存已经满了,需要进行页面置换。根据LRU算法,最近最少被访问的页面A将被替换出去,页面D加载到内存中。
内存状态:D, B, C

5. 进程访问页面E,将页面E加载到内存中。
内存状态:D, B, E

6. 进程再次访问页面A,由于页面A已经在内存中,将其移到最近访问的位置。
内存状态:D, B, A

7. 进程再次访问页面B,由于页面B已经在内存中,将其移到最近访问的位置。
内存状态:D, A, B

通过以上步骤,我们可以看到LRU算法是根据页面最近被访问的时间进行置换的。
 

(3)LFU算法

假设操作系统中有一个物理页面框(内存块)的数量是3,现在有一个进程需要访问7个页面,分别是A、B、C、D、A、B、C。初始时内存中没有任何页面,按照LFU算法的置换规则,当内存不够时需要置换页面。

1. 首先,进程访问页面A,将页面A加载到内存中。
内存状态:A (访问次数:1)

2. 进程访问页面B,将页面B加载到内存中。
内存状态:A, B (访问次数:1)

3. 进程访问页面C,将页面C加载到内存中。
内存状态:A, B, C (访问次数:1)

4. 进程访问页面D,此时内存已经满了,需要进行页面置换。根据LFU算法,最不常用的页面A将被替换出去,页面D加载到内存中。
内存状态:D, B, C (访问次数:1)

5. 进程再次访问页面A,将页面A加载到内存中。
内存状态:D, B, C (访问次数:2)

6. 进程再次访问页面B,将页面B加载到内存中。
内存状态:D, B, C (访问次数:2)

7. 进程再次访问页面C,将页面C加载到内存中。
内存状态:D, B, C (访问次数:2)

通过以上步骤,我们可以看到LFU算法是根据页面被访问的频率进行置换的。在LFU算法中,会优先替换访问次数最少的页面。
 

(4)Clock算法

时钟置换算法(Clock算法)是一种页面置换算法,它结合了FIFO算法和LRU算法的特点。下面通过一个示例来说明时钟置换算法的工作过程:

假设操作系统中有一个物理页面框(内存块)的数量是3,现在有一个进程需要访问7个页面,分别是A、B、C、D、E、A、B。初始时内存中没有任何页面,按照时钟置换算法的置换规则,当内存不够时需要置换页面。

1. 首先,进程访问页面A,将页面A加载到内存中。
内存状态:A

2. 进程访问页面B,将页面B加载到内存中。
内存状态:A, B

3. 进程访问页面C,将页面C加载到内存中。
内存状态:A, B, C

4. 进程访问页面D,此时内存已经满了,需要进行页面置换。此时使用一个类似于时钟的指针指向内存中的页面,如果指向的页面被访问过,则将其访问位清零,并移动指针;如果指向的页面未被访问过,则替换该页面。根据这个规则,指针指向页面A,但A已经被访问过,将其访问位清零并移动指针;指针指向页面B,B也被访问过,将其访问位清零并移动指针;指针指向页面C,C也被访问过,将其访问位清零并移动指针;指针指向页面A,A未被访问过,将A替换为页面D。
内存状态:D, B, C

5. 进程访问页面E,将页面E加载到内存中。
内存状态:D, B, E

6. 进程再次访问页面A,将页面A加载到内存中。
内存状态:D, B, A

7. 进程再次访问页面B,将页面B加载到内存中。
内存状态:D, B, A

通过以上步骤,我们可以看到时钟置换算法是根据页面的访问位来判断页面是否被访问过,从而进行页面置换的。
 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/583264.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

银河麒麟V10 ARM64 离线安装 新版Docker

查询当前发行版本 nkvers下载最新版本 卸载旧依赖 卸载已经安装的老版本 yum remove docker \containerd.io \docker-runc \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-engine \docker-compo…

【数据结构7-1-查找-线性-二分法-二叉树-哈希表】

目录 1 查找基本概念2 线性表的查找2.1 顺序查找2.2 二分法查找2.3 分块查找 3 树表的查询3.1 二叉排序树3.1.1 定义3.1.2 二叉树的建立、遍历、查找、增加、删除:3.1.3 代码实现: 3.2 平衡二叉树3.2.1 平横因子3.2.2 不平横树的调整-左旋3.2.3 不平横树…

c++高级篇(三) ——Linux下IO多路复用之poll模型

poll模型 前言 poll模型与select的实现原理相近,所以绝大数的原理其实可以参考select,我们这里对二者的相同点不做过多探究,如果有需要可以去看一下博主的上一篇文章: c高级篇(二) ——Linux下IO多路复用之select模型 这里我们只…

【Jenkins】持续集成与交付 (三):有关报错解决(Jenkins (2.387.3) or higher required)

🟣【Jenkins】持续集成与交付 (三):有关报错解决Jenkins (2.387.3) or higher required 一、Jenkins主页报错二、安装Jenkins插件报错三、解决过程(解压替换jenkins.war)四、重新访问登录💖The Begin💖点点关注,收藏不迷路💖 一、Jenkins主页报错 New version …

51单片机两个中断及中断嵌套

文章目录 前言一、中断嵌套是什么?二、两个同级别中断2.1 中断运行关系2.2 测试程序 三、两个不同级别中断实现中断嵌套3.1 中断运行关系3.2 测试程序 总结 前言 提示:这里可以添加本文要记录的大概内容: 课程需要: 提示&#x…

【电路笔记】-RC振荡器电路

RC振荡器电路 文章目录 RC振荡器电路1、概述2、RC 相移网络3、基本RC振荡器电路4、运算放大器RC振荡器5、运算放大器相位滞后RC振荡器电路6、RC振荡器示例11、概述 RC 振荡器使用放大器和 RC 反馈网络的组合,由于级之间的相移而产生输出振荡。 当单级晶体管放大器作为共发射…

疯狂的爬虫案例(2)文末附源码

软件版本号: python --version Python 3.8.0 pip show selenium Version: 4.20.0 chromedriver.exe -version 109.0.5414.74 主题:爬取10条动态网页内容(电影票房) 1.根据xpath获取网页节点(CtrlF) 2.…

spring高级篇(五)

1、参数解析器 前篇提到过,参数解析器是HandlerAdapters中的组件,用于解析controller层方法中加了注解的参数信息。 有一个controller,方法的参数加上了各种注解: public class Controller {public void test(RequestParam("…

Python-100-Days: Day06 Functions and Modules

函数的作用 编程大师Martin Fowler先生曾经说过:“代码有很多种坏味道,重复是最坏的一种!”,要写出高质量的代码首先要解决的就是重复代码的问题。可以将特定的功能封装到一个称之为“函数”的功能模块中,在需要的时候…

MyBatis(环境配置+基本CRUD)

文章目录 1.基本介绍1.为什么需要MyBatis?2.MyBatis介绍3.MyBatis工作示意图4.MyBatis的优势 2.快速入门文件目录1.需求分析2.数据库表设计3.父子模块环境配置1.创建maven父项目2.删除父项目的src目录3.pom.xml文件文件解释 4.创建子模块1.新建一个Module2.创建一个…

面向对象编程三大特征:封装、继承、多态

封装、继承、多态 1. 封装 1.1 介绍 封装(encapsulation)就是把抽象出的数据 [属性] 和对数据的操作 [方法] 封装在一起,数据被保护在内部,程序的其它部分只有通过被授权的操作 [方法] ,才能对数据进行操作。 1.2 封装的理解和好处 1) 隐藏实现细节:方法(连接数据库)<…

UE Snap03 启动参数设置

UE Snap03 启动参数设置 UE打包后传入自定义参数及解析。 void UGameInstance::StartGameInstance() {Super::StartGameInstance();UE_LOG(LogTemp, Warning, TEXT("--StartGameInstance--"));FString param;FParse::Value(FCommandLine::Get(), TEXT("-UserN…

Python | Leetcode Python题解之第50题Pow(x,n)

题目&#xff1a; 题解&#xff1a; class Solution:def myPow(self, x: float, n: int) -> float:def quickMul(N):ans 1.0# 贡献的初始值为 xx_contribute x# 在对 N 进行二进制拆分的同时计算答案while N > 0:if N % 2 1:# 如果 N 二进制表示的最低位为 1&#xf…

新手一文掌握 ea怎么注册?ea官网注册账号的详细教程

新手一文掌握 ea怎么注册&#xff1f;ea官网注册账号的详细教程 知名游戏平台EA平台&#xff0c;说到这个各位游戏玩家肯定不会陌生是全球知名的互动娱乐软件公司美国艺电&#xff08;Electronic Arts&#xff09;旗下的游戏平台。该平台主营电子游戏的开发、出版和销售业务&…

万兆以太网MAC设计(10)UDP协议解析以及模块设计

文章目录 前言&#xff1a;UDP报文格式一、UDP模块设计二、仿真总结&#xff1a; 前言&#xff1a;UDP报文格式 参考&#xff1a;https://sunyunqiang.com/blog/udp_protocol/ UDP (User Datagram Protocol) 是常用的传输层协议之一, 它向应用层提供无连接, 不可靠, 尽最大努力…

GitHub Copilot申请和使用

GitHub Copilot申请和使用 文章目录 前言一、申请二、使用总结 前言 之前已经成功进行了Github学生认证&#xff0c;今天邮件通知之前的学生认证已经通过。那么就去进行GitHub Copilot申请和使用。 前面准备&#xff1a;Github学生认证 一、申请 进入github的settings&#x…

上位机图像处理和嵌入式模块部署(树莓派4b开机界面程序自启动)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 前面我们学习了如何在树莓派4b上面开发qt&#xff0c;也学习了如何用/etc/rc.local启动控制台程序&#xff0c;那今天我们继续学习一下如何利用树莓…

selenium 4.x 验证码处理(python)

验证码处理 一般情况公司如果涉及web自动化测试需要对验证码进行处理的方式一般有一下几种&#xff1a; 关闭验证码功能&#xff08;开发处理&#xff09;设置万能验证码&#xff08;开发处理&#xff09;使用智能识别库进行验证 通过第三方打码平台识别验证码 1. 跳过验证功…

视频转换过程中的几个基本注意事项

1.迟滞 海康的摄像头迟滞大概会到1秒的量级&#xff0c;一般如果你自己搭个框架做转发&#xff0c;迟滞有时会达到20秒&#xff0c;这是为什么呢&#xff1f;请看例程&#xff1a; class VideoCamera(object):def __init__(self):# 打开系统默认摄像头self.cap cv2.VideoCaptu…

看看大家都在做哪些有趣的项目

最近发现两个比较有趣的项目 1.中国独立开发者项目列表 该项目旨在聚合中国独立开发者的项目&#xff0c;分享开发者们正在进行的工作&#xff0c;项目列表包括网站或 App&#xff0c;并且正在持续更新中 项目分为程序员版和主版面&#xff1a; 程序员版&#xff1a;用户是程…
最新文章