内存置换算法

226 阅读2分钟

最优置换 opt

  • 根据未来 预测
  • 对于保存在内存中的每一个逻辑页面,计算它在下一次访问之前,还需要等待多长时间,从中选择等多时间最长的那个被置换出去。而LRU是根据过去。

先入先出

  • 选择在内存中驻留时间最长的页面。
  • belady 给它内存越多,缺页次数却越多。

LRU 最近最久未使用

  • 距当前的时间
  • 链表实现 替换或插入头,从链表尾替换出去
  • 栈 压栈,查看栈内是否有,

时钟页面置换算法

  • LRU的近似,对FIFO的一种改进
  • 利用页表的access bit 初始位为0,访问置1,组织成环形列表,把指针指向最老页面。缺页中断时,考查指针指向的最老页面,若为0,立即淘汰。若为1,把该位值为0,考查下一个位置。

比LRU差点

二次机会法

  • 减少向磁盘写的操作
  • 对时钟页面置换算法加强
  • 使用access bit(used bit) 和 dirty bit

LFU 最不常用算法

  • 使用次数
  • 维护计数器,硬件开销大

Belady现象

出现分配 的物理页面数增加,缺页率反而提高的异常现象。 FIFO会产生。 LRU 栈特性 不会产生。 CLock只用1个bit来模拟LRU算法 是FIFO和LRU的折衷。

全局页面置换算法

局部性没有得到满足的时候

  • 工作集 W(t,delta)delta为窗口大小 不在窗口内的都要换出去 每个时刻调整

  • 常驻集 缺页率页面置换算法 缺页次数/内存访问次数 当缺页率高的时候,增加工作集 当缺页率低的时候,减少工作集 缺页中断的时候调整

抖动问题

常驻集小于工作集时,会缺页,频繁置换,叫做抖动。 缺页平均时间MTBF