虚拟存储器
虚拟存储器
1. 虚拟存储器的基本概念
基本定义
虚拟存储器:
- 将外存空间扩展为主存空间
- 程序可以访问比物理内存更大的地址空间
- 实现内存管理的自动化
虚拟地址:
- 程序使用的地址
- 逻辑地址空间
- 比物理内存大
物理地址:
- 实际内存中的地址
- 物理地址空间
- 受物理内存限制
工作原理
地址转换:
- 虚拟地址转换为物理地址
- 通过页表或段表实现
- 硬件和操作系统协作
按需调入:
- 程序运行时按需调入页面
- 减少内存占用
- 提高内存利用率
页面置换:
- 内存不足时置换页面
- 选择合适页面换出
- 保证程序正常运行
虚拟存储器的优势
扩大地址空间:
- 程序可以使用比物理内存更大的地址空间
- 支持大型程序运行
- 简化程序开发
提高内存利用率:
- 多个程序共享物理内存
- 减少内存浪费
- 支持多任务运行
简化内存管理:
- 操作系统自动管理内存
- 程序员无需关心内存分配
- 提高开发效率
2. 页式虚拟存储器
基本概念
页面:
- 虚拟地址空间的基本单位
- 固定大小的内存块
- 通常为 4KB 或更大
页框:
- 物理内存的基本单位
- 与页面大小相同
- 存储页面的物理位置
页表:
- 记录虚拟页面到物理页框的映射
- 每个进程有自己的页表
- 存储在内存中
页表结构
页表项:
- 页框号:物理页框的地址
- 有效位:页面是否在内存中
- 保护位:页面的访问权限
- 修改位:页面是否被修改
- 引用位:页面是否被访问
多级页表:
- 减少页表占用的内存
- 支持大地址空间
- 按需分配页表
地址转换过程
基本步骤:
- 提取虚拟页号
- 查找页表项
- 检查有效位
- 计算物理地址
页表查找:
- 使用虚拟页号作为索引
- 在页表中查找对应项
- 获取物理页框号
地址计算:
- 物理地址 = 物理页框号 × 页面大小 + 页内偏移
- 页内偏移 = 虚拟地址 mod 页面大小
3. 段式虚拟存储器
基本概念
段:
- 逻辑上相关的数据集合
- 可变大小的内存块
- 如代码段、数据段、堆栈段
段表:
- 记录段号到物理地址的映射
- 包含段基址和段长度
- 支持段的动态增长
段表结构
段表项:
- 段基址:段在物理内存中的起始地址
- 段长度:段的大小
- 有效位:段是否在内存中
- 保护位:段的访问权限
地址转换过程
基本步骤:
- 提取段号
- 查找段表项
- 检查段内偏移
- 计算物理地址
段表查找:
- 使用段号作为索引
- 在段表中查找对应项
- 获取段基址和段长度
地址计算:
- 物理地址 = 段基址 + 段内偏移
- 段内偏移 = 虚拟地址 - 段起始地址
4. 段页式虚拟存储器
基本概念
段页式:
- 结合段式和页式的优点
- 先分段,再分页
- 支持段的动态增长和页面置换
地址结构:
- 段号:标识段
- 页号:段内页面号
- 页内偏移:页面内字节地址
地址转换过程
基本步骤:
- 提取段号,查找段表
- 提取页号,查找页表
- 计算物理地址
两级查找:
- 第一级:段表查找
- 第二级:页表查找
- 结合两种方式的优点
5. TLB(快表)
基本概念
TLB:
- Translation Lookaside Buffer
- 地址转换缓存
- 加速地址转换过程
工作原理:
- 缓存常用的地址转换结果
- 减少页表查找次数
- 提高地址转换速度
TLB 结构
TLB 项:
- 虚拟页号:虚拟地址的页号
- 物理页框号:对应的物理页框号
- 有效位:TLB 项是否有效
- 保护位:访问权限
TLB 组织:
- 全相联:查找速度快
- 组相联:平衡速度和成本
- 直接映射:实现简单
TLB 工作过程
TLB 查找:
- 提取虚拟页号
- 在 TLB 中并行查找
- 如果命中,直接使用结果
- 如果未命中,查找页表
TLB 更新:
- 页表更新时同步更新 TLB
- 使用写直达或写回策略
- 保证 TLB 一致性
TLB 性能优化
TLB 命中率:
- 提高 TLB 命中率
- 减少页表查找次数
- 优化程序访问模式
TLB 大小:
- 增加 TLB 容量
- 缓存更多转换结果
- 平衡成本和性能
练习题
练习 1
TLB 的作用是什么?
参考答案
TLB(Translation Lookaside Buffer,快表)的作用:
-
加速地址转换:
- 缓存常用的地址转换结果
- 减少页表查找次数
- 提高地址转换速度
-
减少内存访问:
- 避免每次地址转换都访问页表
- 减少内存访问延迟
- 提高系统整体性能
-
优化访问模式:
- 利用程序的空间局部性
- 缓存近期访问的地址转换
- 提高 TLB 命中率
-
支持多级缓存:
- 作为地址转换的缓存
- 与数据 Cache 配合工作
- 形成完整的内存层次结构
-
降低功耗:
- 减少页表访问次数
- 降低内存访问功耗
- 提高能效比
练习 2
页式虚拟存储器和段式虚拟存储器有何区别?
参考答案
页式虚拟存储器和段式虚拟存储器的区别:
-
基本单位:
- 页式:页面,固定大小
- 段式:段,可变大小
-
地址结构:
- 页式:页号 + 页内偏移
- 段式:段号 + 段内偏移
-
管理方式:
- 页式:按页面管理,支持页面置换
- 段式:按段管理,支持段交换
-
地址转换:
- 页式:页表查找,计算物理地址
- 段式:段表查找,检查段内偏移
-
内存分配:
- 页式:按页面分配,可能产生内碎片
- 段式:按段分配,可能产生外碎片
-
保护机制:
- 页式:页面级保护
- 段式:段级保护,更灵活
-
适用场景:
- 页式:通用系统,支持多任务
- 段式:专用系统,支持模块化程序