操作系统-页面置换算法

置换算法

当出现缺页异常时,需调入新页面而内存已满时,置换算法选择被置换的物理页面。要在该过程中,尽可能减少页面的调入调出次数。把可能就需要将未来不再访问或短期内不在访问的页面调出。
评价方法:模拟页面置换算法,记录产生缺页的次数。更少的缺页,更好的 性能。

最优页面置换算法

基本思路:置换在未来最长时间内不会被访问的页面。
实现:缺页时,计算内存中每个逻辑页面的下一次访问时间。选择未来最长时间不访问的页面。
特征:
- 缺页最少,理想情况。
- 实际系统中无法实现
- 无法预知每个页面在下一次访问前的等待时间
- 作为置换算法的性能评价依据。
举个例子:
这里写图片描述

先进先出置换算法

思路:选择在内存驻留时间最长的页面进行置换
实现:维护一个记录所有位于内存中的逻辑页面链表
链表元素按主流内存的时间排序,链首最长,链表最短
出现缺页时,选择链首页面进行置换,新页面加到链尾。
特征:

  • 实现简单
  • 性能较差,有可能调出的页面是经常访问的
  • 进程分配物理页面数增加时,缺页不一定减少
  • 很少单独使用

这里写图片描述

最近最久未使用算法

思路:选择最长时间没有被引用的页面进行置换。如果页面长时间未被访问,则它们在将来可能会长时间不会访问。
实现:缺页时,计算内存中每个逻辑页面的上一次访问时间。
选择上一次使用到当前最长的页面。
特征:最优置换算法的一种近似。
这里写图片描述

时钟置换算法

思路:仅对页面的访问情况进行大致统计。
对数据结构进行修改:
在页表项中增加访问位,描述页面在过去一段时间的访问情况。
各页面组织成环形链表。
指针指向最先调入的页面。
特征:时钟算法是LRU和FIFO的折中。

这里写图片描述

改进的clock算法:
减少修改页的缺页处理开销。
算法:在页面中增加的修改位,并在访问时进行相应修改。缺页时,修改页面标志位,以跳过有修改的页面。

最不常用算法

思路:缺页时,置换访问次数最少的页面。
实现:每个页面设置一个访问计数。
访问页面时,访问计数加1。
缺页时,置换计数最小的页面。

特征:
- 开销大。
- 开始时频繁使用,但以后不使用的页面很难置换。

抖动

抖动:

  • 进程物理页面太少,不能包含工作集。
  • 造成大量缺页,频繁置换。
  • 进程运行速度变慢。

产生抖动的原因:
随着驻留内存的进程数目增加,分配给每个进程的物理页面数不断减少,缺页率不断上升。

猜你喜欢

转载自blog.csdn.net/mxrrr_sunshine/article/details/80150251