8张图讲清楚mmap实现原理

💡 原文中文,约3200字,阅读约需8分钟。
📝

内容提要

本文介绍了Linux内核中mmap内存映射的实现原理,包括虚拟地址映射到物理地址的过程、mmap函数的实现原理以及Linux的缺页中断机制。

🎯

关键要点

  • mmap内存映射在Linux内核中扮演关键角色。
  • 虚拟地址映射到物理地址采用页表机制,64位CPU使用4级页表。
  • 64位CPU的虚拟地址长度为64位,实际使用48位满足映射需求。
  • pgd、pud、pmd、ptl表偏移均为9位,物理页偏移为12位。
  • 虚拟地址映射物理地址的过程包括查询pgd、pud、pmd、ptl表,最终定位到物理地址。
  • Linux内核动态分配页表,避免一次性创建所有页表。
  • mmap函数用于将文件或设备映射到进程地址空间,分为文件映射和匿名映射。
  • VMA(虚拟内存区域)用于管理进程虚拟内存,是映射物理内存的指导结构。
  • 缺页中断在访问未建立映射关系的虚拟内存时触发,负责创建映射表。
  • 文件映射将文件内容映射到进程内存,需指定文件fd、偏移量和映射长度。
  • 匿名映射通过申请物理内存页并创建pte完成,过程相对简单。
➡️

继续阅读