《操作系统 - 清华大学》6 -3:局部页面置换算法:最近最久未使用算法 (LRU, Least Recently Used)
文章目录
- 1. 最近最久未使用算法的工作原理
- 2. 最近最久未使用算法示例
- 3.LRU算法实现
- 3.1 LRU的页面链表实现
- 3.2 LRU的活动页面栈实现
- 3.3 链表实现 VS 堆栈实现
1. 最近最久未使用算法的工作原理
最近最久未使用页面置换算法,简称 LRU, 算法思路:当缺页中断产生之后,要替换哪个页?选择最久未被使用的页,要置换这个页。
最久未被使用和前面的 FIFO 算法里面最长驻留时间不是一个概念。最长驻留时间是存在时间很久,但是它可能最近被访问过,但是最久未被使用页是说它可能很长时间程序都没有读或写页的内容,这叫最久未被使用,所以它和 FIFO 算法的依据是不一样的,它的页面特征是不一样。
本质上来说它是对最优置换算法的近似
它是根据过去来推测应该把哪个页给换出去,而不是根据未来。最优置换算法替换是将来最远未被使用页,将来很久都没被使用的页面,那个页面会被淘汰出去,而这个是过去很长时间都没访问的页,这两个正好在两头。
~
LRU 算法其实是根据历史来推测未来,最优置换算法是根据未来推测未来,但是在不知道未来情况下,那根据过去的访问情况来推测将来访问情况,也是一种合理的选择。
~
那这个合理性是基于程序的局部性原理,程序运行过程中具有一定局部性特征,时间局部性和空间局部性,在最近一段时间之内,程序访问的代码和数据,在未来一段时间也还有很大的概率还会持续访问,还会被频繁访问,这是局部性,有了局部性之后,LRU 的依据就是合理了。
~
既然有这么一个特征,那么如果说在当前这段时间之内,某些页没有被访问,那也意味着接下来一小段时间它也很可能没被访问,这是局部性原理的反推,基于这个特征,如果程序是具有局部性特征的程序,LRU算法其实会比较好地预测未来发生情况。
2. 最近最久未使用算法示例
还是刚才访问序列,如果采取 LRU 算法会产生多少次访问中断,还是同样的一幅图:
- 前四次 1 2 3 4 访问序列是 c a d b,刚才已经说这几个页都在物理内存中,所以不会产生缺页中断
- 第五次时,依据 LRU 算法,把最久未被使用页面给替换出去, a 页面访问时刻是2 ,b 是 4 时刻,c 是1时刻访问,d 是 3 时刻,很显然 c 是最久未被访问页,所以当第 5 个时刻访问 e 时候,需要去替换最久没有访问页是 c。
- 访问 b, b 还在物理页中,所以不会产生中断。那么 6 7 8 这三个时刻访问页序列,由于 a 和 b 都还在物理内存中,所以不会产生中断
- 第 9 个时刻要访问 c 了,那么应该换出哪个页?a 是在第7个时刻访问,b 是在第8个时刻访问,都是离这个 c 很近,但不代表很久,d 是在第3时刻访问,而 e 是在第5时刻访问,那么很明显在这里面就是 d 页面是最久未被访问页面,所以说会把 d 给换出去,然后把 c 换进来,产生第二次缺页中断
- 接下要访问 d,刚把 d 换出去,这时候应该换哪页?当前最久未被访页是 e,所以说要把 e 给换出去
采取 LRU 算法之后产生了三次中断,比 FIFO 算法要少一些。
3.LRU算法实现
LRU算法找的是最久未被访问页,如果要有效实现算法,它需要记录每个页使用时间的先后顺序。主要采取某种方法记录起来,记录时间顺序的执行开销是比较大的,目前有两种可能的实现方法
3.1 LRU的页面链表实现
第一个是用链表来实现,如果说系统里面能够维护一个当前访问的页面链表,那么最近刚刚访问的页面作为首节点,放在链表的头,而最久未被使用页面放在链表的尾。
当运行程序访问内存的时候,需要看看这个内存对应的这个页是否在这个链表里面。如果在这链表里面,需要把这个页从某一位置替到链表头上,因为它当前正在被访问,代表最近访问页。如果没有的话,就把这个页插入链表中。
如果产生一次缺页中断,需要替换链表中的某一页,很明显,因为链表会把最近访问页靠近链表头,只有最久访问页放在链表尾,所以直接从链表尾把这个页给摘出来,就可以作为要替换出去的页,这是一种方法。
3.2 LRU的活动页面栈实现
第二个办法用堆栈,设置一个当前访问页的堆栈,当访问某个页时候就把这个页先压入栈顶,然后再考察栈内是否有跟这个页相同的页号,如果有,把这个页抽出来不要了,因为已经把页压到里面去了,但它需要去查找在这个栈中是否已经存在这个页号,如果存在踢出去,这个查找过程开销比较大。和刚才说的链表查找过程是一样的,都需要去查找在链表和堆栈中这个页是否存在。
如果又产生缺页中断,需要淘汰一页,那淘汰哪个?就要选择堆栈的栈底,就类似前面链表的尾部页面,因为这个页面代表它最久未被访问的页面。
刚刚那个图做例子,如果用所谓堆栈的办法来实现,就这么操作过程:
底下有 LRU 配置的 stack,就是分配一个堆栈,当每一次访页,就把这个页号压在里面去,同时还要看看这里面是否存在相同的页号,如果有把它剔出去。
- 当走到了第 5 时刻,访问 e ,产生缺页异常,产生缺页中断之后,需要把栈的尾部给替换出去,这时候就把 e 给压栈里
- 第 6 时刻,把 b 放栈里面去,但由于 b 已经在页帧中,会把 b 从栈中去掉,使得 b 从栈的中间位置调到栈顶。
- 同理,第 7 时刻访问 a,会把 a 从栈的某一位置调到栈顶
这就是 LRU 算法基于栈来实现的大致处理过程。可以看到在这里面每次访问都需要去查找这个栈,那如果说这个内存中物理页帧比较多的情况,那其实查找很费时,所以整个过程实现开销是大。
3.3 链表实现 VS 堆栈实现
那这是两种实现方式,每一次内存访问某一页的时候,可能都需要去做一次查找,看这个页是否在链表中,或者说是否在堆栈中,可以做一些相关操作。那这个过程其实开销挺大。
LRU 算法表面上看起来效果不错,但是如果要把它放到操作系统里面去,需要考虑代价,它的结果虽然不错,如果代价太大,它不是一个合适的实现方法。
操作系统设计讲究的第一要高效,第二要简洁,既要达到好的效果,还要实现得快捷。如果说为了实现好效果,要花很大的代价,那整个系统性能就受到很大影响,操作系统占时间越多,也意味着留给应用程序时间越少,所以说希望操作系统用最少时间获得最佳效果,它需要一个 balance,所以 balance 情况下 LRU 算法的实现开销很大,所以它也不是一个有效的方法。
相关文章:

