操作系统页面置换算法FIFO——Belady异常与一个简单案例
一、引言
在操作系统中,页面置换是一个重要知识点,是用于解决内存空间有限核心技术。当进程访问的页面不在内存时,发生缺页异常,操作系统会将目标页面从外存调入内存,倘若此时该进程已无空闲块,就需要使用到页面置换技术。
而FIFO(First In First Out,即先进先出)是页面置换算法中最基础、最容易实现的一个算法。但它存在一个非常严重的违反常识的缺陷:即当增加内存块后,缺页率不降反增!
本文通过一个简单的案例,简单展示这种现象,即Belady异常。
二、简述FIFO页面置换算法原理
通过访问时间顺序,每当需要页面置换时,换出那个最早进入的页面。要做到这一点,只需维护一个访问队列,队首位最早当前进入的页面。
三、触发Belady异常的一个经典案例
如下图、当访问序列编号为1 2 3 4 1 2 5 1 2 3 4 5 时:
当该进程分配的物理块数为3时,缺页率为70.00%,而当物理块数上升到4时,缺页率不降反增,来到了83.33%。
四、为什么FIFO会发生Belady 异常
FIFO算法 的仅依据页面进入内存的时间排序,不考虑页面的未来访问概率,即不考虑空间局部性设计。
当物理块数增加时,可能会留下的仅仅是那些未来不再访问的页面,而将即将访问的页面替换出去,导致更多缺页,缺页率不降反增。