继续重温操作系统系列知识,页面置换的三种常见算法为:LRU(最近最久未使用)、FIFO(先进先出)、最佳置换。

部分公司的面试会考到LRU的知识。

LRU置换算法

所谓LRU置换算法,单看字面意思较为麻烦,实际上在进行页面置换的过程中,被替换的页面块只需要按照“很久之前使用了,但最近没有使用”的规则进行选取就可以了。不需要考虑后续页面走向是否又需要读入符合上述规则的页面,因为这正是LRU的缺点。

最佳置换算法

这种算法选取被替换页面的时候,遵循以下两点

1.某个页面后续走向永远不会访问到,所以它可以直接被置换。

2.某个页面需要过很久才会访问到,优先替换它。

这种算法的优点是理论上缺页率比较低。

先进先出算法

替换规则为替换当前走向所有的物理块中那个最早进入的页面。

例题

假设存在一个走向,4,1,2,5,3,4,6,3,1,2。当分配的物理块M=5时,分别求FIFO、LRU、最佳置换算法的页面走向(假设初始时为空块)。

例题LRU解法
LRU表
走向4125346312
块14444333333
块2111144442
块322226666
块45555511
缺页√√√√√√√√√
置换√√√√√
(1).对于LRU,首先按照顺序填好走向,并填满前面的物理块,与其他算法一样。

很显然在一开始每次都需要调入所需页面。因此,前面几次都是缺页,但没有产生置换。

(2).开始进入置换过程。

对于接下来的走向页面3而言,块中无3说明缺页,块中已满调入3则说明需要置换。

通过观察我们可以得知最近的页面,无论是4、1、2、5,都只是调用了一次,因此我们需要替换最久未使用的4。

但有的时候并不会这么简单,那如果走向不再是4125,而是是4、1、4、5呢?有2个4,还要不要替换4?

那么答案是:则应该替换1,因为虽然4是最早入块的,但是最近4使用过,所以不再是最久未使用的。排除4后1最久未使用,5刚刚使用过。

本题走向为4、1、2、5,因此走向3的块序列为3、1、2、5.

对于接下来的走向页面4而言,因为上一次的序列为3、1、2、5很显然没有4,但又满物理块,所以既置换又缺页。

按照刚刚的示例,在前面的走向4、1、2、5、3中,很显然最久未使用的是1,所以需要替换1.

因此走向4的块序列为3、4、2、5.

对于接下来的走向6而言,最近最久未使用的是2(其实可以观察2和5的长度,在3、4、2、5中,又无重复项目,而2是最久未使用的)。所以替换2.

结果是3、4、6、5,很显然缺页6又置换2。

对于接下来的走向3而言,存在3,所以不需要置换、也不缺页。

对于1而言,最近的序列为(3、4、6、5),观察发现5和3的序列横向一样长,然而3刚刚调用过,所以需要替换5.

结果为3、4、6、1

对于接下来的走向2而言,我们发现最近的序列为(3、4、6、1),通过观察可以发现4-3-6-1走向中4最久未使用,所以替换4.

结果为3、2、6、1.

最终我们填写了整个LRU的置换表。

例题FIFO算法

走向4125346312
块14444333332
块2111144444
块322226666
块45555511
缺页√√√√√√√√√
置换√√√√√
按照先进的先被替换,雷打不动,就可以做出了,这道题答案基本上和LRU一样,就是最后一个走向有些区别。

解题时候遇到重复性的走向容易出错,规避即可。

例题最佳置换算法

页面

4

1

2

5

3

4

6

3

1

2

块1

4

4

4

4

4

4

6

块2

1

1

1

1

1

1

块3

2

2

2

2

2

块4

5

3

3

3

缺页否













置换否





对于走向3而言,我们可以看到后面的走向46312,3、2、1是最久会再次调用的,可以替换2,因为2是最后要访问的,但由于块4的5在后面是永远不会被再次调用的,所以不替换2,要替换5.

结果为4、1、2、3.

下一个走向含有4,因此不缺页也不置换。

接下来的走向6,很显然走向4的页面已经不再需要了(后续走向无4),所以替换走向4,最终结果很巧妙,完全不缺页也不置换。

以上就是三种常见的解法

技术
下载桌面版
GitHub
Gitee
SourceForge
百度网盘(提取码:draw)
云服务器优惠
华为云优惠券
腾讯云优惠券
阿里云优惠券
Vultr优惠券
站点信息
问题反馈
邮箱:[email protected]
吐槽一下
QQ群:766591547
关注微信