第九讲 页面置换算法

来源:互联网 发布:手机淘宝保证金怎么退 编辑:程序博客网 时间:2024/06/06 12:45

第九讲 页面置换算法

局部页面置换算法主要包括以下:

  • 最优页面置换算法
  • 先进先出算法
  • 最近最久未使用算法(LRU,Least Recently Used)
  • 时钟页面置换算法(clock)
  • 最不常用算法(LFU,Least Frequently Used)
  • Belady现象
  • LRU,FIFO和clock的比较

最优页面置换算法(OPT,optimal)

基本思想:置换在未来最长时间不访问的页面
算法实现:

  • 缺页时,计算内存中每个逻辑页面的下一次访问时间
  • 选择未来最长时间不访问的页面

算法特征

  • 缺页最少,是理想情况
  • 实际系统中无法实现
  • 无法预知每个页面在下次访问前的等待时间
  • 作为置换算法的性能评价依据,在模拟器上运行某个程序,并记录每一次的页面访问情况,第二遍运行时使用最优算法

下表给出了最优页面置换算法的一个示例

时间 0 1 2 3 4 5 6 7 8 9 10 访问请求 c a d b e b a b c d 0 a a a a a a a a a a 1 b b b b b b b b b b 2 c c c c c c c c c c 3 d d d d d e e e e e 缺页状态 0 每页的下次访问时间 a=7
b=6
c=9
d=10

先进先出算法(First-In First-out,FIFO)

思路:选择在内存驻留时间最长的页面进行置换
实现:

  • 维护一个记录所有位于内存中的逻辑页面链表
  • 链表元素按驻留内存的时间排序,链首最长,链尾最短
  • 缺页时,选择链首页面进行置换,新页面加到链尾

特征:

  • 实现简单
  • 性能较差,调出的页面可能是经常访问的
  • 进程分配物理页面数增加时,缺页并不一定减少(Belady现象)

最近最久未使用算法(Least Recently Used,LRU)

思路:

  • 选择最长时间没有被引用的页面进行置换
  • 如某些页面长时间未被访问,则它们在将来还可能会长时间不会访问

实现:

  • 缺页时,计算内存中每个逻辑页面的上一次访问时间
  • 选择上一次使用到当前时间最长的页面

特征:最优置换算法的一种近似

LRU算法的可能实现算法
1.页面链表

  • 系统维护一个按最近一次访问时间排序的页面链表
    • 链表首节点是最近刚刚使用过的页面
    • 链表尾节点是最久未使用的页面
  • 访问内存时,找到相应页面,并把它移到链表之首
  • 缺页时,置换链表尾节点的页面

2.活动页面栈:

  • 访问页面时,将此页号压入栈顶,并栈内相同的页号抽出
  • 缺页时,置换栈底的页面

下表给出了最近最久未使用算法的一个示例

时间 0 1 2 3 4 5 6 7 8 9 10 访问请求 c a d b e b a b c d 0 a a a a a a a a a a a 1 b b b b b b b b b b b 2 c c c c c e e e e e d 3 d d d d d d d d d c c 缺页状态 0 0 0 每页的下次访问时间 a=7
b=6
c=9
d=10 a=7
b=8
e=5
d=3 a=7
b=8
e=5
c=9