【操作系统学习】内存管理(四)
内存管理目录:
10. 局部页面替换算法
(1)最优页面置换算法
- 基本思路:
- 当一个缺页中断发生时,对于保存在内存当中的每一个逻辑页面,计算在它的下一次访问之前,还需要等待多长时间,从中选择等待时间最长的那个,作为被置换的页面。
- 这只是一种理想情况,在实际操作系统中无法实现。因为操作系统无法知道每个页面需要等待多长时间才会再次被访问。
- 可用于其他算法的性能评价的依据。
(2)先进先出算法
- 基本思路:
- 选择在内存中驻留时间最长的页面并淘汰之。具体来说,系统维护着一个链表,记录了所有位于内存当中的逻辑页面。从链表的排列顺序来看,链首页面的驻留时间最长,链尾页面最短。当发生缺页中断时,把链首淘汰出局,并把新的页面添加到链表的末尾。
- 性能较差,调出的页面有可能是要经常访问的页面,并且有Belady现象。
- FIFO算法很少单独使用。
(3)最近最久未使用算法(LRU)
- 当一个缺页中断发生时,选择最久未使用的那个页面,并淘汰之。
- 它是对最优页面置换算法的一个近似,其依据是程序的局部性原理,即在最近一小段时间内,如果某些页面被频繁访问,那么在将来的一小段时间内,它们还可能被频繁地访问。反过来,如果在过去某些页面长时间未被访问,那么在将来它们还可能会长时间地得不到访问。
- 需要记录各个页面使用时间的先后顺序,开销较大。两种可能实现方法:
- 维护一个页面链表。
- 设置一个活动页面栈。
(4)时钟页面置换算法
- 基本思路:
- 需要用到页表项中的访问位,当一个页面被装入内存时,把该位初始化位0.然后如果该为被访问,把该位置为1
- 把各个页面组织成环形链表(类似钟面),把指针指向最老的页面(最先进来)
- 当发生一个缺页中断时,考察指针所指向的最老页面,若它的访问位为0,立即淘汰;若访问位为1,则把该位置为0,然后指针往下移动一格。如此下去,直到找到被淘汰的页面,然后把指针移动到它的下一格。
(5)二次机会法
(6)最不常使用算法(LFU)
- 基本思路:
- 当一个缺页中断发生时,选择访问次数最少的那个页面,并淘汰之。
- 实现方法
- 对每个页面设置一个访问计数器,每当一个页面被访问时,该页面的访问计数器+1 在发生缺页中断时,淘汰计数器最小的那个页面。
- LFU和LRU的区别
- LRU考察的是多久未访问,时间越短约好。而LFU考察的是访问的次数或频度,访问次数越多越好。
Belady现象:
- 在采用FIFO算法时,有时会出现分配的物理页面数增加,缺页率反而提高的异常现象。
- 原因
- FIFO算法的置换特性与进程访问内存的动态特性是矛盾的,与置换算法的目标是不一致的(即替换较少使用的页面),因此,被它替换出去的页面不一定是进程不会访问的。