1 最佳置换算法(OPT,Optimal)
1.1定义
每次选择淘汰的页面将是以后永不使用,或者在最长时间内不再被访问的页面,这样可以保证最低的缺页率。
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页面。但是由于7,0,1这三个页面都是之前未被访问(缺页)的,所以发生了页面中断。
-
第四步:由于2页面之前没有被访问过,并且目前已经没有空闲的页面了,于是需要选择从 0,1,7 中淘汰一 页。采用最佳置换算法(OPT)规则,往后寻找,最后一个出现 的页号就是要淘汰的页面。
-
第五步:由于0号页面已经存在于访问的页面中,所以无需再访问。
。。。。。。。。。。 -
第六步:与第四步类似
-
结果
整个过程缺页中断发生了9次,页面置换发生了6次。
注意:缺页时未必发生页面置换。若还有可用的空闲内存块,就不用进行页面置换。
缺页率 = 9/20 = 45%
1.3特点
- 缺点:最佳置换算法是一种理想化算法,具有较好的性能,但是实际上无法实现(无法预知一个进程中的若干页面哪一个最长时间不被访问);
- 优点:最佳置换算法可以保证获得最低的缺页率
2 先进先出置换算法(FIFO)
2.1定义
每次选择淘汰的页面是最早进入内存的页面
- 实现方法:把调入内存的页面根据调入的先后顺序排成一个队列,需要换出页面时选择队头页面即可。 队列的最大长度取决于系统为进程分配了多少个内存块。
2.2 例题
例1:假设系统为某进程分配了三个内存块,并考虑到有以下页面号引用串:
3, 2, 1, 0, 3, 2, 4, 3, 2, 1, 0, 4
例2:假设系统为某进程分配了四个内存块,并考虑到有以下页面号引用串:
3, 2, 1, 0, 3, 2, 4, 3, 2, 1, 0, 4
分配四个内存块时, 缺页次数:10次;分配三个内存块时,缺页次数:9次
Belady 异常——当为进程分配的物理块数增大时,缺页次数不减反增的异常现象。
2.3特点
- 优点:先进先出算法实现简单,是最直观的一个算法
- 缺点:先进先出的性能最差,因为与通常页面的使用规则不符合,所以实际应用少
3 最近最久未使用置换算法(LRU,least recently used)
3.1定义
每次淘汰的页面是最近最久未使用的页面
实现方法:赋予每个页面对应的页表项中,用访问字段记录该页面自上次被访问以来所经历的时间t。当需要淘汰一个页面时,选择现有页面中t值最大的,即最近最久未使用的页面。
3.2 例题
例:假设系统为某进程分配了四个内存块,并考虑到有以下页面号引用串:
1, 8, 1, 7, 8, 2, 7, 2, 1, 8, 3, 8, 2, 1, 3, 1, 7, 1, 3, 7
在手动做题时,若需要淘汰页面,可以逆向检查此时在内存中的几个页面号。在逆向扫描过程中最后一个出现的页号就是要淘汰的页面。
3.3 特点
- 优点:由于考虑程序访问的时间局部性,一般能有较好的性能;实际应用多
- 缺点:实现需要较多的硬件支持,会增加硬件成本
如果还是不能理解的同学,建议可以看看王道的视频页面置换算法