当前位置: 首页 > news >正文

【操作系统】虚拟存储管理(局部性原理、缺页中断)

考点频率:★★★★★(选择题必考,也是理解页面置换算法的基础)
难度:⭐⭐⭐
建议:理解局部性原理是虚拟存储的理论基础,掌握缺页中断的完整处理流程

1️⃣ 为什么需要虚拟存储?

之前讨论的页式/段式存储管理有一个共同前提:程序的全部代码和数据必须一次性装入内存才能运行。这带来了两个问题:

  1. 程序大小受限于物理内存:如果程序大于物理内存,就无法运行
  2. 内存利用率低:程序运行时,往往只有部分代码和数据被频繁使用(如错误处理代码、初始化代码在运行后不再需要)

虚拟存储的解决思路:程序不需要全部装入内存,只需要将当前运行需要的部分装入内存,其余部分存放在磁盘上,需要时再调入。

类比:读一本很厚的书,不需要把整本书一次性全背下来,只需要把当前要读的几页放在桌上,读完了再换下一页。

虚拟存储管理可以基于页式(虚拟页式)或段式(虚拟段式)来实现,软考中主要考查虚拟页式存储。

2️⃣ 局部性原理——虚拟存储的理论基础

局部性原理是虚拟存储能够高效工作的理论依据。程序在运行过程中,其访问行为表现出两种局部性:

时间局部性:如果一个内存位置被访问,那么它在不久的将来很可能再次被访问。

  • 典型例子:循环体中的代码、被反复调用的函数、被频繁访问的计数器变量

空间局部性:如果一个内存位置被访问,那么它附近的位置也很可能被访问。

  • 典型例子:数组的顺序遍历、顺序执行的指令序列、结构体中的成员变量

正是因为局部性原理,虚拟存储系统只需要把当前需要的少量页面放入内存,就能获得较高的命中率(页面在内存中的比例高)。

3️⃣ 虚拟页式存储的核心机制

3.1 页表项新增字段

虚拟页式存储的页表在普通页表的基础上,增加了以下关键字段:

字段作用
存在位(有效位)标记该页当前是否在物理内存中(1=在内存,0=在外存)
访问位(引用位)记录该页最近是否被访问过(用于页面置换算法)
修改位(脏位)记录该页是否被修改过(换出时判断是否需要写回磁盘)
外存地址该页在磁盘上的存放位置(换入时使用)

3.2 地址转换流程(带缺页处理)

程序给出逻辑地址 ↓ 提取页号和偏移量 ↓ 查页表 → 检查存在位 ↓ 存在位=1 → 页框号 + 偏移 → 物理地址(正常访问) ↓ 存在位=0 → 触发缺页中断 → 操作系统处理缺页

4️⃣ 缺页中断(Page Fault)

缺页中断是指当CPU访问的页面不在物理内存中时,由硬件触发的中断。操作系统在中断处理程序中负责从磁盘将缺失的页面调入内存。

4.1 缺页中断的完整处理流程

  1. 触发缺页:CPU访问的逻辑页不存在于物理内存中,硬件触发缺页中断
  2. 保存现场:操作系统保存当前进程的CPU上下文(寄存器、程序计数器等)
  3. 查找空闲页框:在物理内存中查找空闲页框
  4. 页面置换(如果内存已满):选择一页换出到磁盘(根据页面置换算法)
  5. 磁盘I/O:从磁盘中读取缺失的页面到分配的页框中
  6. 更新页表:修改页表项,将存在位设为1,记录页框号
  7. 恢复现场:恢复被中断进程的CPU上下文
  8. 重新执行:进程重新执行引发缺页的那条指令(此时页面已在内存中)

一次缺页中断会触发一次磁盘I/O,而磁盘I/O的速度比内存访问慢几个数量级,因此缺页中断的代价非常高——这也是页面置换算法和TLB能极大提升系统性能的根本原因。

4.2 缺页中断与普通中断的区别

对比项普通中断缺页中断
触发原因I/O完成、时钟中断等外部或内部事件访问的页面不在内存中
发生时间指令执行完成后指令执行过程中(地址转换时)
处理完成后返回原指令下一条执行重新执行原指令(因为页面已调入)
是否涉及磁盘I/O通常不涉及通常涉及(从磁盘读页)
处理时间微秒级毫秒级(磁盘I/O主导)

5️⃣ 经典例题

例题1:以下关于局部性原理的叙述中,正确的是( )。

