页面置换算法

时间:2021-06-19 20:05:19

页面置换算法的概念:

    出现缺页异常,则需调入新页面二内存已满时,置换算法选择被置换的物理页面。尽可能减少页面的调如调出次数,把未来不再访问或短期内不访问的页面调出。

页面锁定framelocking:常驻的逻辑页面,操作系统的关键部分,要求相应速度快的代码和数据,页表中的锁定标志位lock bit。

 

页面置换算法分类:

局部页面置换算法:置换范围仅限于当前进程占用的物理页面;

最优算法、先进先出算法、最近最久未使用算法;

时钟算法、最不常用算法。

全局页面置换算法:置换范围是所有可能可换出的物理界面;

                  工作集算法、缺页率算法。

局部页面置换算法:

(1)最优页面置换算法OPT,optimal:缺页时,计算内存中每个逻辑页面的下一次访问时间,选择未来最长时间不访问的页面,缺点是太理想,实际无法实现。

最优页面置换算法实例

页面置换算法

(2)先进先出算法First In First Out,FIFO:在内存驻留时间最长的页面进行置换。维护一个记录逻辑页面链表,缺页时首页面进行置换,新页面加到链尾。

缺点是:性能较差,进行分配物理空间页面数增加时,缺页不一定能减少(Belady现象,页面刚刚被置换,但是下一次又用上),所以很少单独使用。

页面置换算法

(3)最近最久未使用算法Least Recently Used,LRU:选择最长时间没有 被引用的页面进行置换(假设在过去经常访问,未来也经常访问),缺点是开销比较大。

实现方法:

页面链表,按照最近一次访问的时间排序,链尾是最近最久未使用的。

活动页面栈:访问页面时,将此页号压入栈顶,并抽调之前相同的页号,缺页时,置换栈底的页面。

 页面置换算法

(4)时钟页面置换算法Clock:仅对页面的访问情况进行大致统计

数据结构:页表项中增加访问位,页面组成环形链表,指针指向最先调入的页面。

算法是:访问时记录下访问的情况,缺页时,从指针处开始顺序查找违背访问的页面进行置换。在FIFO和LRU中进行折中考虑。(若访问位为0.则可以替换;访问位1则将访问位置为0,并移至下一位)

 页面置换算法

(5)最不常用算法Least Frequently Used,LFU:缺页时,置换访问次数最少的页面。

实现:每个页面设置一个访问技术,每次访问计数+1,缺页时置换最小的页面。

LRU和LFU:前者是关注多久未访问,后者关注访问次数。

页面置换算法

(6)Belady现象:物理页面增多,缺页次数反而增多的异常现象。

(7)LRU、LFU、Clock的比较

LRU性能好,但开销大;FIFO开销少,会发生Belady现象;Clock算法是两者的折中。

 

全局页面置换算法:为进程分配可变数目的物理页面。

(1)工作集置换算法:一个进程当前正在使用的逻辑页面集合,可表示为二元函数W(t,△),在当前时刻的△时间窗口中所有访问页面所组成的集合,绝对值是页面数目。常驻集:系统分配给进程的物理页面数目。

访存时,换出不在工作集的页面,更新访存链表;缺页时换入页面,更新访存链表。

页面置换算法

(2)缺页率置换算法PFF,Page-Fault-Frequency,通过调整常驻集使得每个进程的缺页率保持在一个合理的范围:缺页率过高,则增加常驻集;缺页率过低,则减少常驻集。

缺页率:缺页次数/内存访问次数。影响因素:置换算法、物理页面数目、页面大小、程序编写方法。

(3)抖动和负载控制

抖动thrashing,进程物理页面太少,不能包含工作机;造成大量缺页,频繁置换,进程运行速度慢。原因是:驻留在内存的进程数据增加,分配给每个进程的物理页面减小,缺页率上升。操作系统需要再并发水平和缺页率之间达到一个平衡。

负载控制:MPL,平均缺页间隔时间MTBF=缺页异常处理时间PFST。

页面置换算法