A Friendly Tour of Process Memory on Linux
6 months ago
- #linux
- #kernel
- #memory-management
- Linux通过按页(而非整块)管理内存,为进程创建了连续内存的假象
- 进程内存通过虚拟内存区域(VMA)管理,这些区域是具有特定权限和后备源的连续范围
- 可使用`mmap`、`mprotect`和`munmap`修改内存映射,实际内存分配在首次访问时发生(惰性分配)
- 访问未映射内存时触发缺页异常,内核随即分配或加载所需页
- 写时复制(CoW)技术用于`fork()`和`MAP_PRIVATE`映射,在修改前共享内存
- 透明大页(THP)通过使用更大页(如2MiB)减少TLB压力来提升性能
- 内核通过页表隔离(PTI)防御熔断攻击,分离用户态与内核态页表
- `/proc/<pid>/maps`和`/proc/<pid>/smaps`等工具可查看进程内存使用和映射详情
- 内存权限(如W^X)和TLB失效可能引发微小延迟,尤其在`mprotect`调用期间
- 常见问题包括未对齐映射(`EINVAL`)、内存不足(`ENOMEM`)及越界访问导致的`SIGBUS`