3.13 页面淘汰算法

2023-10-19 09:30
文章标签 算法 页面 淘汰 3.13

本文主要是介绍3.13 页面淘汰算法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在这里插入图片描述

页面置换是什么

页面置换算法广泛引用于分层的存储体系中。

之前讲cache已经提到过,cache数量有限,所以当cache的块都被占用了,要调用新的块进来的时候,就涉及页面的置换问题。在内存这一个体系,同样也面临这样的问题。

比方说页式存储中,一个程序有100个页,但是内存可以分配给它的页是非常有限的,比如说只有三个页。这时候就不可避免在程序运行过程中,我们要把一些不用的页调出来,把要用到的页调进去。这要依据一定的算法来进行识别哪些页淘汰是比较好的,这就涉及到页面的置换(淘汰)算法。

页面置换算法有哪些

页面置换算法具有典型代表性的有这么几种。

最优算法

理论层面上的算法。
它是在整个事情发生之后,也就是我们已经知道访问的页面序列是怎样的,根据页面序列分析算出什么时间点淘汰什么页面能够取得最高的效率性能。
根据不同的实际场景,最优算法肯定能得出不同的解决方案,没有普遍的规律。
在实际访问中往往没办法了解整体的页面序列,比如涉及到分支,那就会根据条件进行判断,我们就不知道下一个页面应该访问哪一个,整个完整序列是排不出来的。
所以最优算法在实际是无法直接应用的。
它的应用场景是把最优的写出来,再和其他的算法方案进行对比。看其他方案和最优相比差距有多大

随机算法

随机淘汰一个,性能不稳定。考试一般不会考。

先进先出算法

要淘汰页面的时候,就看哪些页面是最先进入到内存的,那就先淘汰什么。

先进先出有可能造成“抖动”

“抖动”:我分配给你更多的资源,我希望你把这个事情做得更加好一些。结果不但没有出现正面的效果,反而让效率降低了。

在置换算法的表现是:
我在内存里给你分配3个页面,原本页面的缺页假设是9次。然后我给你分配4个页面,资源多了。这时候你的缺页达到了11个甚至14个(具体可以看下方例子)。造成结果更坏了。这就会导致该不该增加资源分析起来更加复杂。

最近最少使用

根据局部性原理,刚刚被访问过的页面很可能马上就会被访问到。所以不会被淘汰。

不会“抖动”,也就是分配的资源越多,表现的越好。

先进先出的“抖动”现象

在这里插入图片描述

其中列是要访问的程序页

在这里插入图片描述

其中行是内存的页

在这里插入图片描述

步骤解读

先看上面3页内存的情况

  1. 首先访问第一个编号为4的程序页,这时候内存没有这个程序页,那么就会调入到内存,并且产生一次缺页(内存里没有)
  2. 编号为3的同理,产生一次缺页。
  3. 编号为2的同理,产生一次缺页。
  4. 访问到编号为1的时候,这时候内存里存储着4,3,2这3个页。由于4号页最新进入内存,于是被淘汰了。编号为1的就可以被调入到内存。由于此次内存是没有1号的页,所以还是缺页。
  5. 访问到编号为4的时候,同理淘汰3号页,调入4号页,并且还是缺页。
  6. 以此类推,缺页次数达到9次。

同样的读取状态,看下4页内存的情况,缺页次数会达到10次,也就是造成了“抖动”的现象。

练习题

在这里插入图片描述

分析
  1. 前面5,0,1对于两种算法是一样的。因为大家都会产生缺页(内存里没有),而且不涉及淘汰的问题。
  2. 到达2号页时,由于内存已经存了【5,0,1】且没有存储2,所以就要淘汰了。那么先进先出(FIFO)就会淘汰最先进入的5,最近最少(LRU)就会淘汰最远使用的5。
  3. 到达0号页时,内存此时存的是【0,1,2】。处于命中状态。
  4. 到达3号页时,内存此时存的是【0,1,2】。由于没有3号,因此要淘汰一个页。那么先进先出(FIFO)就会淘汰最先进入的0,最近最少(LRU)就会淘汰最远使用的1。

为什么最远使用的是1呢?

因为内存此时存的是【0,1,2】,其中0是刚刚访问过的,属于最近的,不能被淘汰。那么接下来就按顺序就剩【1,2】,那么最远的就是1。

  1. 后面的均同理。此处我整理访问的状况
