Linux在x86架构下运行于保护模式(Protected Mode),这种模式提供了: - 内存保护机制 - 虚拟内存支持 - 多任务隔离 - 特权级别控制
虽然Linux主要使用分页机制,但仍然利用了分段机制的基础功能: - 定义了代码段、数据段等基本段描述符 - 通过GDT(全局描述符表)管理段描述符 - 提供特权级检查(Ring 0-3)
Linux主要依赖分页机制实现虚拟内存管理: - 4级页表结构(PGD→PUD→PMD→PTE) - 支持4KB、2MB和1GB页面大小 - CR3寄存器指向当前进程的页全局目录(PGD)
虚拟地址→物理地址转换过程: 1. MMU获取CR3中的PGD基址 2. 通过虚拟地址的高位索引PGD获取PUD 3. 索引PUD获取PMD 4. 索引PMD获取PTE 5. 从PTE获取物理页框号 6. 结合页内偏移得到物理地址
kmalloc()
: 小内存分配(基于slab)vmalloc()
: 大内存分配(不保证物理连续)alloc_pages()
: 页级分配malloc()
: 标准库内存分配mmap()
: 内存映射brk()
/sbrk()
: 调整堆大小大页(Huge Pages)
hugetlbfs
实现透明大页(THP)
/sys/kernel/mm/transparent_hugepage/enabled
控制内存压缩(zswap/zram)
内存泄漏检测
valgrind
工具kmemleak
(内核空间)内存碎片分析
/proc/buddyinfo
/proc/pagetypeinfo
页表占用分析
pmap
命令/proc/[pid]/smaps
用户空间与内核空间隔离
SMAP/SMEP保护
KASLR(内核地址空间随机化)
Linux的保护模式内存管理是一个复杂但高度优化的系统,通过硬件支持与软件管理相结合,提供了高效、安全的内存访问机制。