1. 页面状态分类

每个页面的状态由两个标志位决定:

  • A(Access Bit/访问位):页面最近是否被访问过(读/写)。
  • M(Modify Bit/修改位):页面是否被修改过(是否为脏页)。

状态组合共有4种类型,按置换优先级从高到低排序:

  1. A=0, M=0:未被访问且未被修改(最优淘汰目标)。
  2. A=0, M=1:未被访问但被修改(需要写回磁盘)。
  3. A=1, M=0:被访问但未被修改(可能再次被访问)。
  4. A=1, M=1:被访问且被修改(最不希望淘汰)。

2. 算法执行步骤

当发生缺页中断时,按以下步骤选择淘汰页面:

步骤1:扫描第一轮(寻找A=0, M=0)
  • 从当前指针位置开始循环扫描页面。
  • 如果找到 A=0且M=0 的页面:
    • 直接淘汰该页面。
    • 更新指针到下一个位置。
    • 结束置换
  • 如果未找到,进入步骤2。
步骤2:扫描第二轮(寻找A=0, M=1)
  • 重新从指针位置开始扫描。
  • 对扫描过的页面执行操作:
    • 如果 A=1 → 将A位清零(模拟“第二次机会”)。
    • 如果找到 A=0且M=1 的页面:
      • 淘汰该页面。
      • 更新指针到下一个位置。
      • 结束置换
    • 如果未找到,回到步骤1重新扫描(此时可能有A=0的页面出现)。

3. 算法特点

  • 减少I/O开销:优先淘汰未修改(M=0)的页面,避免写回磁盘。
  • 近似LRU:通过周期性清零A位,近似实现最近最少使用策略。
  • 时间复杂度:最坏情况下需要两轮扫描,但实际效率较高。

4. 示例流程

假设页面链表中页面状态如下(指针初始指向Page1):

页面 A M
P1 1 0
P2 0 1
P3 0 0
P4 1 1
  1. 步骤1:寻找A=0, M=0。
    • P1(A=1) → 跳过。
    • P2(A=0, M=1) → 不满足条件。
    • P3(A=0, M=0) → 淘汰P3,置换结束。

若P3不存在:
2. 步骤2:寻找A=0, M=1。

  • P1(A=1) → A清零→ A=0。
  • P2(A=0, M=1) → 淘汰P2

5. 对比基本Clock算法

  • 基本Clock:仅考虑A位,可能频繁淘汰脏页(M=1),增加I/O开销。
  • 改进型Clock:综合A和M位,优先淘汰干净页,系统开销更低。

改进型Clock算法通过权衡访问频率修改状态,在保证性能的同时优化了置换效率,是实际系统中常用的页面置换策略(如Linux的近似LRU算法)。

Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