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

news/2024/11/20 10:45:39/

目录

一、定义

二、分类

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.ppmy.cn/news/1168733.html

相关文章

国内有哪些做得好的企业协同办公软件

在当今信息化时代,企业协同办公软件成为了提升企业效率和推动协作的重要工具。国内市场涌现出许多优秀的企业协同办公软件,为企业提供了高效、便捷的协同办公解决方案。在本文中,我们将向大家介绍3款在国内好评如潮的企业协同办公软件&#x…

Bag of Tricks for Efficient Text Classification(FastText)

主要的有点就是快,用途就是用于文本分类,模型结构如上,主要是通过embedding将文本转换成向量,然后进行mean-pooling,然后输入到hidden隐向量中,通过softmax输出多分类,损失函数是对数似然损失函…

将语义分割的标注mask转为目标检测的bbox

1. 语义分割标签 1.1 labelme工具 语义分割的标签是利用labelme工具进行标注的,标注的样式如下: 1.2 语义分割的标签样式 2. 转换语义分割的标注到目标检测的bbox 实现步骤 (1) 利用标注的json文件生成mask图片(2) 在mask图片中找到目标的bbox矩形框的左上角点和右下角点(…

062:mapboxGL通过jumpTo方式跳转到某位置

第062个 点击查看专栏目录 本示例的目的是介绍演示如何在vue+mapbox中通过jumpTo方式跳转到某位置。 直接复制下面的 vue+mapbox源代码,操作2分钟即可运行实现效果 文章目录 示例效果配置方式示例源代码(共122行)相关API参考:专栏目标示例效果 配置方式 1)查看基础设置…

[C++]:2初识C++(auto) + 类和对象上:

[TOC](初识C(auto) 类和对象上) 一.初始C 1.auto关键字:(C11) 1.作为一个变量的类型给这个类型初始化,auto自动识别初始化这个变量值的类型,为auto类型的这个变量开辟一个合适的空间。 补充: 1.typeid(变量名).name—>可以打…

文件上传漏洞靶场前十关

pass1: 只能上传照片 用burp抓包改一下数据包试试: 上传成功 菜刀getshell Pass2: 寄 Png可以,抓包: 跟pass1一样阿 Pass3: 又寄 这里用抓包改数据包,发现仍然不可以 说明后端还有对文件名后缀…

STM32F4X之GPIO

一、GPIO概述 主控芯片信息如下: 主频:168MHZ内核:ARM-M4FLASH:1MSRAM:192KB引脚:100GPIO:82电压:1.8~3.6V 1.1GPIO概念及其作用 GPIO概念:通用输入输出(General Purpose Input Output),主要作用…

图论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 递归判断相邻两点的颜色是否一致…