操作系统面试题 — 有哪些页面置换算法?

492 阅读6分钟

Author : Cyan_RA9
Source : 【卡码笔记】网站
Question : 有哪些页面置换算法?

【简要回答】

六种页面置换算法概述

  1. 最佳置换(OPT):淘汰未来最久不会被访问的页面。
  2. 先进先出(FIFO):淘汰最早进入内存的页面。
  3. 最近最久未使用(LRU):淘汰最近最久未被访问的页面(更注重上一次使用的时间)。
  4. 最少使用(LFU):淘汰使用频率最低的页面(更注重使用频率)。
  5. 时钟置换算法(Clock):基于引用位的近似LRU算法(基于循环队列实现)。
  6. 改进的时钟算法(改进Clock):同时考虑引用位和修改位的优化版本(细化了优先级)。

六种算法的优缺点和适用场景

  • 如下表所示:

    算法优点缺点适用场景
    OPT理论最优,缺页率最低。无法实现,需预知未来访问序列。理论分析,性能上限参考。
    FIFO实现简单,开销低。可能引发 Belady 异常 (增加内存反而缺页率上升)。对性能要求不高的简单系统。
    LRU基于局部性原理,性能接近 OPT。实现复杂,开销较高。对性能要求较高的通用系统。
    LFU适合访问频率差异明显的场景。对突发访问模式不敏感,可能淘汰常用页面。访问模式稳定的系统。
    Clock实现简单,性能接近 LRU。对引用位的判断可能不准确。需要平衡性能和复杂度的系统。
    改进 Clock同时考虑引用位和修改位,减少 I/O 开销。实现更复杂,开销略高。对 I/O 性能要求较高的系统。

【详细回答】

  1. 最佳置换(Optimal page replacement algorithm, OPT)
    • 概述:是指在每一次置换中都把将来不会再使用或者最长时间不再使用的页面调出。这是最高效的算法,但问题在于操作系统并不能预知接下来需要用到哪些页面,所以无法实现该算法。
    • 优点:理论最优,缺页率最低。
    • 缺点:无法实现,需预知未来访问序列。
    • 适用场景:用于理论分析,作为其他算法的性能上限参考
  2. 先进先出(First In First Out, FIFO)
    • 概述:是指每次置换都将最早被调入的页面调出内存。该算法是基于队列实现的,存在Belady异常(即增加内存中为进程分配的页框数,缺页率反而会上升)。
    • 优点:实现简单,开销低。
    • 缺点:可能引发Belady异常;且没有利用局部性原理,性能较差。
    • 适用场景:对性能要求不高的简单系统(几乎不会被使用)。
  3. 最近最久未使用(Least Recently Used, LRU)
    • 概述:是指将最长时间未被使用的页面置换出内存。LRU算法将局部性原理运用到算法之中,来预测未来一段时间内较有可能被使用的页面有哪些。因为最近被使用过的页面很有可能还会被使用,所以在进行页面置换时,应当将那些最久未被使用的页面换出内存。LRU算法既可以通过软件方式实现(双向链表),也可以依靠硬件实现(计数器),但系统开销都比较大。
    • 优点:基于局部性原理,性能接近OPT。
    • 缺点:实现复杂,开销较高(需维护访问时间戳或栈)。
    • 适用场景:对性能要求较高的通用系统。
  4. 最少使用(Least Frequently Used, LFU)
    • 概述:是指将最近使用次数最少的页面置换出内存。LFU算法与LRU算法的思想相同,其区别只在于,LRU关注的是某一页面上一次使用的时间,而LFU关注的是页面在最近一段时间内的使用频率
    • 优点:适合访问频率差异明显的场景。
    • 缺点:对突发访问模式不敏感,可能淘汰常用页面。
    • 适用场景访问模式稳定的系统。
  5. 时钟置换算法(Clock)
    • 概述
      ① 该算法将所有页面(特指当前在物理页框中的页面) 链接成一个循环队列,每个页面置一个访问位,每次该页面被访问到,都将访问位设为1。当发生置换时,查询指针前进一位。若所指向的页面访问位为0,则换出该页;若访问位为1,则将其置为0,且查询指针前进一位。循环往复直到找到第一个访问位为0的页面换出。实际上,一次换出最多进行两轮扫描。
      无论物理页框是否填满,指针始终在循环队列中按顺序移动。当物理页框未满时,每加载一个新页面,指针会移动到下一个位置;当页框填满后,指针继续按顺序移动,用于后续的页面置换。一旦所有物理页框都被占用,再有新的页面请求到来而该页面不在内存中时,会发生缺页中断。这时,操作系统使用查询指针从当前指向的位置开始扫描。
      ③ 一旦找到并替换了某个页面,查询指针应该移动到下一个位置(即刚刚被替换的那个页面的下一个位置),而不是停留在原地或跳到其他位置。
    • 优点:实现简单,性能接近LRU。
    • 缺点:对引用位的判断可能不准确。
    • 适用场景需要平衡性能和复杂度的系统(比较通用)。
  6. 改进的时钟算法(改进Clock)
    • 概述:在“时钟置换算法”的基础上,在页表项中增加了一个修改位,用来表示该页面在被调入内存之后是否有被修改过。每一次查找失败都将该页面的访问位 置为0;实际上,一次换出最多进行四轮扫描。若以P表示访问位,M表示修改位,则可将页面分为四个优先级(优先级从高到低排序)——
      (P = 0,M = 0):最近未被访问且未被修改。
      (P = 0,M = 1):最近未被访问但被修改。
      (P = 1,M = 0):最近有被访问但未被修改。
      (P = 1,M = 1):最近有被访问且被修改。
    • 优点:减少I/O开销(避免频繁写回磁盘)。
    • 缺点:实现更复杂,开销略高。
    • 适用场景对I/O性能要求较高的系统。

【知识图解】

Diagram Demonstrations Of Six Replacement Algorithmes

  • As the following picture:
    页面置换算法.jpg

【知识拓展】

Belady's Anomaly

  • Definition: A phenomenon in the FIFO algorithm where increasing the number of memory frames can lead to an increase in the page fault rate.
  • Cause: FIFO does not consider the principle of locality in program execution.
  • Example: In certain access sequences, adding more memory frames results in more page faults.

Principle of Locality

  • Definition: The tendency of a program to access certain memory areas more frequently during execution.
  • Types:
    • Temporal Locality: Recently accessed pages are likely to be accessed again soon.
    • Spatial Locality: Accessing a page increases the likelihood of accessing nearby pages.
  • Application: The LRU algorithm is designed based on the principle of locality.

Performance Metrics for Page Replacement Algorithms

  1. Page Fault Rate: The ratio of page faults to total memory accesses.
  2. Overhead: The computational and storage costs of implementing the algorithm.
  3. Applicability: Whether the algorithm is suitable for specific access patterns.

Page Replacement in Real Systems

  • Operating System Implementation: Modern operating systems (eg: Linux, Windows) typically use improved Clock algorithms or their variants.
  • Hardware Support: Some CPUs provide hardware support (eg: TLB, reference bits) to optimize page replacement performance.