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

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

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

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

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

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

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

在这里插入图片描述

等等?说重点,你还没有讲OPT、FIFO、和LRU呢?
咳咳,既然如此,接下来就进入正式的讲解(一脸严肃地如是说道):

一、OPT算法
1、算法介绍

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

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

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

2、举例

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

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

页面\数据走向123412512345
物理块0111111111333
物理块122222222244
物理块23444555555
是否缺页(是 √ 否×)×××××

缺页次数: 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算法的执行过程如下图所示。

页面\数据走向12342156212376321236
物理块011144446666333322226
物理块12222111222277771111
物理块2333355511116666633
是否缺页(是 √ 否×)××××

缺页次数: 16 次

三、LRU算法
1、算法介绍

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

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

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

2、举例

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

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

页面\数据走向123412512345
物理块0111444555333
物理块122211111144
物理块23332222225
是否缺页(是 √ 否×)××

缺页次数: 10 次

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

撒花结束,(〃 ̄o ̄) 人 ( ̄︶ ̄〃),Yaho,下班!

以上算法代码实现可以看这篇文章:操作系统课程设计:常用页面置换算法(OPT、FIFO、LRU)的实现及缺页率的计算(C语言)

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

评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Code_流苏

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值