Hasty Briefsbeta

双语

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`