《操作系统 - 清华大学》6 -3:局部页面置换算法:最近最久未使用算法 (LRU, Least Recently Used)
文章目录 1. 最近最久未使用算法的工作原理2. 最近最久未使用算法示例3.LRU算法实现3.1 LRU的页面链表实现3.2 LRU的活动页面栈实现3.3 链表实现 VS 堆栈实现 1. 最近最久未使用算法的工作原理 最近最久未使用页面置换算法,简称 LRU, 算法思路ÿ…...

ES6新增了哪些特性(待更新)
1.let,const 1.1.var,let,const的区别 1.1.1 var存在变量提升,let和const不存在。 1.1.2 let和const只能在块作用域里访问。 1.1.3 同一作用域下let和const不能声明同名变量,而var可以。 1.1.4 const定义常量&am…...

剖析一下自己的简历第二条
剖析一下自己的简历第二条 背景前置说明可能会被问到的问题 背景 剖析一下自己简历, 增加对一些专业知识的掌握. 我的简历第二条是这样写的: “2. 熟悉JVM、JMM,包括内存模型,垃圾回收机制,了解其基本调优技巧并具备线上调优经验。”. 前置…...

威联通-001 手机相册备份
文章目录 前言1.Qfile Pro2.Qsync Pro总结 前言 威联通有两种数据备份手段:1.Qfile Pro和2.Qsync Pro,实践使用中存在一些区别,针对不同备份环境选择是不同。 1.Qfile Pro 用来备份制定目录内容的。 2.Qsync Pro 主要用来查看和操作文…...

