页面置换算法
- 功能:需要调入页面时,选择内存中哪个物理页面被置换。称为replacement policy。
- 目标:把未来不再使用的或短期内较少使用的页面调出,通常只能在局部性原理指导下依据过去的统计数据进行预测;
- 页面锁定(frame locking):必须常驻内存的OS关键部分或时间关键(time-critical)的应用进程。实现方法为在页表中加上锁定标志位(lock bit)。
几种算法:
- 最佳页面算法(OPT)——选择“未来不再使用的”或“在离当前最远位置上出现的”页面被置换。
可用作其他算法 性能评价的依据
- 先进先出页面置换算法(FIFO)——选择建立最早的页面被置换。可以通过链表来表示各页的建立时间先后。
特点:性能较差。较早调入的页往往是经常被访问的页,这些页在FIFO算法下被反复调入和调出。并且有Belady现象。
Belady现象:采用FIFO算法时,如果对一个进程未分配它所要求的全部页面,有时就会出现分配的页面数增多,缺页率反而提高的异常现象。
Belady现象的描述:一个进程P要访问M个页,OS分配N个内存页面给进程P;对一个访问序列S,发生缺页次数为PE(S,N)。当N增大时,PE(S, N)时而增大,时而减小。
Belady现象的原因:FIFO算法的置换特征与进程访问内存的动态特征是矛盾的,即被置换的页面并不是进程不会访问的。
例:有一虚拟存储系统,采用先进先出的页面淘汰算法。在内存中为每个进程分配3块。进程执行时使用页号的顺序为 4 3 2 1 4 3 5 4 3 2 1 5
(1) 该进程运行时总共出现几次缺页。
(2) 若每个进程在内存有4块,又将产生几次缺页。
(3) 如何解释所出现的现象。
(1)m=3
(2)、m=4
m=3时,缺页中断9次
m=4时,缺页中断10次
(3)、FIFO页面淘汰算法会产生异常现象(Belady现象),即:当分配给进程的物理页面数增加时,缺页次数反而增加
- 最近最久未使用页面置换算法(LRU)——选择最后一次访问时间距离当前时间最长的一页并淘汰之。即淘汰没有使用的时间最长的页。
- 轮转算法(clock)(也称最近未使用算法(NRU, Not Recently Used))
- 最不经常使用(LFU)——选择到当前时间为止被访问次数最少的页面被置换;
例:某程序在内存中分配三个块,访问页的走向为4,3,2,1,4,3,5,4,3,2,1,5,按FIFO、 LRU、OPT算法分别计算缺页次数。
假设开始时所有页均不在内存。
eg:某程序在内存中分配四个块,访问页的走向为4,3,2,1,4,3,5,4,3,2,1,5,按LRU、OPT算法分别计算缺页次数
假设开始时所有页均不在内存