图片无法显示,请右键点击新窗口打开图片

BiscuitOS 内存管理之分页大专题订阅入口

图片无法显示,请右键点击新窗口打开图片

Linux 内核使用 STRUCT vm_area_struct 数据结构描述用户进程一段已经分配的虚拟内存,其包含很多的成员,这些成员用于不同的内存场景和内存需求,具体含义如下:

  • vm_start: 用于描述虚拟区域的起始地址
  • vm_end: 用于描述虚拟内存区域的结束地址
  • vm_next: 用于指明用户进程地址空间 VMA 链表的下一个 VMA.
  • vm_prev: 用于指明用户进程地址空间 VMA 链表的前一个 VMA.
  • vm_rb: 用于记录 VMA 在进程地址空间区间树的节点
  • rb_subtree_gap: 用于记录进程地址空间区间树上,VMA 节点子树里最大 GAP 值
  • vm_mm: 指向用户进程的地址空间.
  • vm_page_prot: 用于记录 VMA 虚拟内存映射页表时使用的页表属性
  • vm_flags: VMA 的属性合集
  • anon_vma_chain: 匿名映射场景下逆向映射使用的 AVC
  • anon_vma: 匿名映射场景下逆向映射使用的 AV
  • vm_ops: VMA 操作回调函数合集
  • vm_pgoff: VMA 映射偏移值
  • vm_file: 文件映射场景下 VMA 映射的文件
  • vm_private_data: VMA 私有数据

STRUCT vm_area_struct 数据结构下包含了很多成员,每个成员的含义已经分析完了,那么接下来从内存场景的角度来认识一下每个成员.