计算机虚拟存储管理与页面置换算法详解

文章目录

  • 计算机虚拟存储管理与页面置换算法详解
    • [一、虚拟存储管理(Virtual Memory Management)](#一、虚拟存储管理(Virtual Memory Management))
      • [1.1 基本概念](#1.1 基本概念)
      • [1.2 核心特征](#1.2 核心特征)
      • [1.3 实现方式](#1.3 实现方式)
      • [1.4 页表结构](#1.4 页表结构)
    • [二、页面置换算法(Page Replacement Algorithms)](#二、页面置换算法(Page Replacement Algorithms))
      • [2.1 最优页面置换算法(OPT, Optimal)](#2.1 最优页面置换算法(OPT, Optimal))
      • [2.2 最近最久未使用置换算法(LRU, Least Recently Used)](#2.2 最近最久未使用置换算法(LRU, Least Recently Used))
      • [2.3 最不常用算法(LFU, Least Frequently Used)](#2.3 最不常用算法(LFU, Least Frequently Used))
      • [2.4 时钟页面置换算法(Clock / 最近未用算法 NRU)](#2.4 时钟页面置换算法(Clock / 最近未用算法 NRU))
      • [2.5 先进先出算法(FIFO, First In First Out)](#2.5 先进先出算法(FIFO, First In First Out))
    • 三、页面置换的抖动现象(Thrashing)
      • [3.1 定义](#3.1 定义)
      • [3.2 产生原因](#3.2 产生原因)
      • [3.3 解决方法](#3.3 解决方法)
    • 四、页表关键字段详解
      • [4.1 页号(Page Number)](#4.1 页号(Page Number))
      • [4.2 页帧号(Frame Number)](#4.2 页帧号(Frame Number))
      • [4.3 状态位(存在位 / Present Bit)](#4.3 状态位(存在位 / Present Bit))
      • [4.4 访问位(Access Bit / Reference Bit)](#4.4 访问位(Access Bit / Reference Bit))
      • [4.5 修改位(脏位 / Dirty Bit)](#4.5 修改位(脏位 / Dirty Bit))
    • 五、图片题目解析

计算机虚拟存储管理与页面置换算法详解

一、虚拟存储管理(Virtual Memory Management)

1.1 基本概念

虚拟存储器 是一种内存管理技术,它使得应用程序认为自己拥有连续且足够大的内存空间,而实际上物理内存(RAM)可能远小于程序所需的地址空间。虚拟内存通过请求调页(Demand Paging)页面置换 机制,将暂时不用的页面换出到外存(磁盘交换区),从而从逻辑上扩充内存容量

1.2 核心特征

特征 说明
离散性 程序在内存中分散存放,无需连续
多次性 程序可分多次调入内存运行
对换性 程序在运行过程中可与外存交换
虚拟性 逻辑上扩充内存,用户感知到的内存远大于物理内存

1.3 实现方式

  • 请求分页(Demand Paging):最常用的方式,仅当页面被访问时才调入内存
  • 请求分段(Demand Segmentation):按逻辑段进行调度和置换
  • 段页式:结合分段和分页的优点

1.4 页表结构

在请求分页系统中,页表除了记录页帧号映射外,还增加了若干状态位用于支持虚拟存储管理:

字段 作用
页帧号 物理内存块号
状态位(存在位) 标识该页是否在物理内存中
访问位 记录该页近期是否被访问过
修改位(脏位) 记录该页调入内存后是否被修改过
外存地址 该页在磁盘上的存放位置

二、页面置换算法(Page Replacement Algorithms)

当程序访问的页面不在内存(缺页中断 )且物理内存已满时,系统必须选择一个已在内存中的页面将其换出,以腾出空间。选择哪个页面淘汰,就是页面置换算法要解决的问题。

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

思想 :淘汰将来最长时间内不会被访问的页面。

特点

  • 理论上性能最好,缺页率最低
  • 无法实现,因为无法预知未来的页面访问序列
  • 通常作为评价其他算法性能的上限基准

示例 :访问序列 1, 2, 3, 4, 1, 2, 5, 1, 2, 3, 4, 5,内存3块

  • 当需要调入4时,1和2近期还会用到,3最久不用,故淘汰3

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

思想 :淘汰最近一段时间内最久没有被访问的页面。基于"局部性原理",认为最近被访问的页面将来也更可能被访问。

实现方式

  • 计数器法:每个页面记录上次访问时间,淘汰时间最久的
  • 栈法:维护一个页面栈,访问时移到栈顶,淘汰栈底

特点

  • 性能接近OPT,是实际应用中较好的算法
  • 开销较大,需要硬件支持(如移位寄存器)或软件维护访问时间

2.3 最不常用算法(LFU, Least Frequently Used)

思想 :淘汰访问次数最少的页面。

实现方式

  • 每个页面设置访问计数器,每次访问时加1
  • 需要置换时选择计数器值最小的页面淘汰

特点

  • 与LRU不同:LRU看"时间远近",LFU看"频率高低"
  • 问题:可能淘汰早期频繁使用但近期不再用的页面(可通过"老化"机制改进,即定期将计数器右移)

2.4 时钟页面置换算法(Clock / 最近未用算法 NRU)

思想 :将内存中的页面组织成循环队列(像时钟一样),每个页面有一个访问位。当页面被访问时,访问位置1。

置换过程

  1. 指针顺时针扫描页面
  2. 若遇到访问位为1的页面,将其置0,继续扫描
  3. 若遇到访问位为0的页面,将其淘汰
  4. 若一轮扫描全是1,则全部清0,第二轮一定能找到淘汰页

特点

  • 近似LRU的实现,性能较好
  • 开销小,只需维护一个访问位和循环指针
  • 是Linux等操作系统实际采用的算法基础

2.5 先进先出算法(FIFO, First In First Out)

思想 :淘汰最先进入内存的页面。

实现方式

  • 维护一个先进先出队列
  • 新页面加入队尾,淘汰队首

特点

  • 实现最简单,开销最小
  • 性能较差,可能淘汰经常使用的页面
  • Belady异常:对于FIFO,增加物理块数反而可能导致缺页次数增加(其他算法如LRU、OPT不会出现)

三、页面置换的抖动现象(Thrashing)

3.1 定义

抖动(Thrashing) 是指系统频繁发生页面换入换出,导致大部分时间都花在页面置换上,而实际执行计算的时间极少,系统吞吐量急剧下降的现象。

3.2 产生原因

根本原因是:进程分配的物理块数过少,导致其工作集(Working Set,即某段时间内频繁访问的页面集合)无法全部驻留内存。

具体过程:

  1. 进程缺页率升高 → 频繁请求调页
  2. CPU利用率下降 → 系统认为需要加载更多进程
  3. 新进程抢占内存 → 原进程物理块更少
  4. 缺页率进一步恶化 → 恶性循环

3.3 解决方法

方法 说明
工作集模型 为每个进程分配足够容纳其工作集的物理块
L=S准则 调整多道程序度,使缺页间隔时间等于页面处理时间
挂起进程 暂时将部分进程换出到外存,释放内存
局部置换策略 进程缺页时只从自己的物理块中选择淘汰,不影响其他进程

四、页表关键字段详解

结合题目中的页表结构,详细解释各字段含义:

4.1 页号(Page Number)

  • 逻辑地址的高位部分
  • 标识程序虚拟地址空间中的第几个页面
  • 本题中进程有4个页面,页号为 0、1、2、3

4.2 页帧号(Frame Number)

  • 物理内存中的块号(页框号)
  • 页号通过页表映射到页帧号,从而定位物理地址
  • 若页面不在内存,页帧号为空(如本题页号1显示为 ---

4.3 状态位(存在位 / Present Bit)

含义
0 该页面不在物理内存中(在外存磁盘上)
1 该页面已在物理内存
  • 访问页面时先查状态位,若为0则触发缺页中断
  • 本题中页号1的状态位为0,说明它不在内存

4.4 访问位(Access Bit / Reference Bit)

含义
0 该页面近期未被访问
1 该页面近期被访问
  • 用于时钟算法LRU近似算法判断页面活跃程度
  • 系统会定期将所有访问位清0

4.5 修改位(脏位 / Dirty Bit)

含义
0 页面调入内存后未被修改过(与磁盘内容一致)
1 页面调入内存后已被修改过(与磁盘内容不一致)
  • 淘汰代价的关键指标
    • 修改位=0:页面与磁盘一致,淘汰时直接丢弃 ,无需写回磁盘,代价小
    • 修改位=1:页面已被修改,淘汰时必须写回磁盘 才能保存修改内容,代价大(需要磁盘I/O)

五、图片题目解析

5.1 题目信息整理

已知条件:

  • 进程有4个页面,页号 0~3
  • 系统分配了 3个存储块(即物理内存只能同时存放3个页面)
  • 当前各页面状态如下表:
页号 页帧号 状态位 访问位 修改位
0 6 1 1 1
1 --- 0 0 0
2 3 1 1 1
3 2 1 1 0

位含义:

  • 状态位:0=不在内存,1=在内存
  • 访问位:0=未访问过,1=访问过
  • 修改位:0=未修改过,1=修改过

问题:

当访问的页面1不在内存时,淘汰表中页号为( )的页面代价最小。

选项:A. 0 B. 1 C. 2 D. 3


5.2 解题步骤

第一步:确定哪些页面在内存中

根据状态位判断:

  • 页号0:状态位=1 → 在内存
  • 页号1:状态位=0 → 不在内存(这正是要访问的缺页)
  • 页号2:状态位=1 → 在内存
  • 页号3:状态位=1 → 在内存

因此,已在内存中的页面是:0、2、3。淘汰只能在这三个中选择。

第二步:分析淘汰代价

页面淘汰的"代价"主要指I/O开销

  • 若页面被修改过(修改位=1),淘汰时必须写回磁盘 ,产生一次磁盘I/O,代价大
  • 若页面未被修改(修改位=0),淘汰时直接丢弃 ,无需写回磁盘,代价小

检查三个候选页面的修改位:

  • 页号0:修改位=1 → 已修改,淘汰需写回磁盘 ❌
  • 页号2:修改位=1 → 已修改,淘汰需写回磁盘 ❌
  • 页号3:修改位=0 → 未修改,淘汰可直接丢弃 ✅

第三步:结论

页号3的修改位为0,表示该页面自调入内存以来未被修改 ,与磁盘上的副本完全一致。淘汰页号3时无需执行磁盘写操作 ,因此代价最小

答案:D. 3


5.3 类似题目讲解

【练习题】

某进程有5个页面,页号为0~4,系统为其分配了3个物理块。当前各页面在页表中的状态如下:

页号 页帧号 状态位 访问位 修改位
0 5 1 1 1
1 --- 0 0 0
2 8 1 0 1
3 2 1 1 0
4 --- 0 0 0

现程序试图访问页号1,发生缺页中断。请问:

  1. 需要从哪些页号中选择淘汰页面?
  2. 若按照"淘汰代价最小"原则,应该淘汰哪个页面?为什么?
  3. 若系统采用时钟(Clock)算法,指针当前指向页号2,应该淘汰哪个页面?请描述扫描过程。

【答案与解析】

第1问:候选淘汰页面

根据状态位=1(在内存)的页面:页号 0、2、3

页号1和4本身就不在内存,无需淘汰。

第2问:按代价最小原则

比较三个候选页面的修改位:

页号 修改位 淘汰代价
0 1 需写回磁盘,代价大
2 1 需写回磁盘,代价大
3 0 无需写回磁盘,代价小

应淘汰页号3,因为修改位为0,淘汰时直接丢弃即可,不产生磁盘I/O。

第3问:时钟算法扫描过程

时钟算法只看访问位,规则:访问位为1则清0并跳过,访问位为0则淘汰。

当前指针指向页号2,各在内存页面的访问位:

  • 页号0:访问位=1
  • 页号2:访问位=0
  • 页号3:访问位=1

扫描过程:

  1. 指针指向页号2,访问位=0 → 直接淘汰页号2

因此时钟算法会选择淘汰页号2

对比总结:同一场景下,"代价最小"原则选页号3(省磁盘I/O),而时钟算法选页号2(最近未被访问)。这体现了不同置换策略的侧重点不同。

相关推荐
罗西的思考1 小时前
【Agentic RL / 强化学习 / OPD】OpenClaw-RL 源码阅读笔记 — (14)— Teacher
人工智能·笔记·深度学习·算法·机器学习
塔能物联运维2 小时前
塔能两相液冷:600W/cm²极限能力,为下一代AI芯片预留充足散热余量
人工智能·算法·两相液冷
醉城夜风~2 小时前
手撕 C++ string:从零实现一个简易字符串类
开发语言·c++·算法
手写码匠2 小时前
华为云Flexus+DeepSeek征文|DeepSeek+RAG知识库实战:基于Flexus X实例与Dify构建企业级智能问答系统
人工智能·深度学习·算法·aigc
发量惊人的中年网工2 小时前
工业视觉云边 AI 推理总是卡顿?SD-WAN 打通边缘算力互联
网络·人工智能·网络安全·云计算
AC赳赳老秦2 小时前
软著公开信息批量采集:OpenClaw 抓取软件著作权公开数据,分析企业技术布局方向
大数据·网络·人工智能·python·php·deepseek·openclaw
liuyunshengsir3 小时前
perftest 工具集ib_write_bw中的 RDMA Write 带宽测试工具手册
网络·rdma
tjjingpan3 小时前
HCIP-Datacom Core Technology V1.0_20 IPv6概述
linux·服务器·网络
zander2583 小时前
LeetCode 46. 全排列
算法·leetcode·深度优先