操作系统笔记-局部缺页置换算法
缺页置换算法
缺页置换算法分为局部和全局,这两者的划分点在于对应的算法是按照时间点置换还是按照时间范围置换。
假设现有请求页列表为[a,c,d,b,e,g,a,d,c,e],其中内存中最多存入4页,以此为基础讨论下面各个算法的性能。
最优置换算法
本算法的核心思想是假设我们现在知道所有的请求列表,那么就可以根据后续的请求来确定置换哪个页了。
根据请求列表[a,c,d,b,e,g,a,d,c,e],可以得出下列的请求过程:
第一次:[a], 内存允许的页大小为4,因此不会产生置换
第二次:[a,c],同上
第三次:[a,c,d], 同上
第四次:[a,c,d,b], 同上
第五次:[a,c,d,e],此时需要e页,产生置换,因为后面请求中不存在b页请求,因此将b页换出
第六次:[g,c,d,e], 因为后面acde都会请求到,此时置换哪一个都一样
第七次:[a,c,d,e],后续没有g页请求,因此将g页换出
第八次:[a,c,d,e], 所需页在内存中,无需置换
第九次:[a,c,d,e], 同上
第十次:[a,c,d,e],同上
通过上面的步骤可以看出,总共产生了3此缺页中断,此算法称为最优置换算法,但是实际中不可能实现,因为不能提前预知请求列表,但是可以将它作为评判标准,用于评判后续算法的好坏。
FIFO算法
本算法的核心是按照队列的方式决定置换哪个页,先被访问的先被置换。
根据请求列表[a,c,d,b,e,g,a,d,c,e],可以得出下列的请求过程:
第一次:[a], 内存允许的页大小为4,因此不会产生置换
第二次:[a,c],同上
第三次:[a,c,d], 同上
第四次:[a,c,d,b], 同上
第五次:[c,d,b,e],此时需要e页,产生置换,将头部a页换出
第六次:[d,b,e,g], 此时需要g页,产生置换,将头部c页换出
第七次:[b,e,g,a], 此时需要a页,产生置换,将头部d页换出
第八次:[e,g,a,d], 此时需要d页,产生置换,将头部b页换出
第九次:[g,a,d,c], 此时需要c页,产生置换,将头部e页换出
第十次:[a,d,c,e],此时需要e页,产生置换,将头部g页换出
通过上面的步骤可以发现,总共十次请求就产生了6次置换,性能明显差于最优置换算法。
LRU算法
LRU称为最近最少使用算法,顾名思义就是将最近访问最少的那个页置换出去。
根据请求列表[a,c,d,b,e,g,a,d,c,e],可以得出下列的请求过程:
第一次:[a], 内存允许的页大小为4,因此不会产生置换
第二次:[a,c],同上
第三次:[a,c,d], 同上
第四次:[a,c,d,b], 同上
第五次:[c,d,b,e],此时需要e页,产生置换,因为其他页使用频率相同,因此随机置换a页
第六次:[d,b,e,g], 此时需要g页,产生置换,因为其他页使用频率相同,因此随机置换c页
第七次:[b,e,g,a], 此时需要a页,产生置换,因为其他页使用频率相同,因此随机置换d页
第八次:[e,g,a,d], 此时需要d页,产生置换,因为b,e,g页使用频率相同,因此随机置换b页
第九次:[e,a,d,c], 此时需要c页,产生置换,因为e,g页使用频率最少,因此随机置换g页
第十次:[a,d,c,e],此时需要e页,不需要置换
因为例子的比较特殊,因此感觉此算法和FIFO挺像的,但是实际情况中因为存在空间局部性原理,因此产生的置换次数会比此例中少。
CLOCK算法
clock算法核心类似于循环列表,将内存页组成一个时钟的形式,并添加一个字段表示当前页是否被使用,每次需要置换时遍历该列表,如果是附加位为1,则将其置为0,继续循环,以此类推。
根据请求列表[a,c,d,b,e,g,a,d,c,e],可以得出下列的请求过程:
第一次:[1a], 内存允许的页大小为4,因此不会产生置换
第二次:[1a,1c],同上
第三次:[1a,1c,1d], 同上
第四次:[1a,1c,1d,1b], 同上
第五次:[0c,0d,0b,1e],此时需要e页,产生置换,遍历所有页后将附加位都置为0,第二轮循环是置换第一个遇到的附加位为0的a页
第六次:[0d,0b,1e,1g], 此时需要g页,产生置换,同上,置换c页
第七次:[0b,1e,1g,1a], 此时需要a页,产生置换,同上,置换d页
第八次:[1e,1g,1a,1d], 此时需要d页,产生置换,同上,置换b页
第九次:[0g,0a,0d,1c], 此时需要c页,产生置换,同上,置换e页
第十次:[0a,0d,0c,1e],此时需要e页,同上,置换g页
此处置换次数基本相同的原因是例子中的请求页过于分散,clock算法和lru算法性能相近。
增强版CLOCK算法
此算法的本质和clock算法相同,唯一的区别在于多了一位用于表示此页是否进行了写操作,因为如果当前页没有执行写操作,那么它的内容和硬盘中保存的内存相同,可以直接丢弃,无需执行写入操作,只有当两个附加位都为零时才可以进行置换,相当于给每个页增加了一次额外的机会。
belady现象
在传统印象中,如果我们增大的内存的页数,那么缺页置换应该相应的减少,但是根据算法的不同,这个结果也会不同,比如使用了FIFO算法的系统中,如果增大了内存页数,那么缺页次数反而增加了。这种现象被称为belady现象。

浙公网安备 33010602011771号