logo
导航

虚拟存储器

虚拟存储器

1. 虚拟存储器的基本概念

基本定义

虚拟存储器

  • 将外存空间扩展为主存空间
  • 程序可以访问比物理内存更大的地址空间
  • 实现内存管理的自动化

虚拟地址

  • 程序使用的地址
  • 逻辑地址空间
  • 比物理内存大

物理地址

  • 实际内存中的地址
  • 物理地址空间
  • 受物理内存限制

工作原理

地址转换

  • 虚拟地址转换为物理地址
  • 通过页表或段表实现
  • 硬件和操作系统协作

按需调入

  • 程序运行时按需调入页面
  • 减少内存占用
  • 提高内存利用率

页面置换

  • 内存不足时置换页面
  • 选择合适页面换出
  • 保证程序正常运行

虚拟存储器的优势

扩大地址空间

  • 程序可以使用比物理内存更大的地址空间
  • 支持大型程序运行
  • 简化程序开发

提高内存利用率

  • 多个程序共享物理内存
  • 减少内存浪费
  • 支持多任务运行

简化内存管理

  • 操作系统自动管理内存
  • 程序员无需关心内存分配
  • 提高开发效率

2. 页式虚拟存储器

基本概念

页面

  • 虚拟地址空间的基本单位
  • 固定大小的内存块
  • 通常为 4KB 或更大

页框

  • 物理内存的基本单位
  • 与页面大小相同
  • 存储页面的物理位置

页表

  • 记录虚拟页面到物理页框的映射
  • 每个进程有自己的页表
  • 存储在内存中

页表结构

页表项

  • 页框号:物理页框的地址
  • 有效位:页面是否在内存中
  • 保护位:页面的访问权限
  • 修改位:页面是否被修改
  • 引用位:页面是否被访问

多级页表

  • 减少页表占用的内存
  • 支持大地址空间
  • 按需分配页表

地址转换过程

基本步骤

  1. 提取虚拟页号
  2. 查找页表项
  3. 检查有效位
  4. 计算物理地址

页表查找

  • 使用虚拟页号作为索引
  • 在页表中查找对应项
  • 获取物理页框号

地址计算

  • 物理地址 = 物理页框号 × 页面大小 + 页内偏移
  • 页内偏移 = 虚拟地址 mod 页面大小

3. 段式虚拟存储器

基本概念

  • 逻辑上相关的数据集合
  • 可变大小的内存块
  • 如代码段、数据段、堆栈段

段表

  • 记录段号到物理地址的映射
  • 包含段基址和段长度
  • 支持段的动态增长

段表结构

段表项

  • 段基址:段在物理内存中的起始地址
  • 段长度:段的大小
  • 有效位:段是否在内存中
  • 保护位:段的访问权限

地址转换过程

基本步骤

  1. 提取段号
  2. 查找段表项
  3. 检查段内偏移
  4. 计算物理地址

段表查找

  • 使用段号作为索引
  • 在段表中查找对应项
  • 获取段基址和段长度

地址计算

  • 物理地址 = 段基址 + 段内偏移
  • 段内偏移 = 虚拟地址 - 段起始地址

4. 段页式虚拟存储器

基本概念

段页式

  • 结合段式和页式的优点
  • 先分段,再分页
  • 支持段的动态增长和页面置换

地址结构

  • 段号:标识段
  • 页号:段内页面号
  • 页内偏移:页面内字节地址

地址转换过程

基本步骤

  1. 提取段号,查找段表
  2. 提取页号,查找页表
  3. 计算物理地址

两级查找

  • 第一级:段表查找
  • 第二级:页表查找
  • 结合两种方式的优点

5. TLB(快表)

基本概念

TLB

  • Translation Lookaside Buffer
  • 地址转换缓存
  • 加速地址转换过程

工作原理

  • 缓存常用的地址转换结果
  • 减少页表查找次数
  • 提高地址转换速度

TLB 结构

TLB 项

  • 虚拟页号:虚拟地址的页号
  • 物理页框号:对应的物理页框号
  • 有效位:TLB 项是否有效
  • 保护位:访问权限

TLB 组织

  • 全相联:查找速度快
  • 组相联:平衡速度和成本
  • 直接映射:实现简单

TLB 工作过程

TLB 查找

  1. 提取虚拟页号
  2. 在 TLB 中并行查找
  3. 如果命中,直接使用结果
  4. 如果未命中,查找页表

TLB 更新

  • 页表更新时同步更新 TLB
  • 使用写直达或写回策略
  • 保证 TLB 一致性

TLB 性能优化

TLB 命中率

  • 提高 TLB 命中率
  • 减少页表查找次数
  • 优化程序访问模式

TLB 大小

  • 增加 TLB 容量
  • 缓存更多转换结果
  • 平衡成本和性能

练习题

练习 1

TLB 的作用是什么?

参考答案

TLB(Translation Lookaside Buffer,快表)的作用:

  1. 加速地址转换

    • 缓存常用的地址转换结果
    • 减少页表查找次数
    • 提高地址转换速度
  2. 减少内存访问

    • 避免每次地址转换都访问页表
    • 减少内存访问延迟
    • 提高系统整体性能
  3. 优化访问模式

    • 利用程序的空间局部性
    • 缓存近期访问的地址转换
    • 提高 TLB 命中率
  4. 支持多级缓存

    • 作为地址转换的缓存
    • 与数据 Cache 配合工作
    • 形成完整的内存层次结构
  5. 降低功耗

    • 减少页表访问次数
    • 降低内存访问功耗
    • 提高能效比

练习 2

页式虚拟存储器和段式虚拟存储器有何区别?

参考答案

页式虚拟存储器和段式虚拟存储器的区别:

  1. 基本单位

    • 页式:页面,固定大小
    • 段式:段,可变大小
  2. 地址结构

    • 页式:页号 + 页内偏移
    • 段式:段号 + 段内偏移
  3. 管理方式

    • 页式:按页面管理,支持页面置换
    • 段式:按段管理,支持段交换
  4. 地址转换

    • 页式:页表查找,计算物理地址
    • 段式:段表查找,检查段内偏移
  5. 内存分配

    • 页式:按页面分配,可能产生内碎片
    • 段式:按段分配,可能产生外碎片
  6. 保护机制

    • 页式:页面级保护
    • 段式:段级保护,更灵活
  7. 适用场景

    • 页式:通用系统,支持多任务
    • 段式:专用系统,支持模块化程序