操作系统页面置换算法详解(OPT算法、FIFO算法、LRU算法解释+缺页数计算)

news2024/10/7 10:15:54

名人说:一花独放不是春,百花齐放花满园。——《增广贤文》
作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊)

目录

        • 〇、页面置换算法是什么?
        • 一、OPT算法
        • 1、算法介绍
        • 2、举例
        • 二、FIFO算法
        • 1、算法介绍
        • 2、举例
        • 三、LRU算法
        • 1、算法介绍
        • 2、举例
        • 3、关于OPT和LRU算法的区分

以下内容分享出来,仅供学习交流,且仅在CSDN平台发布,未经授权禁止二次转发。

〇、页面置换算法是什么?

页面置换算法是一种操作系统用来管理虚拟内存的技术,它的目的是在内存不足时,选择一些不常用的页面(内存块)从内存中移出,以便为新的页面腾出空间。

具体来说是在进程运行的过程当中,进程所要访问的页面不在内存中,我们就需要把这个不在内存中的页面调入内存,但内存已经没有空闲空间了,这时候就要求系统从内存中调出一个页面,将其移入磁盘的对换区中。

简单理解等候区里坐满了人,位置不够了,此时有人出去,腾出位置,后面新进来的人入座

在这里插入图片描述

等等?你还没有讲OPT、FIFO、和LRU呢?

在这里插入图片描述

咳咳,OK,既然如此,接下来就进入正式的讲解(一脸严肃地如是说道):

一、OPT算法

1、算法介绍

OPT算法最佳置换算法,它的思想是在发生缺页时,选择下一次出现最晚的页面进行置换,从而使缺页率最低。

如果要用代码实现,可以这样来实现:首先定义一个next数组,用来记录每个页面下一次出现的位置。每次发生缺页时,遍历内存块中的所有页面,找到next值最大的页面,即下一次出现最晚的页面,作为置换对象。同时,用一个count变量记录缺页次数,再用一个flag数组记录每个页面是否在内存中。

简单理解选择以后永不使用或者在最长时间内不再被访问的页面进行置换。(向后看)

2、举例

在一个请求分页系统中,假设系统分配给某进程的物理块数为 3,开始时内存为空,执行如下访问页号序列(标记红色的是要下次请求被置换掉的):

1,2,3,4,1,2,5,1,2,3,4,5

在这里插入图片描述
(图片来源网络,只用于帮助理解,侵删)

Y表示缺页,N表示不缺页

缺页次数: 7 次

★补充一点:发生缺页的判断条件是指令所在的页面不在内存中

二、FIFO算法

1、算法介绍

FIFO算法先进先出置换算法。它的思想是在发生缺页时,选择最先进入内存的页面进行置换,即按照进入内存的先后顺序进行置换。

如果要用代码实现,可以这样来实现:先定义一个queue数组,用来记录每个内存块中的页面进入的先后顺序。每次发生缺页时,取出queue数组的第一个元素,即最先进入内存的内存块号,作为置换对象。然后将该元素移到queue数组的末尾,表示该内存块中的页面最近被访问过。同时,用一个count变量记录缺页次数,接着用一个flag数组记录每个页面是否在内存中。

简单理解先进先出,如果满了,就对先进来的进行置换。(可以结合数据结构队列理解)

在这里插入图片描述

2、举例

比如有下述页面走向:1, 2, 3, 4, 2, 1, 5, 6, 2, 1, 2, 3, 7, 6, 3, 2, 1, 2, 3, 6。当内存块数量分别为3时, 我们算一算使有此方法时产生的缺页次情况。 (注意, 所有内存块最初都是空的, 凡第一次用到的页面都产生一次缺页。)
内存块数量分别为3时,FIFO算法的执行过程如下图所示。

在这里插入图片描述
(图片来源网络,只用于帮助理解,侵删)

打叉的表示发生了缺页,共有16个×,即

缺页次数: 16 次

三、LRU算法

1、算法介绍

LRU算法最近最久未使用置换算法,它的思想是在发生缺页时,选择最近一段时间内最久未使用的页面进行置换,即按照访问时间的远近进行置换。(时间维度来考虑,原理依据局部性原理)

如果要用代码实现,可以这样来实现:一开始定义一个last数组,用来记录每个页面最近一次出现的位置。每次发生缺页时,遍历内存块中的所有页面,找到last值最小的页面,即最近一段时间内最久未使用的页面,作为置换对象。同时,用一个count变量记录缺页次数,并用一个flag数组记录每个页面是否在内存中。