性能测试基础知识jmeter使用
博客主页:花果山~程序猿-CSDN博客 文章分栏:测试_花果山~程序猿的博客-CSDN博客 关注我一起学习,一起进步,一起探索编程的无限可能吧!让我们一起努力,一起成长! 目录 性能指标 1. 并发数 (Con…...

Ceph文件存储
Ceph文件存储1.概念:数据以文件的形式存储在存储介质上,每个文件都有一个唯一的文件名并存储在一个目录结构中。提供方便的文件访问接口,支持多种文件操作,如创建、删除、读取、写入、复制等。用于存储和管理个人文件,如文档、图片…...

Hive分区表新增字段并指定位置
Hive分区表新增字段并指定位置 1、Hive分区表新增字段2、CASCADE关键字3、历史分区新增列为NULL问题 1、Hive分区表新增字段 Hive分区表新增字段并指定位置主要分为两步:新增字段和移动字段 1)新增字段 ALTER TABLE table_name ADD COLUMNS (col_name …...

关系型数据库(RDBMS)与非关系型数据库(NoSQL)应用场景
关系型数据库适用于事务性、强一致性和结构化数据场景;非关系型数据库则在高并发、大数据、非结构化数据场景中表现更优;数据量和并发量增加时,应通过分库分表、缓存、集群扩展等手段进行优化。 1. 在什么样的业务场景下,你会优先…...

浅谈CI持续集成
1.什么是持续集成 持续集成(Continuous Integration)(CI)是一种软件开发实践,团队成员频繁地将他们的工作成果集成到一起(通常每人每天至少提交一次,这样每天就会有多次集成),并且在每次提交后…...

华为新手机和支付宝碰一下 带来更便捷支付体验
支付正在变的更简单。 11月26日,华为新品发布会引起众多关注。发布会上,华为常务董事余承东专门提到,华为Mate 70和Mate X6折叠屏手机的“独门支付秘技”——“碰一下”,并且表示经过华为和支付宝的共同优化,使用“碰…...

shell编程基础笔记
目录 echo改字体颜色和字体背景颜色 bash基本功能: 运行方式:推荐使用第二种方法 变量类型 字符串处理: 条件判断:(使用echo $?来判断条件结果,0为true,1为false) 条件语句&a…...

VS Code配置Lua调试环境
我这里选用Emmylua进行Lua代码调试,调试环境配置如下: 一、安装Emmylua 在VS Code扩展里搜索emmylua,然后进行安装, 如下 二、配置launch.json 在Run and Debug里生成launch.json文件 点击以上菜单后,生成launch.json文件如下: 三、配置.e…...

FPGA(一)Quartus II 13.1及modelsim与modelsim-altera安装教程及可能遇到的相关问题
零.前言 在学习FPGA课程时,感觉学校机房电脑用起来不是很方便,想着在自己电脑上下载一个Quartus II 来进行 基于 vhdl 语言的FPGA开发。原以为是一件很简单的事情,没想到搜了全网文章发现几乎没有一个完整且详细的流程教学安装(也…...

【单片机】ESP32-S3+多TMC2209控制步进电机系列1 UART通信及无传感回零 硬件部分
目录 1. 硬件选型1.1 esp32硬件型号1.2 TMC2209 硬件型号 2 原理接线图2.1 esp32接线2.2 TMC2209接线2.2.1 单向通讯 不配置地址2.2.2 单向通讯 配置地址2.2.3 双向通讯 单UART 【本文采用】2.2.4 双向通讯 多UART 3. 成品效果 1. 硬件选型 1.1 esp32硬件型号 采用的是微雪ES…...

Django之ORM
1.ORM介绍 ORM概念 对象关系映射(Object Relational Mapping,简称ORM)模式是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术。 简单的说,ORM是通过使用描述对象和数据库之间映射的元数据,将程序中的对…...

html css 图片背景透明
html css图标背景透明 css属性: background-color:transparent; mix-blend-mode: multiply; 完整HTML代码: <html><head><title>Test</title></head><body><div id"test" style"background-col…...

使用ALB实现gRPC协议的负载均衡
gRPC是一种高性能、开源的远程过程调用框架,当您使用gRPC进行后端服务通信时,您可使用应用型负载均衡ALB(Application Load Balancer)实现gRPC协议的负载均衡,统一流量入口。gRPC基于HTTP/2协议进行通信,目…...

解决IDEA的easycode插件生成的mapper.xml文件字段之间逗号丢失
问题 easycode插件生成的mapper.xml文件字段之间逗号丢失,如图 解决办法 将easycode(在settings里面的othersettings)设置里面的Template的mapper.xml.vm和Global Config的mybatisSupport.vm的所有$velocityHasNext换成$foreach.hasNext Template的mapper.xml.vm(…...

【Linux测试题】
1. 选择题 题目: 如果想将电脑中Windows C盘(hd1)安装在Linux文件系统的/winsys目录下,请问正确的命令是()。 选项: A. root104.123.123.123:~# mount dev/hd1 /winsys B. root104.123.123.12…...

python使用openpyxl处理excel
文章目录 一、写在前面1、安装openpyxl2、认识excel窗口 二、基本使用1、打开excel2、获取sheet表格3、获取sheet表格 尺寸4、获取单元格数据5、获取区域单元格数据6、sheet.iter_rows()方法7、修改单元格的值8、向表格中插入行数据9、实战:合并多个excel 三、获取E…...

【JavaWeb后端学习笔记】Mybatis基础操作以及动态SQL(增、删、改、查)
Mybatis 0、环境准备0.1 准备数据库表emp;0.2 准备SpringBoot工程0.3 配置文件中引入数据库连接信息0.4 创建对应的实体类0.5 准备Mapper接口 1、MyBatis基础操作1.1 删除1.2 新增(主键返回)1.3 更新1.4 查询(解决字段名与类属性名…...

基于MATLAB野外观测站生态气象数据处理分析实践应用
1.本课程基于MATLAB语言 2.以实践案例为主,提供所有代码 3.原理与操作结合 4.布置作业,答疑与拓展 示意图: 以野外观测站高频时序生态气象数据为例,基于MATLAB开展上机操作: 1.不同生态气象要素文件的数据读写与批处理…...

IP 地理位置定位技术原理概述
本文深入探讨 IP 地理位置定位技术的原理。介绍了 IP 地址的基本概念及其在网络中的作用,随后阐述了基于数据库查询、基于网络拓扑分析以及基于机器学习算法的三种主要 IP 地理位置定位技术原理中的基于IP数据库查询。 IP 地址基础 IP 地址是互联网协议࿰…...

C语言(分支结构)
问题引出 我们在程序设计往往会遇到如下的问题,比如下的函数的计算。 也就是我们是必须要通过一个条件的结果来选择下一步的操作,算法上属于一个分支结构,C语言中实现分支结构主要使用if语句。 条件判断 根据某个条件成立与否,…...

批量将不同的工作簿合并到同一个Excel文件
批量将不同的工作簿合并到同一个Excel文件 下面是一个示例,展示如何批量将不同的工作簿合并到同一个Excel文件,并生成模拟数据。我们将使用 Python 的 pandas 库来完成这个任务。具体步骤如下: 步骤 1: 安装必要的库 首先确保你已安装 pan…...

详解AI网关助力配电房实现智能化管控应用
对于一些建设年份久远的老旧配电房,由于配套降温散热设施设备不完善、线路设备老化等因素,极易出现因环境过热而影响设备正常稳定运行,进而导致电气故障甚至火灾等事故产生。 基于AI网关的配电房智能监控及管理 针对配电房的实时安全监测及…...

2025美赛数学建模常用数据库网站大全
优秀模板写作红宝书数学模型获取——更多资料请点击下方名片进群获取。 一、可以查询美国各个领域经济指标的网站: olap.epsnet.com.cnhttps://www.ers.usda.gov/data-products/rice-yearbook/www.ers.usda.govU.S. Energy Information Administration (EIA) www.eia.govhttp…...

Wordpress设置固定链接形式后出现404错误
比如固定连接设置为 /archives/%post_id%.html 这种形式,看起来比较舒服。对搜索引擎也友好。 出现404需要设置伪静态...

我最近在干什么【1】
前言 打算开一个新系列,偏休闲点的,不是完整全面的技术分享,话题还是聚焦个人成长(学的技术、了解到的信息、看的书……) 方面。文章偏意识流点,单纯分享我最近在干什么,不定期更新,…...

[Vue3]computed原理
Computed原理 不管在是 Vue 2 还是在 Vue 3 中,对 computed 本身的实现原理基本都是一样的。当使用 computed 计算属性时,组件初始化会对每一个计算属性都创建对应的 watcher , 然后在第一次调用自己的 getter 方法时,收集计算属性依赖的所有…...