一文讲懂页面置换算法,带例题详解
目录
什么是页面置换算法?
缺页中断次数和页面置换次数
啥子是缺页?
啥子是中断?
啥子是缺页中断?
缺页中断次数
最佳置换算法OPT和先进先出置换算法FIFO
最佳置换算法OPT
算法思想
算法优点
算法缺点
例题
先进先出页面置换算法FIFO
思想
优点
缺点
例题
LRU置换算法
思想
优点
缺点
例题
Clock置换算法
简单的Clock置换算法
思想
改进型Clock置换算法
思想
什么是页面置换算法?
在进程运行的过程当中,进程所要访问的页面不再内存中,我们就需要把这个不存在的页面调入内存,但内存已经没有空闲空间了,这时候就要求系统从内存中调出一个页面,将其移入磁盘的对换区中。将哪个页面调出来,就要通过算法来确定。我们把选择换出页面的算法就叫做页面置换算法。
一个好的页面置换算法应具有较低的页面置换概率。
页面置换算法的理论目标:
- 将那些以后不再会访问的页面换出
- 把那些在较长时间内不会被访问的页面换出
缺页中断次数和页面置换次数
啥子是缺页?
缺页就是要访问的页面并不在物理内存中。
啥子是中断?
中断是指计算机在执行程序的过程中,当出现异常情况或特殊请求时,计算机停止现行程序的运行,转向对这些异常情况或特殊请求的处理,处理结束后再返回现行程序的间断处,继续执行原程序。
啥子是缺页中断?
缺页中断访问的页面已经映射到了虚拟存储空间中,但是物理内存已满,这时候CPU的内存存储单元就会发出中断。
缺页中断次数
缺页中断次数=进程的物理块数+页面置换次数
最佳置换算法OPT和先进先出置换算法FIFO
最佳置换算法是一种理论上的算法,目前该算法还无法实现,但我们可以用最佳置换算法OPT去评价其他算法。
最佳置换算法OPT
算法思想
选择的被淘汰页面是以后用不使用的,或者是在未来最长一段时间内不再被访问的页面。
算法优点
能够获得最低的缺页率
算法缺点
现在的技术无法保证某个页面能够在未来的最长时间内不被访问,所以这个算法只是理论上的,无法实践。
例题
假定系统给某进程分配了三个物理块,页面号引用串为"7,0,1,2,0,3,0,4,2,3,0,3,2,1,2,0,1,7,0,1"
步骤 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 |
页面号 | 7 | 0 | 1 | 2 | 0 | 3 | 0 | 4 | 2 | 3 | 0 | 3 | 2 | 1 | 2 | 0 | 1 | 7 | 0 | 1 |
物理块1 | 7 | 7 | 7 | 2 | 2 | 2 | 2 | 2 | 2 | 2 | 2 | 2 | 2 | 2 | 2 | 2 | 2 | 7 | 7 | 7 |
物理块2 | 0 | 0 | 0 | 0 | 0 | 0 | 4 | 4 | 4 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | |
物理块3 | 1 | 1 | 1 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
步骤1:装入页面号为7的页面
步骤2:装入页面号为0的页面
步骤3:装入页面号为1的页面
步骤4:装入页面号为2的页面,内存不够,需要置换页面,页面号7在步骤18是用到。页面号0在步骤5用到,页面1在步骤14用到,根据最佳置换算法,选择未来时间内最久不会被用到的页面,所以把页面号为7的页面调出,置换成页面号为2的页面,其余物理块内的页面不变
步骤5:要装入页面号为0的页面,内存中存在页面号为0的页面,所以无需处理
步骤6:页面号2出现在步骤9,页面号0出现在步骤7,页面1出现在步骤14,所以调出页面1,置换从页面号3
步骤7:调入的页面0存在在内存中,无需处理
步骤8:装入页面4,内存满,需要置换,页面2在步骤9,页面3在步骤10,页面0在步骤11,所以调出页面0,置换成页面4
步骤9:页面2在内存中,不置换
步骤10:页面3在内存中,不置换
步骤11:装入页面0,不再内存,需要置换;页面2出现在步骤13,页面4在后面不会出现,页面3出现在步骤12,所以调出页面4,置换为页面0
步骤12:存在,不置换
步骤13:存在,不置换
步骤14:页面2出现在步骤15,页面0出现在步骤16,页面3不出现,调出页面3,置换成页面1
步骤15:存在,不置换
步骤16:存在,不置换
步骤17:存在,不置换
步骤18:页面2不出现,页面1出现在步骤20,页面0出现在步骤19,调出页面2,置换成页面7
步骤19:存在,不置换
步骤20:存在,不置换
页面置换次数:6次;分别是步骤4、6、8、11、14、18
缺页次数:9;分别是步骤1、2、3(插入新页面3次)+页面置换6次
先进先出页面置换算法FIFO
思想
先进先出算法总是淘汰最先进入内存的页面,就是淘汰掉在内存中驻留时间最久的页面。
出发点是近期调入的页面被再次访问的概率要大于早期调入页面的概率实现简单
优点
实现较为简单
缺点
性能较差:先进先出算法所依据的条件是各个页面调入内存的时间,但是页面调入的先后顺序并不能保证页面使用频率和时间长短。
算法与实际进程的运行规律并不适应
例题
假定系统给某进程分配了三个物理块,页面号引用串为"7,0,1,2,0,3,0,4,2,3,0,3,2,1,2,0,1,7,0,1"
步骤 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 |
页面号 | 7 | 0 | 1 | 2 | 0 | 3 | 0 | 4 | 2 | 3 | 0 | 3 | 2 | 1 | 2 | 0 | 1 | 7 | 0 | 1 |
物理块1 | 7 | 7 | 7 | 2 | 2 | 2 | 2 | 4 | 4 | 4 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 7 | 7 | 7 |
物理块2 | 0 | 0 | 0 | 0 | 3 | 3 | 3 | 2 | 2 | 2 | 2 | 2 | 1 | 1 | 1 | 1 | 1 | 0 | 0 | |
物理块3 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 3 | 3 | 3 | 3 | 3 | 2 | 2 | 2 | 2 | 2 | 1 |
替换指针指向当前存在时间最长的页面
步骤1:装入页面号为7的页面,替换指针指向页面7
步骤2:装入页面号为0的页面,替换指针指向页面7
步骤3:装入页面号为1的页面,替换指针指向页面7
步骤4:装入页面号为2的页面,内存不够,需要置换页面,页面7、0、1中最早进入内存的页面是页面7,调出页面7,装入页面2,即页面7被页面2置换,替换指针指向页面0
步骤5:要装入页面号为0的页面,内存中存在页面0,无动作,替换指针指向页面0
步骤6:要装入页面号为3的页面,内存不够,需要置换页面,页面2、0、1中最早进入内存的页面是页面0,调出页面0,装入页面3,即页面0被页面3置换,替换指针指向页面1
步骤7:要装入页面号为0的页面,内存不够,需要置换页面,页面2、3、1中最早进入内存的页面是页面1,调出页面1,装入页面0,即页面1被页面0置换,替换指针指向页面2
步骤8:要装入页面号为4的页面,内存不够,需要置换页面,页面2、3、0中最早进入内存的页面是页面2,调出页面2,装入页面4,即页面2被页面4置换,替换指针指向页面3
步骤9:要装入页面号为2的页面,内存不够,需要置换页面,页面4、3、0中最早进入内存的页面是页面3,调出页面3,装入页面2,即页面3被页面2置换,替换指针指向页面0
步骤10:要装入页面号为3的页面,内存不够,需要置换页面,页面4、2、0中最早进入内存的页面是页面0,调出页面0,装入页面3,即页面0被页面3置换,替换指针指向页面4
步骤11:要装入页面号为0的页面,内存不够,需要置换页面,页面4、2、3中最早进入内存的页面是页面4,调出页面4,装入页面0,即页面4被页面0置换,替换指针指向页面2
步骤12:要装入页面号为3的页面,内存中存在页面3,无动作,替换指针指向页面2
步骤13:要装入页面号为2的页面,内存中存在页面2,无动作,替换指针指向页面2
步骤14:要装入页面号为1的页面,内存不够,需要置换页面,页面0、2、3中最早进入内存的页面是页面2,调出页面2,装入页面1,即页面2被页面1置换,替换指针指向页面3
步骤15:要装入页面号为2的页面,内存不够,需要置换页面,页面0、1、3中最早进入内存的页面是页面3,调出页面3,装入页面2,即页面3被页面2置换,替换指针指向页面0
步骤16:要装入页面号为0的页面,内存中存在页面0,无动作,替换指针指向页面0
步骤17:要装入页面号为1的页面,内存中存在页面1,无动作,替换指针指向页面0
步骤18:要装入页面号为7的页面,内存不够,需要置换页面,页面0、1、2中最早进入内存的页面是页面0,调出页面0,装入页面7,即页面0被页面7置换,替换指针指向页面1
步骤19:要装入页面号为0的页面,内存不够,需要置换页面,页面7、1、2中最早进入内存的页面是页面1,调出页面1,装入页面0,即页面1被页面0置换,替换指针指向页面2
步骤20:要装入页面号为1的页面,内存不够,需要置换页面,页面7、0、2中最早进入内存的页面是页面2,调出页面2,装入页面1,即页面2被页面1置换,替换指针指向页面7
页面置换次数:12次;分别是步骤4、6、7、8、9、10、11、14、15、18、19、20
缺页次数:15;分别是步骤1、2、3(插入新页面3次)+页面置换12次
FIFO算法,找替换指针(淘汰页面)的小窍门:看哪个页面连续出现的次数最长,连续出现次数最长的页面就是在内存中存在最久的页面,即淘汰页面。
LRU置换算法
思想
LRU算法 least recently used
最近最少使用页面置换算法
思想:每次选择内存中离当前时刻最久未使用过的页面淘汰
依据的原理是局部性原理
优点
不会出现belady现象
性能较好,接近OPT算法
缺点
1. 算法效率不高:
需要对整个页表频繁的维护
LRU算法会经常用到比较,当页面数较多是,会消耗大量时间在比较上
2. 实现要依托较多的硬件支持,实现所需成本较高
例题
页面走向“4、3、2、1、4、3、5、4、3、2、1、5”,主存容量=3,采用LRU算法进行页面淘汰
步骤 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | |
页面 | 4 | 3 | 2 | 1 | 4 | 3 | 5 | 4 | 3 | 2 | 1 | 5 | |
栈顶 | 物理块1 | 2 | 1 | 4 | 3 | 5 | 4 | 3 | 2 | 1 | 5 | ||
物理块2 | 3 | 3 | 2 | 1 | 4 | 3 | 5 | 4 | 3 | 2 | 1 | ||
栈底 | 物理块3 | 4 | 4 | 4 | 3 | 2 | 1 | 4 | 3 | 5 | 4 | 3 | 2 |
步骤1:装入页面4
步骤2:装入页面3
步骤3:装入页面2
步骤4:装入页面1,内存容量不足,依据LRU算法,内存中有三个页面2、3、4;当前最久未使用的页面是页面4,所以将页面4置换成页面1;最久未使用页面变为页面3
步骤5:装入页面4,内存容量不足,依据LRU算法,内存中有三个页面1、2、3;最久未使用的页面是页面3,所以将页面3置换成页面4;最久未使用页面变为页面2
步骤6:装入页面3,内存容量不足,依据LRU算法,内存中有三个页面4、1、2;最久未使用的页面是页面2,所以将页面2置换成页面3;最久未使用页面变为页面1
步骤7:装入页面5,内存容量不足,依据LRU算法,内存中有三个页面3、4、1;最久未使用的页面是页面1,所以将页面1置换成页面5;最久未使用页面变成页面4
步骤8:装入页面4,内存中存在页面4,当前最久未使用的页面是页面4,装入页面4后,最久未使用页面变成页面3
步骤9:装入页面3,内存中存在页面3,当前最久未使用的页面是页面3,装入页面3后,最久未使用页面变成页面5
步骤10:装入页面2,内存容量不足,依据LRU算法,内存中有三个页面3、4、5;最久未使用的页面是页面5,所以将页面5置换成页面2;最久未使用页面变成页面4
步骤11:装入页面1,内存容量不足,依据LRU算法,内存中有三个页面2、3、4;最久未使用的页面是页面4,所以将页面4置换成页面1;最久未使用页面变成页面3
步骤12:装入页面5,内存容量不足,依据LRU算法,内存中有三个页面1、2、3;最久未使用的页面是页面3,所以将页面3置换成页面5;最久未使用页面变成页面2
做题经验:页面斜着看是连续的,可以做题的时候依据该规律检查正确与否
Clock置换算法
简单的Clock置换算法
思想
当页面被访问时,页面的访问位置1;
置换算法在选择页面淘汰时,首先会检查页面的访问位,若访问位为0直接换出,若访问位为1,则给该页的访问位重新置1,再给该页面一次存在的机会;
之后按照FIFO页面置换算法去检查下个页面,是否需要淘汰
如果检查到最后一个页面,最后一个页面的访问位是1,则将该页面访问位置0,再返回到队首检查第一个页面,以此往复。
改进型Clock置换算法
思想
改进型时钟算法就是在简单的时钟算法基础上加上了置换代价
除了访问位还多了一个修改位
有访问位A和修改位M可以组成四周类型的页面
1类:(A=0,M=0)表示该页面最近未被访问也没有被修改,是最佳淘汰页
2类:(A=0,M=1)表示该页面最近未被访问,但是被修改过了,并不是很好的淘汰页
3类:(A=1,M=0)表示该页面最近被访问过,但是没被修改过,该页面有可能再被访问
4类:(A=1,M=1)表示该页面最近被访问过且被修改过,该页面很有可能被再次访问
一文讲懂页面置换算法,带例题详解相关推荐
- 一文看懂页面置换算法
页面置换算法分为两类 1.局部页面置换算法 最优页面置换算法(OPT.optimal) 先进先出算法(FIFO) 最近最久未使用算法(LRU,Least Recently Used) 时钟页面置换算法 ...
- 一文搞懂线程池原理——Executor框架详解
文章目录 1 使用线程池的好处 2 Executor 框架 2.1 Executor 框架结构 2.2 Executor 框架使用示意图 2.3 Executor 框架成员 2.3.1 Executo ...
- 普通、带修(可持久化)莫队算法入门例题详解
目录 [莫队算法] [普通莫队] [代码] [题面] [带修莫队] [代码] [题面] [总结] [莫队算法] 参考大米饼的莫队算法 ,目前的题型概括为三种:普通莫队,带修莫队以及树形莫队. [普通莫 ...
- 一文读懂XPath基本语法_XPath语法详解_XPath教程
因为最近在学习与整理有关python爬虫的文章,连带遇到XPath的使用,就顺便一起整理出来. XPath与自动化的关系 XPath是一门在XML文档中查找信息的语言,可用来在XML文档中对元素和属性 ...
- 一文读懂RTSP协议-【RTSP协议详解】
RTSP简介 RTSP(Real Time Streaming Protocol)是由Real Network和Netscape共同提出的如何有效地在IP网络上传输流媒体数据的应用层协议.RTSP对流 ...
- 【一文读懂】Spring Bean生命周期详解
Spring Bean的生命周期 1 容器初始化 BeanFactory容器初始化:包含容器创建,资源定位,载入,注册. ApplicationContext容器初始化:包含容器创建,资源定位,载入, ...
- 一文读懂原型链 prototype和__proto__详解
目录 1.原型对象 prototype 2.prototype 和 __proto__ 3.原型链 4.补充 5.原型链总结 1.原型对象 prototype 我们首先总结一下原型对象的作用: 原型对 ...
- 三大算法之三:贪心算法及其例题详解
目录 零.前言 1.区分贪心算法和动态规划 1.动态规划 2.贪心算法 3.共通点 2.贪心算法得到最优解的条件 1.具有优化子结构 2.具有贪心选择性 3.任务安排问题 1.问题定义 2.优化子结构 ...
- 模运算(带例题详解)
模运算 基本规则 模运算的基本规则与四则运算基本一致: (a + b) % p = (a % p + b % p) % p (a – b) % p = (a % p – b % p) % p (a * ...
最新文章
- zabbix菜单出现问号乱码问题
- 图像色彩空间与应用转换
- Python3--爬取数据之911网站信息爬取
- SharePoint 2010 各个常用级别对象的获取
- FOI冬令营 Day 3
- 现代制造工程——考试复习01
- Linux下必须知道的网络命令(持续更新)
- SQL Sever 常用语句总结
- python零基础学习书-零基础学习python推荐几本书?
- python三本经典书籍-关于 Python 的经典入门书籍有哪些?
- 进销存excel_超实用Excel完整进销存管理系统,多功能实现,轻松套用赶GET
- 有哪些芯片可以测量交流信号?可以测量哪些参数?
- MATLAB图像复原系统
- 计算机显卡驱动全部卸载,显卡驱动如何卸载重装?NVIDIA独立显卡驱动卸载重装的方法...
- 住户水电费计算c语言程序,(小区水电费管理系统C语言.doc
- 数据结构与算法 c++描述 目录与源码
- 【全】可供选择的软件开源协议的罗列
- 【C语言】C语言运算符
- 7-4 Swan学院社团招新 (20 分)
- DirectX10+MSVC
热门文章
- Spark - Illegal pattern component: XXX 与org.apache.commons.lang3.time.FastDateFormat incompatible
- django+xadmin学习笔记
- 方程的近似解c语言程序,C语言实现二分法(方程近似解)
- Stata 画图配色
- Layui数据表格显示无数据提示问题
- 待飞的蒲公英---拔剑四顾心茫然
- vue过滤器——vue全局过滤器,
- pH敏感聚乙二醇-聚甲基丙烯酸PEG-b-PDPA混合胶束-瑞禧
- 容联云AI问鼎“千言数据集—实体链指评测“,持续打造知识语义计算能力
- flinkSql中自定义时间窗口开启时间