名人说:一花独放不是春,百花齐放花满园。——《增广贤文》
作者: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 是 ?
页面\数据走向 | 3 | 4 | 2 | 1 | 4 | 5 | 3 | 4 | 5 | 1 | 2 |
---|---|---|---|---|---|---|---|---|---|---|---|
物理块0 | 3 | 4 | 2 | 1 | 4 | 5 | 3 | 4 | 5 | 1 | 2 |
物理块1 | 3 | 4 | 2 | 1 | 4 | 5 | 3 | 3 | 5 | 1 | |
物理块2 | 3 | 4 | 2 | 1 | 4 | 5 | 4 | 3 | 5 | ||
是否缺页(是 √ 否×) | × | × | × | × | × | × | × | × |
所以F=8,即
缺页次数:8次
3、关于OPT和LRU算法的区分
- OPT算法是最优页面置换算法,它的原理是在发生缺页中断时,选择以后永不使用或者在最长时间内不再被访问的页面进行淘汰。
- LRU算法是最近最久未使用算法,它的原理是在发生缺页中断时,选择最近最长时间没有被访问的页面进行淘汰。
- OPT算法和LRU算法的区别在于,OPT算法是根据各页以后的使用情况进行置换,是“向后看”的,而LRU算法是根据各页以前的使用情况进行置换,是“向前看”的。
- 一个是不再被访问(OPT),另一个则是没有被访问(LRU)。
撒花结束,(〃 ̄o ̄) 人 ( ̄︶ ̄〃),Yaho,写完咯!
Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊)
如果对大家有帮助的话,希望大家能多多点赞+关注!这样我动力会更足哦! ღ( ´・ᴗ・` )比心
如有疑问,欢迎大家评论交流学习!