简单理解选择最近最长时间没有被访问的页面进行置换。(向前看)

2、举例

由于OPT和LRU容易混淆,因此在网上精选了两题来帮助大家理解。

1️⃣例1

在一个请求分页系统中,假设系统分配给某进程的物理块数为 3,开始时内存为空,执行如下访问页号序列(标记红色的是要下次请求被置换掉的):

1,2,3,4,1,2,5,1,2,3,4,5

在这里插入图片描述
(图片来源网络,只用于帮助理解,侵删)

缺页次数: 10 次

2️⃣例2

在一个请求页式存储管理中,一个程序的页面走向为 3、4、2、1、4、5、3、4、5、1、2,并采用 LRU 算法。设分配给该程序的存储块数 S 分别为 3,在该访问中发生的缺页次数 F 是 ?

页面\数据走向34214534512
物理块034214534512
物理块13421453351
物理块2342145435
是否缺页(是 √ 否×)××××××××

所以F=8,即
缺页次数:8次

3、关于OPT和LRU算法的区分

  • OPT算法是最优页面置换算法,它的原理是在发生缺页中断时,选择以后永不使用或者在最长时间内不再被访问的页面进行淘汰。
  • LRU算法是最近最久未使用算法,它的原理是在发生缺页中断时,选择最近最长时间没有被访问的页面进行淘汰。
  • OPT算法和LRU算法的区别在于OPT算法是根据各页以后的使用情况进行置换,是“向后看”的,而LRU算法是根据各页以前的使用情况进行置换,是“向前看”的。
  • 一个是不再被访问(OPT),另一个则是没有被访问(LRU)。