访问的页FIFO:淘汰前的存储FIFO的淘汰FIFO缺页累计LRU:淘汰前的存储LRU的淘汰LRU缺页累计
5【】无需淘汰1【】无需淘汰1
0【5】无需淘汰2【5】无需淘汰2
1【5,0】无需淘汰3【5,0】无需淘汰3
2【5,0,1】54【5,0,1】54
0【0,1,2】命中了4【0,1,2】命中了4
3【0,1,2】05【0,1,2】15
0【1,2,3】16【0,2,3】命中了5
4【2,3,0】27【0,2,3】26
2【3,0,4】38【0,3,4】37
3【0,4,2】09【0,4,2】48
0【4,2,3】410【0,4,2】命中了8
3【2,3,0】命中了10【0,4,2】49
2【2,3,0】命中了10【0,2,3】命中了9
1【2,3,0】211【0,2,3】010
2【3,0,1】312【2,3,1】命中了10
0【0,1,2】命中了12【2,3,1】311
1【0,1,2】命中了12【2,1,0】命中了11
5【0,1,2】013【2,1,0】212
0【1,2,5】114【1,0,5】命中了12
1【2,5,0】215【1,0,5】命中了12

这篇关于3.13 页面淘汰算法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/238913

相关文章

使用雪花算法产生id导致前端精度缺失问题解决方案

《使用雪花算法产生id导致前端精度缺失问题解决方案》雪花算法由Twitter提出,设计目的是生成唯一的、递增的ID,下面:本文主要介绍使用雪花算法产生id导致前端精度缺失问题的解决方案,文中通过代... 目录一、问题根源二、解决方案1. 全局配置Jackson序列化规则2. 实体类必须使用Long封装类3.

Python Selenium动态渲染页面和抓取的使用指南

《PythonSelenium动态渲染页面和抓取的使用指南》在Web数据采集领域,动态渲染页面已成为现代网站的主流形式,本文将从技术原理,环境配置,核心功能系统讲解Selenium在Python动态... 目录一、Selenium技术架构解析二、环境搭建与基础配置1. 组件安装2. 驱动配置3. 基础操作模

C#实现查找并删除PDF中的空白页面

《C#实现查找并删除PDF中的空白页面》PDF文件中的空白页并不少见,因为它们有可能是作者有意留下的,也有可能是在处理文档时不小心添加的,下面我们来看看如何使用Spire.PDFfor.NET通过C#... 目录安装 Spire.PDF for .NETC# 查找并删除 PDF 文档中的空白页C# 添加与删

Springboot实现推荐系统的协同过滤算法

《Springboot实现推荐系统的协同过滤算法》协同过滤算法是一种在推荐系统中广泛使用的算法,用于预测用户对物品(如商品、电影、音乐等)的偏好,从而实现个性化推荐,下面给大家介绍Springboot... 目录前言基本原理 算法分类 计算方法应用场景 代码实现 前言协同过滤算法(Collaborativ

解决Maven项目报错:failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.13.0的问题

《解决Maven项目报错:failedtoexecutegoalorg.apache.maven.plugins:maven-compiler-plugin:3.13.0的问题》这篇文章主要介... 目录Maven项目报错:failed to execute goal org.apache.maven.pl

openCV中KNN算法的实现

《openCV中KNN算法的实现》KNN算法是一种简单且常用的分类算法,本文主要介绍了openCV中KNN算法的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的... 目录KNN算法流程使用OpenCV实现KNNOpenCV 是一个开源的跨平台计算机视觉库,它提供了各

springboot+dubbo实现时间轮算法

《springboot+dubbo实现时间轮算法》时间轮是一种高效利用线程资源进行批量化调度的算法,本文主要介绍了springboot+dubbo实现时间轮算法,文中通过示例代码介绍的非常详细,对大家... 目录前言一、参数说明二、具体实现1、HashedwheelTimer2、createWheel3、n

SpringBoot实现MD5加盐算法的示例代码

《SpringBoot实现MD5加盐算法的示例代码》加盐算法是一种用于增强密码安全性的技术,本文主要介绍了SpringBoot实现MD5加盐算法的示例代码,文中通过示例代码介绍的非常详细,对大家的学习... 目录一、什么是加盐算法二、如何实现加盐算法2.1 加盐算法代码实现2.2 注册页面中进行密码加盐2.

Java时间轮调度算法的代码实现

《Java时间轮调度算法的代码实现》时间轮是一种高效的定时调度算法,主要用于管理延时任务或周期性任务,它通过一个环形数组(时间轮)和指针来实现,将大量定时任务分摊到固定的时间槽中,极大地降低了时间复杂... 目录1、简述2、时间轮的原理3. 时间轮的实现步骤3.1 定义时间槽3.2 定义时间轮3.3 使用时

Android WebView无法加载H5页面的常见问题和解决方法

《AndroidWebView无法加载H5页面的常见问题和解决方法》AndroidWebView是一种视图组件,使得Android应用能够显示网页内容,它基于Chromium,具备现代浏览器的许多功... 目录1. WebView 简介2. 常见问题3. 网络权限设置4. 启用 JavaScript5. D