第三章 内存管理 十三、页面置换算法(最佳置换算法、先进先出置换算法、最近最久未使用置换算法、时钟置换算法、改进型的时钟置换算法)

news2024/11/15 18:38:07

目录

一、定义

二、分类

1、最佳置换算法 / 最远置换算法(OPT,Optimal):

1.1、定义:

1.2、例子:

2、先进先出置换算法(FIFO):

2.1、定义:

2.2、实现方法:

2.3、例子:

3、最近最久未使用置换算法(LRU,least recently used):

3.1、定义:

3.2、实现方法:

3.3、例子:

4、时钟置换算法是一种性能和开销较均衡的算法,又称CLOCK算法,或最近未用算法(NRU,NotRecently Used)

4.1、简单的CLOCK算法实现方法:

4.2、例子:

5、改进型的时钟置换算法

5.1、实现方式

三、总结


一、定义

页面置换算法是指在操作系统中,当需要调入一个页面时,若所有的物理页面已被占用,则需要选择一个页面进行置换。页面置换算法是解决内存不足的问题,从而实现更多程序同时运行的重要手段之一。

二、分类

1、最佳置换算法 / 最远置换算法(OPT,Optimal):

1.1、定义:

每次选择淘汰的页面将是以后永不使用,或者在最长时间内不再被访问的页面,这样可以保证最低的缺页率

1.2、例子:

(1)在上例中,首先依次访问页面,并将页面放入内存块中,直到内存块装满。

(2)装满后,接下来要访问的是2号页面;

(3)根据OPT算法规则,我们依次往后查看要访问的页面,发现在0,1,7三个页面中,页面7是最远会被访问的。

(4)所以,我们就会将内存块中的7页面淘汰,替换为页面2装入。

