【操作系统】虚拟存储管理(局部性原理、缺页中断)
考点频率:★★★★★(选择题必考,也是理解页面置换算法的基础)
难度:⭐⭐⭐
建议:理解局部性原理是虚拟存储的理论基础,掌握缺页中断的完整处理流程
1️⃣ 为什么需要虚拟存储?
之前讨论的页式/段式存储管理有一个共同前提:程序的全部代码和数据必须一次性装入内存才能运行。这带来了两个问题:
- 程序大小受限于物理内存:如果程序大于物理内存,就无法运行
- 内存利用率低:程序运行时,往往只有部分代码和数据被频繁使用(如错误处理代码、初始化代码在运行后不再需要)
虚拟存储的解决思路:程序不需要全部装入内存,只需要将当前运行需要的部分装入内存,其余部分存放在磁盘上,需要时再调入。
类比:读一本很厚的书,不需要把整本书一次性全背下来,只需要把当前要读的几页放在桌上,读完了再换下一页。
虚拟存储管理可以基于页式(虚拟页式)或段式(虚拟段式)来实现,软考中主要考查虚拟页式存储。
2️⃣ 局部性原理——虚拟存储的理论基础
局部性原理是虚拟存储能够高效工作的理论依据。程序在运行过程中,其访问行为表现出两种局部性:
时间局部性:如果一个内存位置被访问,那么它在不久的将来很可能再次被访问。
- 典型例子:循环体中的代码、被反复调用的函数、被频繁访问的计数器变量
空间局部性:如果一个内存位置被访问,那么它附近的位置也很可能被访问。
- 典型例子:数组的顺序遍历、顺序执行的指令序列、结构体中的成员变量
正是因为局部性原理,虚拟存储系统只需要把当前需要的少量页面放入内存,就能获得较高的命中率(页面在内存中的比例高)。
3️⃣ 虚拟页式存储的核心机制
3.1 页表项新增字段
虚拟页式存储的页表在普通页表的基础上,增加了以下关键字段:
| 字段 | 作用 |
|---|---|
| 存在位(有效位) | 标记该页当前是否在物理内存中(1=在内存,0=在外存) |
| 访问位(引用位) | 记录该页最近是否被访问过(用于页面置换算法) |
| 修改位(脏位) | 记录该页是否被修改过(换出时判断是否需要写回磁盘) |
| 外存地址 | 该页在磁盘上的存放位置(换入时使用) |
3.2 地址转换流程(带缺页处理)
程序给出逻辑地址 ↓ 提取页号和偏移量 ↓ 查页表 → 检查存在位 ↓ 存在位=1 → 页框号 + 偏移 → 物理地址(正常访问) ↓ 存在位=0 → 触发缺页中断 → 操作系统处理缺页4️⃣ 缺页中断(Page Fault)
缺页中断是指当CPU访问的页面不在物理内存中时,由硬件触发的中断。操作系统在中断处理程序中负责从磁盘将缺失的页面调入内存。
4.1 缺页中断的完整处理流程
- 触发缺页:CPU访问的逻辑页不存在于物理内存中,硬件触发缺页中断
- 保存现场:操作系统保存当前进程的CPU上下文(寄存器、程序计数器等)
- 查找空闲页框:在物理内存中查找空闲页框
- 页面置换(如果内存已满):选择一页换出到磁盘(根据页面置换算法)
- 磁盘I/O:从磁盘中读取缺失的页面到分配的页框中
- 更新页表:修改页表项,将存在位设为1,记录页框号
- 恢复现场:恢复被中断进程的CPU上下文
- 重新执行:进程重新执行引发缺页的那条指令(此时页面已在内存中)
一次缺页中断会触发一次磁盘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篇,点击头像 → 专栏《软考中级高频考点》订阅,第一时间接收新内容
#软考中级 #软件设计师 #虚拟存储 #局部性原理 #缺页中断 #操作系统
