目录
前言
今天是坚持写博客的第13天,为坚持和努力的自己和大家点赞。时间很快,马上就要满两周了,总体收获还是有的,不至于一无所获。
我们今天来讲讲操作系统里面的三种页面置换算法,希望对大家的理解、复习和备考有所帮助。
缺页中断和缺页中断率
在正式介绍前,我们需要了解缺页中断的概念和缺页中断率的计算方法。这一部分可以根据需要选择阅读。
缺页中断就是发生页面插入空缺位置或发生替换已经加入的页面的时刻,缺页中断率=缺页中断次数/总替换次数。
FIFO先入先出算法
定义
FIFO,First In First Out,先入先出算法,是最简单的页面替换策略,它按照页面进入内存的顺序来决定替换哪个页面。即优先淘汰最早进入内存的页面,不论这些页面之后是否被频繁访问。但是FIFO可能会导致“Belady异常”,即随着分配给进程的物理块数增加,缺页次数反而增加。
举例
策略
假设我们有一组需要替换的页面(7,0,1,2,0,3,0,4,2,3,0,3,2),有三个空间可以用来替换,我们使用FIFO算法进行替换,可以遵循以下策略:
- 先写下需要替换的页面
- 依次放入三个空间,若有空空间则直接放入,没有空空间则“向过去看”,替换掉距离当前位置最远的一个页面。
- 不断重复上面的步骤,直到完成所有页面的替换。
思路
根据策略,我们可以得出下面的思路,演示图在思路后面放出:
- 有三个空位,7放入。此时的三个页面为7-空-空。
- 有两个空位,0放入。此时的三个页面为7-0-空。
- 有一个空位,1放入。此时的三个页面为7-0-1。
- 没有空位,2与7-0-1比较,0和1最近放入,7不是最近放入,2替换7, 此时的三个页面为2-0-1。
- 没有空位,0与2-0-1比较,0与“0”重合,不替换。
- 没有空位,3与2-0-1比较,2和1最近放入,0不是最近放入,3替换0,此时的三个页面为2-3-1。
- 没有空位,0与2-3-1比较,2和3最近放入,1不是最近放入,0替换1,此时的三个页面为2-3-0。
以此类推,我们可以得到最终结果,在最后一次替换后,我们可以得到最终存在页面中的是0-2-3。
最终解
PS:灵魂画手上线了
在图片中的示例中,每次插入或替换的页面已经用红色标出,未发生替换时已经标出“不替换”。我们可以根据图像得出规律,FIFO的图像规律类似于一条波浪线,因此可以检查“波浪线”来看自己是否替换正确。
缺页中断率
此时的缺页中断率为10/13。不知道缺页中断率的小伙伴可以看文章开头的提示。
OPT最佳页面替换算法
定义
OPT,Optimal Page Replacement,最佳页面替换算法,是一种基于全局信息做出决策的页面替换算法,每次选择未来最长时间不再被访问的页面进行替换,可以达到最低的缺页率。
举例
策略
仍然假设我们有一组需要替换的页面(7,0,1,2,0,3,0,4,2,3,0,3,2),有三个空间可以用来替换,我们使用OPT算法进行替换,可以遵循以下策略:
- 先写下需要替换的页面
- 依次放入三个空间,若有空空间则直接放入,没有空空间则“向未来看”,寻找已经存入的页面哪一个最久没有被使用,将他替换。
- 不断重复上面的步骤,直到完成所有页面的替换。
思路
根据策略,我们可以得出如下思路:
- 有三个空位,7放入。此时的三个页面为7-空-空。
- 有两个空位,0放入。此时的三个页面为7-0-空。
- 有一个空位,1放入。此时的三个页面为7-0-1。
- 没有空位,2与未来将要出现的页面比较,7最长时间没有出现,2替换7,此时的三个页面为2-0-1。
- 没有空位,0已经出现不换。
- 没有空位,3与未来将要出现的页面比较,1最长时间没有出现,3替换1,此时的三个页面为2-0-3。
- 没有空位,0已经出现不换。
- 没有空位,4与未来将要出现的页面比较,0最长时间没有出现,4替换0,此时的三个页面为2-4-3。
以此类推,我们可以得到最终解。最后的结果为2-0-3
最终解
PS:灵魂画手梅开二度
缺页中断率
缺页中断率为7/13。
LRU最近最少使用算法
定义
LRU,Least Recently Used,最近最少使用算法,如果一个数据最近被访问过,那么将来被访问的可能性也较大。因此,它选择最近最长时间未被访问的页面进行替换。LRU的性能和效率接近OPT,但是对于频繁访问的页面更新开销较大。
举例
策略
还是假设我们有一组需要替换的页面(7,0,1,2,0,3,0,4,2,3,0,3,2),有三个空间可以用来替换,我们使用LRU算法进行替换,可以遵循以下策略:
- 先写下需要替换的页面
- 依次放入三个空间,若有空空间则直接放入,没有空空间则“向过去看”,寻找已经存入的页面哪一个最久没有被使用,将他替换。
- 不断重复上面的步骤,直到完成所有页面的替换。
思路
根据策略,我们可以得出如下思路:
- 有三个空位,7放入。此时的三个页面为7-空-空。
- 有两个空位,0放入。此时的三个页面为7-0-空。
- 有一个空位,1放入。此时的三个页面为7-0-1。
- 没有空位,2和过去出现的页面7-0-1比较,7最久没被使用,2替换7,此时的三个页面为2-0-1。
- 没有空位,0已出现,不换。
- 没有空位,3和过去出现的页面2-0-1比较,1最久没被使用,3替换1,此时的三个页面为2-0-3。(解释:因为0刚刚使用过,只是没有被替换掉,因此此时最久没被使用的页面时1)
- 没有空位,0已出现,不换。
- 没有空位,4和过去出现的页面2-0-3比较,2最久没被使用,4替换2,此时的三个页面为4-0-3。
以此类推,我们可以得到最终解,最终完成替换后的页面为0-3-2。
最终解
灵魂画手梅开三度
PS:这里博主发现一个不知道是否可以称为规律的规律:将要被替换的三个页面向“过去”数,出现次数最多的把他替换。比如上面例子中的页面4,在他之前,2出现4次,0出现6次,3出现2次,0出现的次数最多,因此它最长时间没被使用,需要替换0。
这里博主写的时候也愣了一下,有点被自己绕进去了,需要好好体会,或多看文章,纳广见于脑中才能得出一个相对正确的答案。
缺页中断率
缺页中断率为9/13。
结束语
今天对操作系统中的三种页面替换算法的解释就到这里,希望对大家有帮助,如果对您有所帮助,希望您可以留下点赞或关注,让我的文章进入您的收藏夹吃灰或者留下您的建议也可以,这对我真的很重要,谢谢!