页面置换算法

把选择换出页面的算法称为页面置换算法
刚被换出的页面很快又要被访问,重新调入,此时又要选择一页换出称为“抖动”

最佳换算法和先进先出置换算法
  • 最佳( O p t i m a l Optimal Optimal)换算法
    • 是一种理想化算法,实际上无法实现,被用来作为置换算法的标准
    • 该算法选择换出的页面是以后永不使用的,或者在最长(未来)时间内不会被访问的页面。
    • 需要预知页面的使用情况。
  • 先进先出( F I F O FIFO FIFO)页面置换算法
    • 选择驻留时间最久的页面换出。
    • 实现: 将已调入的页面先后链接成一个列,使用一个替换指针指向****最老的页面
    • 性能较差:因为算法依据是页面调入内存的时间,并不能反映页面的使用情况

最近最久未使用和最少使用置换算法
  • L R U ( L e a s t    R e c e n t l y    U s e d ) LRU(Least\;Recently\;Used) LRU(LeastRecentlyUsed)置换算法
    • 算法依据页面调入内存后的使用情况,为每个业面设置一个访问字段,记录页面至上一次访问的时间t。淘汰的时候淘汰t最大的页面。
    • 硬件支持
      • 移位寄存器,表示为:
        R = R n − 1 R n − 2 R n − 3 . . . R 2 R 1 R 0 R = R_{n-1}R_{n-2}R_{n-3}...R_{2}R_{1}R_{0} R=Rn1Rn2Rn3...R2R1R0
      • 栈:保存当前使用的各个页面的页面号。访问某页面时,便将该页面号从栈中移出压入栈顶(即栈顶的是最新使用的,栈底是最久未使用的)
  • 最少使用( L F U ( L e a s t    F r e q u e n t l y    U s e d ) LFU(Least\;Frequently\;Used) LFU(LeastFrequentlyUsed))置换算法
    • 使用移位寄存器,访问页面时,将移位寄存器的最高置1,然后每个一段时间右移一位
    • 该算法并不能真正反映页面的使用情况,因为在规定的时间间隔内(例如100ms),访问一次和访问1000次的结果是等效的。
    • 使用和 L R U LRU LRU相同的硬件

Clock置换算法

L R U LRU LRU算法的近似算法

  • 简单的Clock算法(最近未用算法或者 N R U ( N o t    R e c n e t l y    U s e d ) NRU(Not\;Recnetly\;Used) NRU(NotRecnetlyUsed)算法)
    • 为每个页面设置一位访问位,并将内存中所有的页面通过链接指针链接成一个循环队列;
    • 当某一页被访问时,访问位置1;
    • 选择淘汰页面时,只需检查访问位,如果为0,则换出
    • 如果为1, 置0,不换出
    • 若检查至最后一页时,仍为1,则返回队首检查第一个页面
  • 改进型Clock算法
    • 引入置换代价(换出时所付出的开销(如 I / O I/O I/O操作))
    • 设置修改位M,则和访问位A可以组成以下四种类型的页面
      • A = 0; M = 0:最近既未被访问,也未被修改;最佳淘汰页
      • A = 0; M = 1:近未被访问,但已被修改;不是很好的淘汰页
      • A = 1; M = 0:最近被访问,但没有被修改;可能再次被访问
      • A = 1; M = 1:最近已被访问且被修改,可能再次被访问
    • 执行过程
      1. 扫描队列,寻找 A = 0;M = 0 的页面作为淘汰页;
      2. 如果a步骤扫描失败,则寻找 A = 0;M = 1 的页面作为淘汰页 ;第二次扫描将所有的 A 置 0;
      3. 重复a,若失败,则重复b,此时一定能找到淘汰页。
    • 与简单Clock算法比较
      • 减少磁盘的 I / O I/O I/O操作
      • 增加了本身的开销

页面缓冲算法 ( P a g e    B u f f e r i n g    A l g o r i t h m ,    P B A ) (Page\;Buffering\;Algorithm,\;PBA) (PageBufferingAlgorithm,PBA)
  • 影响页面换出换出效率的因素
    • 页面置换算法:的页面置换算法意味着低缺页率,从而减少换入换出的页面开销;
    • 写回磁盘的频率:可以积攒多个页面后在一次性写回外存;
    • 读入内存的频率:设置已修改换出的页面链表,如果进程在这批数据未写回外存前访问这些页面,则可以直接在内存中调用。
  • 页面缓冲算法 P B A PBA PBA
    • 特点
      • 降低换入换出的频率
      • 较少 I / O I/O I/O操作
    • 设置两个链表
      • 空闲页面链表:系统掌握的空闲物理块,可以分配给缺页率高的进程,从而降低缺页率。
      • 修改页面链表:由被换出且已修改的页面组成的链表。目的是降低修改页协会磁盘的频率、降低从磁盘读入内存的频率。

访问内存的有效时间
  • 被访问页在内存中,且对应的页表项在页表中,设查找快表的时间为 λ \lambda λ,访问实际物理地址的时间为 t t t
    E A T = λ + t EAT = \lambda + t EAT=λ+t
  • 被访问的页在内存中,且对应的页表项不在快表中,设查找快表的时间为 λ \lambda λ,页表的时间为 t t t,修改快表的时间为 λ \lambda λ,访问实际物理地址的时间为 t t t,则
    E A T = λ + t + λ + t = 2 ( λ + t ) EAT = \lambda + t + \lambda + t = 2(\lambda+t) EAT=λ+t+λ+t=2(λ+t)
  • 被访问的页不在内存中设查找快表的时间为 λ \lambda λ,查找页表的时间为 t t t,中段处理时间为 ϵ \epsilon ϵ,修改快表的时间为 λ \lambda λ,访问实际物理地址的时间为 t t t ,则
    E A T = λ + t + ϵ + λ + t = ϵ + 2 ( λ + t ) EAT = \lambda + t + \epsilon + \lambda + t = \epsilon + 2(\lambda+t) EAT=λ+t+ϵ+λ+t=ϵ+2(λ+t)
  • 考虑命中率 a a a和缺页率 f f f后,
    E A T = λ + a × t + ( 1 − a ) × [ t + f × ( ϵ + λ + t ) + ( 1 − f ) × ( λ + t ) ] EAT = \lambda + a \times t + (1-a) \times [t + f \times (\epsilon + \lambda + t) + (1-f) \times (\lambda + t)] EAT=λ+a×t+(1a)×[t+f×(ϵ+λ+t)+(1f)×(λ+t)]
  • 不考虑缺页率,则 λ = 0 \lambda = 0 λ=0, a = 0 a = 0 a=0,设中断处理时间为 θ \theta θ
    E A T = t + f × ( θ + t ) + ( 1 − f ) × t EAT = t + f \times (\theta + t) + (1-f) \times t EAT=t+f×(θ+t)+(1f)×t
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值