本课目标
理解虚拟内存的设计思想;分清逻辑地址与物理地址;掌握页式、段式、段页式存储管理;了解页表、TLB快表、缺页中断;理解页面置换算法,建立虚拟存储完整工作流程认知。
9.1 虚拟存储器概述
虚拟存储器 Virtual Memory,是由操作系统与硬件(MMU内存管理单元)协同实现的存储抽象技术。
虚拟存储把主存+辅存组合,向程序提供一个远大于物理内存大小的虚拟地址空间。程序看到的地址是虚拟地址(逻辑地址),并不是内存真实物理地址。
核心思路:
程序不需要一次性全部加载进物理主存。只把当前需要使用的页面调入内存;暂时不用的部分留在硬盘/SSD辅存。当访问的内容不在主存时,触发中断,从辅存调入。
好处:
- 程序可用地址空间远超物理内存容量;
- 多道程序并发运行,内存利用率提升;
- 程序使用独立虚拟地址空间,实现内存隔离与保护。

9.2 逻辑地址与物理地址
- 虚拟地址(逻辑地址 Virtual Address):程序编译生成的地址,程序视角看到的地址;
- 物理地址 Physical Address:内存硬件真实的存储单元地址,用来直接访问主存芯片;
- 地址转换 Address Translation:MMU硬件,把虚拟地址自动翻译成物理地址。
地址转换过程对应用程序透明,应用感知不到物理内存大小。
9.3 三种虚拟存储管理方式
1. 页式存储管理 Paging
把虚拟地址空间和物理内存都切分成固定大小的块:
- 虚拟页 Virtual Page(页面 Page):虚拟空间等分;
- 物理页 Physical Page(页框 Page Frame):物理内存等分,页面与页框大小相等。
虚拟地址拆分为两部分:虚拟页号 + 页内偏移
- 虚拟页号:用来查页表,找到对应的物理页框号;
- 页内偏移:页面内部的地址,转换时保持不变。
页表 Page Table:存放在主存中的映射表,每一条页表项记录:物理页框号、有效位、脏位、保护位。
- 有效位 Valid Bit:标记该页面是否已经调入物理内存;有效位=0,代表页面在辅存,触发缺页中断 Page Fault。
2. 段式存储管理 Segmentation
按照程序逻辑模块划分(代码段、数据段、栈段),段长度不固定。
虚拟地址 = 段号 + 段内偏移
段表记录:段起始物理地址、段长度、段权限。
优点:符合程序员逻辑,段可以独立保护、共享;
缺点:段长可变,容易产生外部内存碎片。
3. 段页式存储 Segmentation + Paging
折中方案:先把程序划分为逻辑段,每个段内部再划分固定大小页面。
虚拟地址分为三段:段号、页号、页内偏移。
兼顾段式的逻辑划分优势,以及页式无外部碎片的优点;硬件复杂度最高。

9.4 TLB 快表 Translation Lookaside Buffer
每次地址转换都要访问主存中的页表,会额外增加一次内存访问延迟。
TLB快表:放置在CPU内部的高速缓存,缓存最近常用的虚拟页→物理页映射条目。
- TLB命中:直接拿到物理页框号,无需访问内存页表,速度快;
- TLB缺失:需要访问主存里的页表,完成地址转换,同时更新TLB。
TLB本质就是页表的Cache。
9.5 缺页中断 Page Fault
CPU访问虚拟地址时,查询页表发现有效位为0 → 页面不在物理内存,触发缺页中断:
- 暂停当前指令执行,保存现场;
- 操作系统中断服务程序,到辅存读取目标页面;
- 在物理内存寻找空闲页框;内存已满则执行页面置换算法,淘汰旧页面;
- 将新页面从辅存载入主存,更新页表(有效位置1);
- 返回,重新执行触发缺页的指令。
⚠️ 缺页中断属于故障(Fault),指令执行失败后会重新执行,和普通I/O中断有区别。
9.6 页面置换算法
物理内存没有空闲页框,调入新页面时必须淘汰一个内存中的页面:
- OPT最优置换算法 Optimal:淘汰未来最长时间不会访问的页面。理论性能最好,但是无法提前预知未来访问序列,仅用于理论参考;
- FIFO先进先出:按页面调入顺序淘汰。实现简单,存在Belady异常(增加页框数量,缺页次数反而上升);
- LRU最近最少使用 Least Recently Used:淘汰很久没有访问的页面。工程最常用,性能接近OPT;
- Clock时钟算法:LRU的简化低成本版本,用访问位循环扫描,硬件开销更小。
本课小结
虚拟存储器依靠软硬件协同,把主存+辅存统一编址,给程序提供更大虚拟地址空间。分为页式、段式、段页式三种管理方式。MMU完成虚实地址转换,TLB加速页表查找;页面不在内存时触发缺页中断。页面置换算法用来选择要被淘汰的页面,LRU是主流选择。
思考练习
- 虚拟地址与物理地址有什么区别?地址转换由哪个硬件完成?
- 简述页式存储中虚拟地址的组成,有效位作用是什么?
- TLB快表的作用是什么?TLB缺失和缺页中断是一回事吗?
- 什么是缺页中断?简述缺页中断处理流程。
- LRU与FIFO置换算法的特点,什么是Belady异常?
0 条笔记