1. 内存管理基础:物理地址与虚拟地址概念、MMU的作用、分页机制原理
内存管理是操作系统内核最核心的子系统之一,它决定了进程如何安全、高效地访问物理内存。理解物理地址与虚拟地址的分离、MMU的地址转换机制以及分页原理,是掌握页表项(PTE)权限控制与安全配置的基石。
1.1 物理地址与虚拟地址
在早期的单任务系统中,程序直接访问物理内存地址。这种方式存在严重的安全与稳定性问题:一个程序可以任意读写其他程序甚至操作系统的内存区域。现代操作系统引入了虚拟地址(Virtual Address, VA)与物理地址(Physical Address, PA)的分离机制。
| 概念 | 定义 | 特点 |
|---|---|---|
| 物理地址 (PA) | 硬件总线上的真实内存单元编号,由内存控制器直接寻址。 | 唯一、有限、直接对应DRAM颗粒。 |
| 虚拟地址 (VA) | CPU程序指令中使用的地址,由操作系统为每个进程独立分配。 | 每个进程拥有独立的虚拟地址空间,大小受CPU位数限制(如64位系统可达16EB)。 |
核心价值:虚拟地址为每个进程提供了“独占”整个内存空间的假象,同时通过地址转换机制实现进程间隔离与权限控制。
1.2 MMU的作用
内存管理单元(Memory Management Unit, MMU)是CPU内部负责地址转换的硬件模块。它位于CPU核心与内存总线之间,是虚拟地址到物理地址转换的执行者。
- 地址转换:将CPU发出的虚拟地址实时转换为物理地址,再发送给内存控制器。
- 权限检查:在转换过程中,检查当前访问是否违反页表项(PTE)中定义的权限(读/写/执行/用户/内核)。
- 缓存管理:管理TLB(Translation Lookaside Buffer,页表缓存),加速地址转换。
- 异常触发:当虚拟地址未映射或权限不足时,触发缺页异常(Page Fault)或保护异常。
关键理解:MMU是硬件层面的“安全门禁”,每次内存访问都必须经过它的转换与检查。操作系统通过配置页表项(PTE)来定义门禁规则。
1.3 分页机制原理
分页(Paging)是现代操作系统最主流的内存管理方案。它将虚拟地址空间和物理内存都划分为固定大小的块:虚拟地址空间的块称为页(Page),物理内存的块称为页框(Page Frame)。
1.3.1 基本概念
| 术语 | 大小(典型) | 说明 |
|---|---|---|
| 页 (Page) | 4KB / 2MB / 1GB | 虚拟地址空间的最小映射单位。 |
| 页框 (Page Frame) | 4KB / 2MB / 1GB | 物理内存的最小分配单位,与页大小对应。 |
| 页表 (Page Table) | 由多个PTE组成 | 存储虚拟页到物理页框的映射关系及权限信息。 |
| 页表项 (PTE) | 8字节(64位系统) | 描述单个虚拟页的映射、权限、状态。 |
1.3.2 虚拟地址分解
在分页机制下,CPU发出的虚拟地址被MMU分解为两部分:
- 虚拟页号(VPN):用于索引页表,找到对应的PTE。
- 页内偏移(Offset):直接作为物理地址的低位,无需转换。
对于多级页表(如x86_64的4级页表),VPN进一步拆分为多个索引层级(PML4、PDPT、PD、PT),逐级查找。
分页优势:消除外部碎片、支持按需调页(Demand Paging)、实现虚拟内存交换、简化物理内存分配。
1.4 分页机制的关键优势
- 进程隔离:每个进程拥有独立的页表,一个进程无法访问另一个进程的物理内存。
- 按需调页:只有真正访问到的虚拟页才分配物理页框,节省内存。
- 共享内存:多个进程的页表项可以指向同一个物理页框,实现高效数据共享。
- 权限粒度控制:每个PTE独立设置读、写、执行、用户/内核权限,实现细粒度安全策略。
- 虚拟内存支持:物理内存不足时,可将不活跃的页换出到磁盘,扩展可用内存空间。