撒花结束,(〃 ̄o ̄) 人 ( ̄︶ ̄〃),Yaho,写完咯!在这里插入图片描述

Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊)
如果对大家有帮助的话,希望大家能多多点赞+关注!这样我动力会更足哦! ღ( ´・ᴗ・` )比心
如有疑问,欢迎大家评论交流学习!

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

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

相关文章

【嵌入式模型转换】算能盒子SE5 芯片板子BM1684

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言1.环境准备2. 开发机安装环境 前言 官网文档指引:https://doc.sophgo.com/sdk-docs/v23.03.01/docs_latest_release/docs/SophonSDK_doc/zh/html/c…

ffmpeg capture decklink

确保decklink设备已经接入 lspci | grep Blackm02:00.0 Multimedia video controller: Blackmagic Design DeckLink SDI Micro 确保decklink驱动已经正确安装 lsmod | grep blackmagicblackmagic_io 2068480 2 确保ffmpeg已经启用decklink,如何配置之前的博文已经…

高磁场型霍尔效应测试系统

高磁场型霍尔效应测试系统由:电磁铁、电磁铁电源、高精度恒流源高精度电压表、高斯计、霍尔效应样品支架、标准样品、系统软件。用于测量半导体材料的载流子浓度、迁移率、电阻率、霍尔系数等重要参数,而这些参数是了解半导体材料电学特性必须预先掌控的…

conda下jupyter lab 多kernel

1.安装ipykernel pip install ipykernel2.手动添加 --kernel python -m ipykernel install --name tensorflow --display-name "tensroflow"3. 查看创建的kernel jupyter kernelspec list4. 修改配置文件kernel.json,使得已创建的kernel匹配 5. 修改配…

【Axure教程】根据标签数自动调整尺寸的多选下拉列表

​多选下拉列表常用于需要用户从一组选项中选择多个选项的情况。它提供了一个下拉菜单,用户可以点击展开并选择他们感兴趣的多个选项。多选下拉列表可以用于展示可选标签,并允许用户选择多个标签。例如,在一个博客发布界面上,可以…

【Flutter】如何在 Flutter 中获取设备 ID

文章目录 一、 前言二、 设备 ID 的重要性1. 什么是设备 ID2. 设备 ID 的作用 三、 在 Flutter 中获取设备 ID1. 需要的工具和库2. 简单代码示例3. 完整可以运行的代码 四、 注意事项1. 权限问题2. 设备兼容性问题 五、 总结 一、 前言 在移动应用开发中,有时我们需…

飞书小程序开发教程——获取app_access_token

前言 最近在玩飞书小程序,真是受够了某信的小程序,一坨坨的限制加恶心人的手段。体验了飞书加飞书文档的功能真的还是飞书好用,又可以定制机器人啥的真方便。 但是飞书除了开发者文档真没啥资料,估计没啥人写吧…本专栏后续就慢慢…

DVPP媒体数据处理视频编码问题案例

DVPP(Digital Vision Pre-Processing)是昇腾AI处理器内置的图像处理单元,通过AscendCL媒体数据处理接口提供强大的媒体处理硬加速能力,主要功能包括图像编解码、视频编解码、图像抠图缩放等。 本期就分享几个关于DVPP视频编码问题…

未磁科技全球首台64通道无液氦心磁图仪及首个培训基地落户北京安贞医院

【全球首台64通道无液氦心磁图仪在北京安贞医院举行开机仪式】 近日,在北京安贞医院举行了未磁科技全球首台64通道无液氦心磁图仪开机仪式,中国医学装备协会赵自林理事长、北京安贞医院纪智礼书记、张宏家院长、宋现涛教授,以及未磁科技蔡宾…

【离散化+枚举】代码源每日一题div2 全部相等

全部相等 - 题目 - Daimayuan Online Judge 题意: 思路: 首先,子序列最长,想到了DP,但是子序列DP,D不出来,所以要放弃想法 不难发现,这道题和顺序没有关系,所以可以说…

Vision Pro,难成初代iPhone

“一个全新的增强显示平台,一个革命性的新产品”,这是苹果CEO库克给Apple Vision Pro的评价。 当苹果拿出Vision Pro时,想必整个科技行业都感到震惊。这不仅是因为苹果时隔十六年后,再次在WWDC带来“革命性产品”,更是…

Ai 赋能|这 6 款免安装的工具,功能超神~

今天小呆给小伙伴们分享几款小巧好用的工具,功能非常实用,而且全都免费,值得大家使用! 1、Pix Fix 修复画质损坏的图像 Pix Fix 是一个免费的线上图片工具,可以对过度压缩造成损毁的图片以算法为基础进行噪点的修复&…

【枚举+数学】代码源每日一题div2 数学

数学 - 题目 - Daimayuan Online Judge 题意: 思路: 首先把条件理一下 gcd(s1,s2)K 按照惯用套路 设 s1k1*K s2k2*K 那么就是(k1k2)*Ksum 所以K是sum的一个因子 因此只需要枚举sum的因子即可 但是注意数据范围:1e9 说明不能直接枚…

MySQL数据库加密

有时候为防止别人攻击数据库,直接读取修改数据,我们会对数据库数据进行加密。 一:AES_ENCRYPT(需要加密的数据,密钥) AES_DECRYPT(需要解密的数据,刚才的密钥) 如:update area set jiamiAES_ENCRYPT(test数据加密,miyao) where …

Python基础知识掌握之 字符串格式化

前言 嗨喽,大家好呀~这里是爱看美女的茜茜呐 为了确保字符串按预期显示,我们可以使用 format() 方法对结果进行格式化。 字符串 format() format() 方法允许您格式化字符串的选定部分。 有时文本的一部分是你无法控制的,也许它们来自数据…

分享几个免费设计生成工具 (第二期)

今天来给大家分享几个国外免费的设计生成工具 A. Tools https://www.a.tools/ 一个免费实用的在线工具箱,提供了 85 个特色工具,包含图形图像、日期和时间、文本编辑器、解密和加密、编程与设计、图表生成器等等,还有热门的 AI聊天提示生成器…

freemarker学习记录

freemarker 介绍 FreeMarker 是一款模板引擎: 即一种基于模板和要改变的数据, 并用来生成输出文本(HTML网页,电子邮件,配置文件,源代码等)的通用工具。 它不是面向最终用户的,而是一个Java类库&#xff0c…

electron 生命周期

生命周期事件: reday: app初始化完成dom-ready:一个窗口的文本加载完成,可以进行dom操作did-finish-load: 导航完成时触发,选项卡旋转器停止旋转时(发生在dom-ready后)比如点击一个选项卡后,某一个选项下的dom加载完成…

基于zustand维护的一套跨框架(react/vue)跨应用的状态管理及共享方案

zustand-pub 只要从事前端开发,不论是小程序还是web,都绕不开状态管理。 众所周知, zustand 是一套轻量、便捷、可拓展的状态管理方案,不论国内 or 国外,都备受喜爱,star 数已接近 3W。 而 zustand-pub 则…

ThreadLocal源码深度详解

文章目录 一、ThreadLocal简单使用二、ThreadLocal源码详解1、set方法(1)getMap(t)(2)createMap 2、get方法3、setInitialValue方法 三、ThreadLocalMap详解1、ThreadLocalMap为什么要设置Entry数组2、key计算的下标会重复吗&…