1. 内存映射基础架构
1.1 虚拟地址空间布局
Linux 进程的虚拟地址空间分为用户空间(通常 32 位系统占 3GB,64 位系统占 128TB)和内核空间。用户空间通过mmap创建的匿名映射属于私有堆外内存区域,独立于brk管理的堆空间。其地址范围由内核动态分配,通常位于[stack - mmap_area]之间。
1.1.1 关键数据结构
VMA(Virtual Memory Area):内核通过struct vm_area_struct管理内存区域,包含以下核心字段:
struct vm_area_struct { unsigned long vm_start; // 虚拟地址起始 unsigned long vm_end; // 虚拟地址结束 pgprot_t vm_page_prot; // 访问权限(PROT_*) unsigned long vm_flags; // 映射标志(MAP_*) struct file *vm_file; // 关联文件(匿名映射为NULL) unsigned long vm_pgoff; // 文件偏移量(匿名映射无效) ... };VMA 链表是内核管理虚拟内存的核心数据结构,匿名映射的 VMA 通过vm_flags设置VM_ANONYMOUS