- 虚拟存储器与内存模型
虚拟存储器是一种抽象的存储管理技术,它为每个进程提供独立的、连续的逻辑地址空间(即虚拟地址空间),使程序可以像访问真实内存一样操作,而无需关心实际物理内存的布局和容量。其核心依赖于 MMU(Memory Management Unit,内存管理单元) 实现虚拟地址到物理地址的动态映射。操作系统通过页表(Page Table)维护这种映射关系,并结合 TLB(Translation Lookaside Buffer)加速地址转换过程。当 CPU 发出内存访问请求时,流程如下:
CPU → 虚拟地址 → MMU(查页表/TLB)→ 物理地址 → 主存
若所需页面不在主存中,则触发“缺页中断”,由操作系统将对应数据从外存调入内存。这种方式实现了内存的按需分配、隔离保护以及多任务并发执行的基础支持。
- 外存储器的介绍
外存储器用于长期保存大量非活跃程序和数据,以文件系统形式组织,具有容量大、成本低、断电后数据不丢失等特点,但访问速度远低于主存。常见的外存储器包括:
-
磁表面存储器(如硬盘 HDD):利用磁性材料记录信息。
- 组成结构:
- 盘片(Platter):涂有磁性介质,用于存储数据;
- 驱动器(Actuator & Spindle Motor):控制磁头移动(寻道)和盘片高速旋转;
- 控制器(Disk Controller):接收主机命令(如读写扇区)、进行错误校验、缓存管理等;
- 接口(Interface):如 SATA、SAS、IDE,负责与主机通信。
- 硬盘物理结构特点:
- 多个盘片堆叠组成盘片组,上下两面均可存储;
- 每个盘面对应一个磁头;
- 所有盘面上相同半径的磁道构成一个 圆柱面(Cylinder),减少磁头移动可提升访问效率;
- 数据按 扇区(Sector) 存储,典型大小为 512 字节或 4KB。
- 组成结构:
-
光盘存储器(CD/DVD/Blu-ray):利用激光读写凹坑表示数据,便携但速度慢;
-
固态硬盘(SSD):基于 NAND Flash,无机械部件,速度快、抗震强,逐渐取代传统 HDD。
MMU(Memory Management Unit,内存管理单元)通过页表(Page Table)实现虚拟地址到物理地址的转换,其基本原理如下:
核心机制:分页机制 + 页表映射
现代操作系统通常将虚拟内存和物理内存划分为固定大小的块,称为“页”(Page)。常见页面大小为 4KB。
- 虚拟地址空间被划分为多个 虚拟页(Virtual Page, VP)
- 物理内存被划分为多个 物理页帧(Physical Frame, PF)
MMU 利用 页表 来记录每个虚拟页对应哪个物理页帧,从而完成地址转换。
地址转换过程(以单级页表为例):
假设一个 32 位系统,页面大小为 4KB(即 2122^{12}212 字节),则:
- 虚拟地址结构分为两部分:
- 高 20 位:页号(Page Number) —— 用于索引页表
- 低 12 位:页内偏移(Offset) —— 在页内寻址
流程如下:
CPU 发出虚拟地址 → MMU 拆分页号与偏移
→ 查页表(使用页号作为索引)
→ 获取对应的物理页帧号(Frame Number)
→ 拼接:物理页帧号 + 偏移 = 物理地址
→ 访问主存
例如:
- 虚拟地址:
0x00401508 - 页大小 4KB → 偏移占 12 位 → 页号 =
0x00401, 偏移 =0x508 - 查页表项
[0x00401]得到物理页帧号0x1A3 - 合成物理地址:
0x1A3 << 12 | 0x508 = 0x1A3508
多级页表优化空间开销
为了减少页表占用内存(尤其在 64 位系统中),采用多级页表结构(如二级、三级甚至四级页表)。
例如 x86-64 常用四级页表:PML4 → PDPT → PD → PT,逐级索引,只分配实际使用的部分页表。
缺失处理与 TLB 加速
- 若页表项中标记“无效”(未加载进内存),则触发 缺页中断,由操作系统调入页面;
- 为加速查找,MMU 使用 TLB(Translation Lookaside Buffer) 缓存最近使用的页表项,命中时无需访问内存中的页表。
✅ 总结:
MMU 通过将虚拟地址拆解为页号和偏移,利用页表查找页号对应的物理页帧,再结合偏移生成物理地址。整个过程对程序透明,是虚拟内存系统的核心支撑。


647

被折叠的 条评论
为什么被折叠?



