置换策略
当请求调页程序要调进一个页面,但是该作业分配所得的主内存块已经全部用完,则必须淘汰改作业在贮存中的一个页面。置换算法就是决定选择哪一个页面进行淘汰的规则。
如置换算法不够好,就会导致刚淘汰的页面又被需要,因此又被调入,这样就会导致频繁的调入调出,系统仅仅花费在程序执行上的时间比例降低。更差的情况是,当调入频率超过主存和辅存之间的传输能力时,系统要等待完后页面传输才能继续有效执行程序,因此,CPU 的效率降低了,这种情况叫做颠簸(thrashin)。页面置换算法的目的就是尽量减少和排除颠簸的出现。
1)最佳置换算法(OPT算法)
假设一个程序有n页,分配给它的主存只有m页(m<n),在程序执行过程中,主存中如果有所需要的页,就称访问成功;如果需要调业,就称为产生缺页中断。我们把缺页中断的次数和总的访问次数的比例称为缺页中断率。缺页中断率和分配的主存大小,程序大小和置换算法有关。
OPT算法是指缺页中断率最小的算法,一般是指淘汰的页面不会被使用或者很长时间内不会再被使用。这肯定是不可以实现的,因为在程序执行过程中无法预测那些页面不会再被用到,因此无法向后估计。因此,OPT算法更多的是作为和其他算法进行对比的对象。
2)先进先出算法(FIFO)
顾名思义,选择最先进入主存中的页面进行淘汰,也就是说,最早调入的页面不被使用的概率比较大。保持一个次序表即可实现。
3)最久未使用算法(LRU)
顾名思义,选择最长时间未被使用的那一页进行淘汰,因为这一页面绝对是最不可能在将来用到的。这个算法实现比FIFO复杂,因为要根据每次页面的使用情况进行一次页面排序,这样就知道哪一个是最长时间未被使用的。硬件方法一般采用计数器实现,软件实现一般采用业号堆栈实现,即建立一个栈存储主存中可能淘汰的页号,当一个页面被访问过,就把这个页号放到栈顶,栈中原有的页面下移,这样栈底的页面就是需要淘汰的页面。如果一个页面已经存在,就把这个页面抽出。
这个算法最接近OPT,因为OPT是根据后续的页面进行最佳淘汰,LRU是根据使用过的页面就行最佳淘汰。
4)最不经常使用淘汰算法(LFU)
顾名思义,将最近应用次数最少的页面淘汰,可对每一个页面设置一个计数器,每一页被访问后就把计数器加1,过一段时间t后统一清除计数器。需要淘汰时,就淘汰计数值最小的页面。