1、为什么要有页面置换算法
程序运行过程中,有时要访问的页面不在内存中,而需要将其调入内存。但是内存已经无空闲空间存储页面,为保证程序正常运行,系统必须从内存中调出一页程序或数据送到磁盘对换区,此时需要一定的算法来决定到低需要调出那个页面。通常将这种算法称为“页面置换算法”。
2.页面置换算法的分类
2.1 最佳置换算法(OPT)
(1)实现原理:每次选择未来长时间不被访问的或者以后永不使用的页面进行淘汰。
(2)举例:假定系统为某进程分配了三块物理块,并有以下页面:
7,0,1,2,0,3,0,4,2,3,0,3,2,1,2,0,1,7,0,1
程序运行时,先将7,0,1三个页面装入内存。
当进程要访问页面2的时候,将会产生缺页中断。
此时根据最佳置换算法,因为页面7要在第18次才能访问,页面0在第5次访问,页面1在第14次访问,页面7最久不被使用,所以将页面7淘汰;
当进程0要访问时,因为它已存在在内存所以不必产生缺页中断;
当页面3要访问时,又引起缺页中断淘汰1;
依次类推直到最后一个页面访问完。下图为采用最佳置换算法的置换图。
由图可得,采用最佳置换算法发生了6次缺页中断。
(3)特点
- 缺点:最佳置换算法是一种理想化算法,具有较好的性能,但是实际上无法实现(无法预知一个进程中的若干页面哪一个最长时间不被访问);
- 优点:最佳置换算法可以保证获得最低的缺页率
2.2 先进先出页面置换算法(FIFO)
(1)实现原理:淘汰最先进入内存的页面,即选择在页面待的时间最长的页面淘汰。
(2)举例
依旧是上一个算法的例子
程序运行时,先将7,0,1三个页面装入内存。
当进程要访问页面2的时候,将会产生缺页中断。
此时根据先进先出置换算法,因为页面7是最先进入内存的,所以将页面7换出;
当进程0要访问时,因为它已存在在内存所以不必产生缺页中断;
在进程要访问页面3的时候,因为页面0是最早进入内存的,所以将页面0换出;
依次类推直到最后一个页面访问完。下图为采用先进先出置换算法的置换图。
由图可得,采用最佳置换算法发生了12次缺页中断。先进先出的页面置换比最佳置换算法的页面置换正好多了一倍;
(3)特点
- 优点:先进先出算法实现简单,是最直观的一个算法
- 缺点:先进先出的性能最差,因为与通常页面的使用规则不符合,所以实际应用少
2.3 最近最久未使用置换算法(LRU)
(1)实现原理:选择最近且最久未被使用的页面进行淘汰
(2)举例:
依旧是上一个算法的例子
程序运行时,先将7,0,1三个页面装入内存。
当进程要访问页面2的时候,将会产生缺页中断。
此时根据最近最久未使用置换算法,因为页面7是最近最久未被使用的的,所以将页面7淘汰;
当进程0要访问时,因为它已存在在内存所以不必产生缺页中断;
在进程要访问页面3的时候,因为页面1是最近最久未被使用的,所以将页面1淘汰;
依次类推直到最后一个页面访问完。
下图为采用最近最久未使用的置换算法的置换图。由图可得,采用最近最久未使用置换算法发生了9次缺页中断。
(3)特点
- 优点:由于考虑程序访问的时间局部性,一般能有较好的性能;实际应用多
- 缺点:实现需要较多的硬件支持,会增加硬件成本