A. 时间局部性是指程序访问了某个数据后,不久后会访问它附近的数据
B. 空间局部性是虚拟存储管理的唯一理论依据
C. 循环结构体现了时间局部性
D. 数组的随机访问体现了空间局部性

解析:A描述的是空间局部性;B错误,虚拟存储的依据是时间局部性和空间局部性两者;D错误,随机访问不体现空间局部性(顺序访问才体现)。C正确,循环中的代码反复执行,体现了时间局部性。选C


例题2:缺页中断处理完成后,操作系统应该( )。

A. 从下一条指令开始继续执行
B. 重新执行引发缺页的那条指令
C. 终止当前进程
D. 调度下一个进程

解析:缺页中断处理完成后,操作系统恢复现场并重新执行引发缺页的那条指令(此时页面已在内存中,可以正常完成)。选B


例题3(判断):发生缺页中断时,系统一定存在空闲页框。( )

解析:错误。缺页中断发生时,物理内存可能已经满了,此时需要通过页面置换算法换出一页,腾出空闲页框。

6️⃣ 记忆口诀

虚拟存储靠局部,时间空间两局部。
缺页中断代价高,磁盘I/O最耗时。
处理完恢复现场,重新执行原指令。

7️⃣ 小测验(评论区对答案)

某虚拟页式存储系统中,CPU访问某逻辑页时发现该页不在内存中,此时会触发( )。操作系统处理完成后,应该( )。
A. 缺页中断;从下一条指令继续执行
B. 缺页中断;重新执行该指令
C. 越界中断;从下一条指令继续执行
D. 越界中断;重新执行该指令

🔔本专栏日更2篇,点击头像 → 专栏《软考中级高频考点》订阅,第一时间接收新内容

#软考中级 #软件设计师 #虚拟存储 #局部性原理 #缺页中断 #操作系统

http://www.cnnetsun.cn/news/3154445.html

相关文章:

  • 2026年上海地坪施工公司哪家好:从材料体系到交付能力的判断
  • ThinkPad风扇噪音解决方案:TPFanCtrl2实现精准温控与静音平衡
  • STM32F745VG与TB9051FTG实现直流电机静音控制方案
  • GPU 资源配额:多租户平台先防止一个团队吃光集群
  • Spring @Scheduled 定时任务突然停跑、不再执行全场景分析
  • 系统动力学驱动的钢铁行业碳排放预测:从模型构建到情景仿真全流程复现
  • 为什么18KV绝缘鞋越来越受欢迎?真正原因曝光!
  • 如何永久保存QQ空间青春记忆?这个免费工具让你轻松备份完整数据
  • 嵌入式系统硬件去抖动矩阵键盘设计
  • 5分钟掌握抖音下载神器:如何免费批量下载直播回放和用户主页视频
  • 抖音直播回放下载终极指南:简单三步搞定无水印批量保存
  • api-guarder vs 其他接口工具:为什么它是最佳选择?
  • 3分钟学会OBS多平台直播:免费高效的多路推流终极解决方案
  • Thorium浏览器:终极性能优化的Chromium分支实战指南
  • 盛最多水的容器 — AI 写了两版,第一版差点把面试官气走
  • WWDC 视频批量下载:一个 Swift 脚本搞定所有资源
  • Steam创意工坊下载终极指南:5分钟学会用WorkshopDL免费下载模组
  • 养好猫,趣闯关!《喵呜乐消消》承包你的碎片时间
  • 终极指南:3分钟掌握BetterNCM插件管理器,彻底改造网易云音乐
  • ppInk屏幕标注工具:从新手到专家的完整Windows演示指南
  • Deepin Boot Maker完全指南:5分钟制作专业启动盘的免费开源方案
  • Beyond Compare 5永久激活终极指南:开源密钥生成器完整教程
  • Beyond Compare 5永久激活终极指南:开源密钥生成器完整使用教程
  • Locale-Emulator:智能解决Windows非Unicode程序区域兼容性难题
  • Android Keymaster/KeyMint:硬件级密钥管理与认证原理与NPI实践
  • 终极文档下载解决方案kill-doc:如何免费获取全网文档资源
  • 【信息科学与工程学】【制造工程】第三十四篇 3D TSV制造工程01
  • 3个步骤快速掌握Minecraft PCL启动器:终极免费解决方案
  • Topit:终极macOS窗口置顶解决方案,5分钟彻底告别窗口遮挡烦恼
  • StreamCap终极指南:3步掌握开源直播录制工具,轻松录制40+平台直播内容