# 3.4 虚拟存储器 ## 一、虚拟存储器概述 ### 1.1 为什么需要虚拟存储器 **问题**: - 主存容量有限 - 大程序无法装入 - 多道程序运行受限 **解决**: - 使用磁盘作为辅助存储 - 只装入部分程序到主存 - 需要时再调入 ### 1.2 虚拟存储器的概念 **虚拟存储器**: - 将主存和磁盘统一管理 - 为用户提供比实际主存大的地址空间 - 由操作系统和硬件协同实现 **特点**: - 虚拟地址空间 >> 物理地址空间 - 部分装入 - 按需调页/段 - 对用户透明 ### 1.3 虚拟地址和物理地址 **虚拟地址(逻辑地址)**: - 程序使用的地址 - 由CPU生成 **物理地址**: - 实际的内存地址 - 由MMU转换 **地址转换**: ``` 虚拟地址 ──MMU──> 物理地址 ``` --- ## 二、页式虚拟存储器 ### 2.1 页式管理的基本概念 **页(Page)**: - 虚拟地址空间划分为固定大小的页 - 典型大小:4KB **页框(Page Frame)**: - 物理内存划分为与页大小相同的页框 **页表(Page Table)**: - 记录虚拟页到物理页框的映射 - 每个进程一个页表 ### 2.2 地址转换 **虚拟地址划分**: ``` | 虚拟页号 | 页内偏移 | |----------|----------| ``` **转换过程**: 1. 从虚拟地址提取虚拟页号和页内偏移 2. 查页表,得到物理页框号 3. 物理地址 = 物理页框号 || 页内偏移 ### 2.3 页表项 **页表项内容**: - 物理页框号 - 有效位(是否在内存) - 修改位(是否被修改) - 访问位(是否被访问) - 保护位(读/写/执行) ### 2.4 快表(TLB) **TLB(Translation Lookaside Buffer)**: - 页表的高速缓存 - 存放最近使用的页表项 **地址转换**: ``` 虚拟地址 ──> TLB? ├── 命中 ──> 物理地址 └── 未命中 ──> 查页表 ──> 物理地址 ``` ### 2.5 多级页表 **为什么需要多级页表**: - 页表太大 - 节省空间 **二级页表**: ``` 虚拟地址:| 一级页号 | 二级页号 | 页内偏移 | ``` --- ## 三、段式虚拟存储器 ### 3.1 段式管理的基本概念 **段(Segment)**: - 按程序的逻辑结构划分 - 代码段、数据段、堆栈段等 - 大小可变 **段表**: - 记录段的基址和长度 ### 3.2 地址转换 **虚拟地址**: ``` | 段号 | 段内偏移 | |------|----------| ``` **转换过程**: 1. 查段表,得到段基址和段长 2. 检查段内偏移是否越界 3. 物理地址 = 段基址 + 段内偏移 ### 3.3 段式 vs 页式 | 特性 | 页式 | 段式 | |-----|------|------| | 划分单位 | 固定大小页 | 可变大小段 | | 划分依据 | 物理 | 逻辑 | | 内部碎片 | 有 | 无 | | 外部碎片 | 无 | 有 | | 共享 | 困难 | 容易 | | 保护 | 困难 | 容易 | --- ## 四、段页式虚拟存储器 ### 4.1 段页式管理 **结合段式和页式的优点**: - 先分段,再分页 - 每段一个页表 **地址转换**: ``` 虚拟地址 ──> 段表 ──> 页表 ──> 物理地址 ``` ### 4.2 地址结构 ``` | 段号 | 页号 | 页内偏移 | |------|------|----------| ``` --- ## 五、页面置换算法 ### 5.1 最佳置换算法(OPT) **方法**: - 置换未来最长时间不使用的页面 **特点**: - 理论最优 - 无法实现(需要预知未来) ### 5.2 先进先出算法(FIFO) **方法**: - 置换最早调入的页面 **特点**: - 实现简单 - 可能产生Belady异常 ### 5.3 最近最少使用算法(LRU) **方法**: - 置换最近最少使用的页面 **特点**: - 性能好 - 实现复杂 ### 5.4 时钟置换算法(Clock) **方法**: - LRU的近似实现 - 使用访问位 **过程**: 1. 指针指向最早调入的页面 2. 检查访问位: - 为0:置换 - 为1:置0,指针下移 ### 5.5 改进型Clock算法 **增加修改位**: - 优先置换未修改的页面 **分类**: - (0,0):未访问,未修改 — 最佳置换 - (0,1):未访问,已修改 - (1,0):已访问,未修改 - (1,1):已访问,已修改 --- ## 六、考研重点 1. **虚拟存储器概述**: - 为什么需要 - 概念 - 虚拟地址和物理地址 2. **页式虚拟存储器**: - 页、页框、页表 - 地址转换 - 页表项 - TLB - 多级页表 3. **段式虚拟存储器**: - 段、段表 - 地址转换 - 段式 vs 页式 4. **段页式虚拟存储器** 5. **页面置换算法**: - OPT - FIFO - LRU - Clock - 改进型Clock --- *下一节:3.5 辅助存储器*