简介
期末考试中常考的页面置换算法可能有三种,分别是先进先出(FIFO),最佳置换(OPT)和最久未使用(LRU)
本篇文章会用一道例题来讲解这三种算法的思路和解题过程;
题目
假设有这样一个操作系统,其内存中有3个空闲页面框(题目也有可能是描述成M3,M是Memory的简写)。进程依次请求页面号为以下序列:7, 0, 1, 2, 0, 3, 0, 4, 2, 3, 0, 3, 2。在开始时,所有页面框都是空的。对于每种页面置换算法(FIFO、LRU、OPT),计算并记录发生的页故障次数,和缺页率,用表格展示在解答过程中;
分析
内存有三个空闲框,说明一次性可以最多接受三个序列;
是否缺页指的是:在内存块中是否被替换掉的+原本内存块中存在的;
FIFO:先进先出,只需要找到离下一次序列号进来的时候上一次最多的替换掉;
LRU:最久未使用
OPT:最佳置换,只需要在序列栏对比内存中已经存在的,往后看离的最远的替换掉内存块中的序列
答案
FIFO(先进先出算法解答)
描述 | 7 | 0 | 1 | 2 | 0 | 3 | 0 | 4 | 2 | 3 | 0 | 3 | 2 |
M1 | 7 | 7 | 7 | ||||||||||
M2 | 0 | 0 | |||||||||||
M3 | 1 | ||||||||||||
是否缺页 |
上述表格,因为前三次序列,并不存在置换,所以直接填进表格里面,从第四次开始分析;
第四次:进来2,那么7作为先进来的序列就需要替换掉,所以就变成2,0,1,缺页标记为是
第五次:进来0, 0在序列中已经存在,所以这一页不变,还是2,0,1,缺页标记为否
第六次: 进来3,3在序列中不存在,所以替换掉0,结果变成2,3,1,缺页标记为是
第七次:进来0,0在序列中不存在,所以替换掉1,结果变成2,3,0,缺页标记为是;
...后续的结果像上面这样推导就行了;所以最后的答案在下表中描述为:
描述 | 7 | 0 | 1 | 2 | 0 | 3 | 0 | 4 | 2 | 3 | 0 | 3 | 2 |
M1 | 7 | 7 | 7 | 2 | 2 | 2 | 4 | 4 | 4 | 0 | |||
M2 | 0 | 0 | 0 | 3 | 3 | 3 | 2 | 2 | 2 | ||||
M3 | 1 | 1 | 1 | 0 | 0 | 0 | 3 | 3 | |||||
是否缺页 | 是 | 是 | 是 | 是 | 是 | 是 | 是 | 是 | 是 | 是 |
所以缺页次数一共是:10次,总次数为13,缺页率为10/13≈78%
OPT(最佳置换算法)
描述 | 7 | 0 | 1 | 2 | 0 | 3 | 0 | 4 | 2 | 3 | 0 | 3 | 2 |
M1 | 7 | 7 | 7 | ||||||||||
M2 | 0 | 0 | |||||||||||
M3 | 1 | ||||||||||||
是否缺页 |
根据描述,最佳置换算法需要在序列中对比内存块找到最近不会使用的;
第四次:进来2,此时内存块中是7,0,1;7和1在未来都不会使用(因为你看后续的所有序列号),所以随便换一个,就变成了2,0,1
第五次:进来0,0在内存中已经存在,所以不发生置换,此时还是2,0,1
第六次:进来3,后续中会用到2和0,所以去掉1,变成了2,0,3
第七次:进来0,0在内存中存在,所以还是2,0,3
第八次:进来4,后续序列中,先进来2和3,所以把0替换掉,变成2,3,4
第九次:进来2,不发生替换,还是2,3,4
第十次:进来3,不发生替换,结果2,3,4
第十一次:进来0,在未来3和2会用到,踢掉4,结果是3,2,0
第十二次:不发生置换
第十三次:不发生置换
所以上述分析在下方表格为:
描述 | 7 | 0 | 1 | 2 | 0 | 3 | 0 | 4 | 2 | 3 | 0 | 3 | 2 |
M1 | 7 | 7 | 7 | 2 | 2 | 2 | 2 | ||||||
M2 | 0 | 0 | 0 | 0 | 4 | 0 | |||||||
M3 | 1 | 1 | 3 | 3 | 3 | ||||||||
是否缺页 | 是 | 是 | 是 | 是 | 是 | 是 | 是 |
所以总的缺页次数为:7次,总次数为13次。缺页率为:7/13≈54%
LRU(最久未使用算法)
该算法和OPT类似,只不过OPT是往序列后面看,LRU是往序列前面看最久未使用的;
描述 | 7 | 0 | 1 | 2 | 0 | 3 | 0 | 4 | 2 | 3 | 0 | 3 | 2 |
M1 | 7 | 7 | 7 | ||||||||||
M2 | 0 | 0 | |||||||||||
M3 | 1 | ||||||||||||
是否缺页 |
第四次:进来2,此时内存中是序列号7,0,1,从2往前数发现7是最久未使用的,所以替换掉7,变成2,0,1
第五次:进来0,此时不发生置换,还是2,0,1
第六次:进来3,替换掉1,变成2,0,3
后续跟着规律往下填就行,结果如下:
描述 | 7 | 0 | 1 | 2 | 0 | 3 | 0 | 4 | 2 | 3 | 0 | 3 | 2 |
M1 | 7 | 7 | 7 | 2 | 2 | 4 | 4 | 4 | 0 | ||||
M2 | 0 | 0 | 0 | 0 | 0 | 0 | 3 | 3 | |||||
M3 | 1 | 1 | 3 | 3 | 2 | 2 | 2 | ||||||
是否缺页 | 是 | 是 | 是 | 是 | 是 | 是 | 是 | 是 | 是 |
所以此时缺页次数为:9次,总次数为13,缺页率为:9/13≈69%
标签:操作系统,置换,算法,内存,进来,序列,缺页,替换,页面 From: https://blog.csdn.net/2401_87105969/article/details/142413644