最佳置换算法是一种理想化的算法,它具有最好的性能,但实际上是无法实现的。通常使用最佳置换算法作为标准,来评价其它算法的优劣。
先进先出置换算法是最直观的算法,由于与通常页面的使用规律不符,可能是性能最差的算法,故实际应用极少。
一、最佳(Optional)置换算法
最佳置换算法是由Belady于1966年提出的一种理论上的算法,其所选择的被淘汰页面将是以后永不使用的,或许是在最长(未来)时间内不再被访问的页面。采用最佳页面置换算法可保证获得最低的缺页率。但由于人们目前还无法预知,一个进程在内存中的若干个页面中,哪一个页面是未来最长时间内不再被访问的,因而该算法是无法实现的,但可以利用该算法去评价其它算法。
二、先进先出(FIFO)页面置换算法
FIFO算法是最早出现的置换算法。该算法总是淘汰最先进入内存的页面,即选择在内存中驻留时间最久的页面予以淘汰。该算法实现简单,只需把一个进程已调入内存的页面按先后次序链接成一个队列,并设置一个指针,成为替换指针,使它总是指向最老的页面。但该算法与进程实际运行的规律不相适应,因为在进程中,有些页面经常被访问,比如,含有全局变量、常用函数、例程等的页面,FIFO算法并不能保证这些页面不被淘汰。
三、最近最久未使用(LRU:Least Recently Used)置换算法
最近最久未使用(LRU)的页面置换算法是根据页面调入内存后的使用情况做出决策的。由于无法预测各页面将来的使用情况,只能利用“最近的过去”作为“最近的将来”的近似,因此,LRU置换算法是选择最近最久未使用的页面予以淘汰。该算法赋予每个页面一个访问字段,用来记录一个页面自上次被访问以来所经历的时间t。当需淘汰一个页面时,选择现有页面中其t值最大的,即最近最久未使用的页面予以淘汰。
四、举例说明
1.在一个分页请求系统中,分别采用最佳页面置换算法、先进先出页面置换算法、最近最久未使用页面置换算法时,假如一个作业的页面走向为4、3、2、1、4、3、5、4、3、2、1、5,当分配给该作业的物理块数M分别为3和4时,试计算在访问过程中所发生的缺页次数和缺页率。试给出分析过程。
(1)最佳置换算法分析过程:【看要被置换的数的后面】
使用最佳页面置换算法,其所选择的被淘汰页面将是以后永不使用的,或许是在最长(未来)时间内不再被访问的页面。当物理块为3时,因为页面4将作为第5个被访问的页面,页面3是第6个被访问的页面,而页面2则是第10个被访问的页面。所以,第一次页面置换时,置换出2。后面同理;当物理块为4时,同理也可画出其页面置换图。
页面置换图如下所示:
访问页面 | 4 | 3 | 2 | 1 | 4 | 3 | 5 | 4 | 3 | 2 | 1 | 5 |
物理块1 | 4 | 4 | 4 | 4 | 4 | 2 | 1 | |||||
物理块2 | 3 | 3 | 3 | 3 | 3 | 3 | ||||||
物理块3 | 2 | 1 | 5 | 5 | 5 | |||||||
是否缺页 | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
访问页面 | 4 | 3 | 2 | 1 | 4 | 3 | 5 | 4 | 3 | 2 | 1 | 5 |
物理块1 | 4 | 4 | 4 | 4 | 4 | 1 | ||||||
物理块2 | 3 | 3 | 3 | 3 | 3 | |||||||
物理块3 | 2 | 2 | 2 | 2 | ||||||||
物理块4 | 1 | 5 | 5 | |||||||||
是否缺页 | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
综上所述,当物理块为3时,缺页次数为7次,缺页率为7/12,即58.3%;当物理块为4时,缺页次数为6次,缺页率为6/12,即50%。
(2)先进先出页面置换算法分析过程:
当进程第一次访问页面1时,将把第4页换出,因为它是最先被调入内存的;在第二次访问页面4时,将把页面3换出,因为它在现有的1、3、2三个页面中是最老的页。
页面置换图如下所示:
访问页面 | 4 | 3 | 2 | 1 | 4 | 3 | 5 | 4 | 3 | 2 | 1 | 5 |
物理块1 | 4 | 4 | 4 | 1 | 1 | 1 | 5 | 5 | 5 | |||
物理块2 | 3 | 3 | 3 | 4 | 4 | 4 | 2 | 2 | ||||
物理块3 | 2 | 2 | 2 | 3 | 3 | 3 | 1 | |||||
是否缺页 | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
访问页面 | 4 | 3 | 2 | 1 | 4 | 3 | 5 | 4 | 3 | 2 | 1 | 5 |
物理块1 | 4 | 4 | 4 | 4 | 5 | 5 | 5 | 5 | 1 | 1 | ||
物理块2 | 3 | 3 | 3 | 3 | 4 | 4 | 4 | 4 | 5 | |||
物理块3 | 2 | 2 | 2 | 2 | 3 | 3 | 3 | 3 | ||||
物理块4 | 1 | 1 | 1 | 1 | 2 | 2 | 2 | |||||
是否缺页 | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
综上所述,当物理块为3时,缺页次数为9次,缺页率为9/12,即75%;当物理块为4时,缺页次数为10次,缺页率为10/12,即83.3%。
因此,增加分配给作业的内存块数,不一定会减少缺页次数,降低缺页率。
(3)最近最久未使用页面置换算法分析过程:【看要被置换的数的前面】
最近最久未使用页面置换算法是根据页面调入内存后的使用情况置换的。因此,当物理块为3时,页面4是第1次被访问的页面,页面3是第2次被访问的页面,页面2是第3次被访问的页面,所以第一次页面置换时置换出4,后面同理;当物理块为4时,同理也可画出其页面置换图。
页面置换图如下所示:
访问页面 | 4 | 3 | 2 | 1 | 4 | 3 | 5 | 4 | 3 | 2 | 1 | 5 |
物理块1 | 4 | 4 | 4 | 1 | 1 | 1 | 5 | 2 | 2 | 2 | ||
物理块2 | 3 | 3 | 3 | 4 | 4 | 4 | 4 | 1 | 1 | |||
物理块3 | 2 | 2 | 2 | 3 | 3 | 3 | 3 | 5 | ||||
是否缺页 | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
访问页面 | 4 | 3 | 2 | 1 | 4 | 3 | 5 | 4 | 3 | 2 | 1 | 5 |
物理块1 | 4 | 4 | 4 | 4 | 4 | 4 | 4 | 5 | ||||
物理块2 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | |||||
物理块3 | 2 | 2 | 5 | 5 | 1 | 1 | ||||||
物理块4 | 1 | 1 | 2 | 2 | 2 | |||||||
是否缺页 | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
综上所述,当物理块为3时,缺页次数为10次,缺页率为10/12,即83.3%;当物理块为4时,缺页次数为8次,缺页率为8/12,即66.67%。