(5)依此类推,整个过程缺页中断发生了9次,页面置换发生了6次.(前3次没有发生页面置换

缺页率:缺页次数 / 总的访问次数

注意:缺页时未必发生页面置换。若还有可用的空闲内存块,就不用进行页面置换。

2、先进先出置换算法(FIFO):

2.1、定义:

每次选择淘汰的页面是最早进入内存的页面

2.2、实现方法:

把调入内存的页面根据调入的先后顺序排成一个队列,需要换出页面时选择队头页面即可。

队列的最大长度取决于系统为进程分配了多少个内存块。

2.3、例子:

(1)在上例中,首先依次访问页面,并将页面放入内存块中,直到内存块装满。

(2)下一个访问的是页面0,此时就要把最早进来的页面3淘汰。

(3)替换为页面0.

3、最近最久未使用置换算法(LRU,least recently used):

3.1、定义:

每次淘汰的页面是最近最久未使用的页面

3.2、实现方法:

赋予每个页面对应的页表项中,用访问字段记录该页面自上次被访问以来所经历的时间t。

当需要淘汰一个页面时,选择现有页面中t值最大的,即最近最久未使用的页面。

3.3、例子:

(1)在上例中,首先依次访问页面,并将页面放入内存块中,直到内存块装满。

(2)一直访问,直到访问到页面3时。

(3)在此之前,我们依次访问过了7,2,1,8,所以7是最久没有被访问的。

(4)所以将7替换为3.

4、时钟置换算法是一种性能和开销较均衡的算法,又称CLOCK算法,或最近未用算法(NRU,NotRecently Used)

4.1、简单的CLOCK算法实现方法:
  1. 为每个页面设置一个访问位,再将内存中的页面都通过链接指针链接成一个循环队列
  2. 当某页被访问时,其访问位置为1。当需要淘汰一个页面时,只需检查页的访问位。
  3. 如果是0,就选择该页换出;如果是1,则将它置为0,暂不换出,继续检查下一个页面,若第一轮扫描中所有页面都是1,则将这些页面的访问位依次置为O后,再进行第二轮扫描(第二轮扫描中一定会有访问位为0的页面,因此简单的CLOCK算法选择一个淘汰页面最多会经过两轮扫描)
4.2、例子:

(1)若我们有如上例子,且有5个内存块,在依次访问了1,3,4,2,5后,我们会得到如下视图

        

(2)此时这几个内存块都被访问过,所以它们的访问位都为1.

(3)我们从1号页面依次扫描,而且要将经过的访问位为1的页面的访问位改为0,并且找到访问位为0的页面。

(4)在上图中,我们找了一圈也没有找到访问位为0的页面,而且我们将它全部重置为0了。

(5)然后我们进行第二次扫描,发现1号页为0,所以淘汰它,并且替换为6号页

(6)接下来访问3,4,7;

因为有3号页了,所以指针不动,只是将3号页的访问位改为1;

4号页同样如此。

(7)然后访问7,此时转动指针,将3,4的访问位改为0;而且找到了2号页的访问位为0;所以将7号页存到下方。

5、改进型的时钟置换算法

5.1、实现方式

(1)和简单时钟置换算法相似,其实就是将找0,改为了找(0,0);

(2)只不过第一轮并不会相简单的那样将1改为0;

(3)而是,如果第一轮没有找到(0,0),就会将(0,1)看作(0,0)进行淘汰。

(4)在第二轮的查找中,会将访问位重置为0

(5)找到为(0,0)的页淘汰

(6)若是如下例子

(7)第一轮扫描(0,0),发现都不是。

(8)第二轮扫描(0,1),且被扫描过的页面的访问位都会被置为0

(9)第三轮扫描(0,0),没找到,不改变什么

(10)第四轮扫描,将(0,1)当作(0,0)淘汰

三、总结

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Pillow库的内涵】01/3 进行基本图像操作

一、说明 Pillow 具有被 Python 社区广泛使用的优势,并且它不像其他一些图像处理库那样具有陡峭的学习曲线。应用PIL库的Image对象,益处很多,首先它可以处理网上URL文件,其次,图片可以方面转化成int32、64或float类型&…

蓝桥杯 (猜生日、棋盘放麦子、MP3储存 C++)

思路&#xff1a; 1、用循环。 2、满足条件&#xff0c;能整除2012、3、12且month等于6、day<30 #include<iostream> using namespace std; int main() {for (int i 19000101; i < 20120312; i){int month i / 100 % 100;int day i % 100;if (i % 2012 0 &…

互联网Java工程师面试题·Java 面试篇·第二弹

目录 15、什么是不可变对象&#xff08;immutable object&#xff09;&#xff1f;Java 中怎么创建一个不可变对象&#xff1f; 16、我们能创建一个包含可变对象的不可变对象吗&#xff1f; 17、Java 中应该使用什么数据类型来代表价格&#xff1f; 18、怎么将 byte 转换为 Str…

图论03-【无权无向】-图的深度优先遍历-路径问题/检测环/二分图

文章目录 1. 代码仓库2. 单源路径2.1 思路2.2 主要代码 3. 所有点对路径3.1 思路3.2 主要代码 4. 路径问题的优化-提前结束递归4.1 思路4.2 主要代码 5. 检测环5.1 思路5.2 主要代码 5. 二分图5.1 思路5.2 主要代码5.2.1 遍历每个联通分量5.2.2 递归判断相邻两点的颜色是否一致…

192:最近的系列思考2/犬岛APP 的使用理解

最近的一些契机&#xff0c;导致一些思考&#xff1a; ​ * 与产品经理意志相悖的产品* 与最初的设计定位不匹配的产品社交大牛的APP一上线就引来诸多关注&#xff0c;作为总设计的纯大大非常简明扼要的说明了这个APP的定位&#xff1a;给内涵&#xff08;含&#xff09;有趣的…

图论04-【无权无向】-图的广度优先遍历

文章目录 1. 代码仓库2. 广度优先遍历图解3.主要代码4. 完整代码 1. 代码仓库 https://github.com/Chufeng-Jiang/Graph-Theory 2. 广度优先遍历图解 3.主要代码 原点入队列原点出队列的同时&#xff0c;将与其相邻的顶点全部入队列下一个顶点出队列出队列的同时&#xff0c;将…

布尔盲注知识点

概念&#xff1a;布尔盲注一般适用于页面没有回显字段(不支持联合查询)&#xff0c;且web页面返回True 或者 false&#xff0c;构造SQL语句&#xff0c;利用and&#xff0c;or等关键字来其后的语句 true 、 false使web页面返回true或者false&#xff0c;从而达到注入的目的来获…

Python---练习:while循环案例:猜数字

需求&#xff1a; 计算机从1 ~ 10之间随机生成一个数字&#xff0c;然后提示输入数字&#xff0c;如果我们输入的数字与随机数相等&#xff0c;则提示恭喜你&#xff0c;答对了。如果输入的数字比随机数大&#xff0c;则提示&#xff0c;猜大了。反之&#xff0c;则提示猜小了…

晶振与晶体

文章目录 基础知识无源晶振 & 有源晶振 博文链接 基础知识 无源晶振 & 有源晶振 博文链接 晶振原理解析

在Vue中使用Mock.js虚拟接口数据实例详解

在Vue项目中使用Mock.js可以方便地模拟接口数据&#xff0c;用于前端开发和测试。Mock.js是一个生成随机数据的库&#xff0c;可以帮助我们快速构建虚拟接口数据。在本文中&#xff0c;我将通过一个实例来详细讲解在Vue中使用Mock.js虚拟接口数据的方法。 首先&#xff0c;我们…

H5前端开发——事件处理

H5前端开发——事件处理 在H5前端开发中,事件处理是非常重要的一部分。通过事件处理,可以实现对用户操作的响应和交互。以下是几种常见的事件处理方式: HTML事件处理: 在HTML标签上直接设定事件处理函数,如<button onclick="myFunction()">点击我</bu…

【每周一测】Java阶段三第二周学习

目录 1、以下哪个过程可以创建Class对象? 2、下列switch代码段输出结果是&#xff08;&#xff09; 3、redis的数据类型 4、⭐以下关于Servlet生命周期说法错误的是&#xff08; &#xff09; 5、⭐下面有关SPRING的事务传播特性&#xff0c;说法错误的是&#xff1f; 6…

自然语言处理---huggingface平台使用指南

1 huggingface介绍 Huggingface总部位于纽约&#xff0c;是一家专注于自然语言处理、人工智能和分布式系统的创业公司。他们所提供的聊天机器人技术一直颇受欢迎&#xff0c;但更出名的是他们在NLP开源社区上的贡献。Huggingface一直致力于自然语言处理NLP技术的平民化(democr…

数据结构 MapSet(搜索)

数据结构 Map&Set(搜索) 文章目录 数据结构 Map&Set(搜索)1. 搜索树1.1 概念1.2 初始构建1.3 操作-插入1.4 操作-查找1.5 操作-删除1.6 性能分析 2. 搜索介绍2.1 概念及场景2.2 模型 3. Map的使用3.1 关于Map的说明3.2 关于Map.Entry<K, V>的说明3.3 Map的常用方…

Hadoop3教程(三十一):(生产调优篇)异构存储

文章目录 &#xff08;157&#xff09;异构存储概述概述异构存储的shell操作 &#xff08;158&#xff09;异构存储案例实操参考文献 &#xff08;157&#xff09;异构存储概述 概述 异构存储&#xff0c;也叫做冷热数据分离。其中&#xff0c;经常使用的数据被叫做是热数据&…

寻找Windows API 原始字节(x64dbg)

首先我们将我们的木马移入x64dbg 第一种方法 通过命令寻找 disasm CreateRemoteThreadEx第二种方法 将调试器附加到kernelbase.dll后转到符号选项卡&#xff0c;最后&#xff0c;在搜索栏中&#xff0c;我们可以搜索CreateRemoteThreadEx函数并双击它以获取下列&#xff1a…

深度学习---神经网络基础

深度学习概述 机器学习是实现人工智能的一种途径&#xff0c;深度学习是机器学习的一个子集&#xff0c;深度学习是实现机器学习的一种方法。与机器学习算法的主要区别如下图所示&#xff1a; 传统机器学习算术依赖人工设计特征&#xff0c;并进行特征提取&#xff0c;而深度学…

java新特性流 stream01

案例描述 今天跟着黑马程序员的视频&#xff0c;完成“瑞吉外卖”项目的菜品信息管理模块的时候&#xff0c;遇到了一个比较陌生的写法 用到了Java8的新特性 stream().map((item) -> {}).collect() List<DishDto> collect records.stream().map((item) -> {DishDt…

Elasticsearch 8.9 Master节点处理请求源码

大家看可以看ElasticSearch源码&#xff1a;Rest请求与Master节点处理流程&#xff08;1&#xff09; 这个图非常好&#xff0c;下午的讲解代码在各个类和方法之间流转&#xff0c;都体现这个图上 一、Master节点处理请求的逻辑1、节点(数据节点)要和主节点进行通讯&#xff0…

H5随机短视频滑动版带打赏源码,可封装APP软件或嵌入式观看

H5随机短视频滑动版带打赏源码&#xff0c;可封装APP软件或嵌入式观看&#xff0c;网站引流必备源码&#xff01; 数据来源抖音和快手官方短视频链接&#xff0c;无任何违规内容&#xff01;可自行添加广告等等&#xff01; 手机端完美支持滑动屏幕观看&#xff08;向上或向右…