当前位置: 首页 > news >正文

【Linux 内存管理】2 进程地址空间 - vm_area_struct 数据结构

1、VMA 数据结构

VMA(vm_area_struct)数据结构定义在 include/linux/mm_types.h 文件中,由mm_struct中的mmap指针指向。

  • 每个VMA都要链接到mm_struct的链表和红黑树中。
    • mmap形成一个单链表,进程中所有VMA都链接到这个链表中,链表头是mm_struct->mmap
    • mm_rb 是红黑树的根节点,每个进程在VMA中都有一个红黑树。
  • VMA按照起始地址以递增的方式插入mm_struct->mmap中
    • 当进程拥有大量的VMA时,通过红黑树快速进行VMA的查找。
struct vm_area_struct {/* The first cache line has the info for VMA tree walking. */unsigned long vm_start;                        //1、该VMA在进程地址空间的起始地址unsigned long vm_end;                          //2、该VMA在进程地址空间的结束地址  struct vm_area_struct *vm_next, *vm_prev;      //3、虚拟内存区域链表中的前继,后继指针,以链表形式连接struct rb_node vm_rb;                          //4、VMA作为一个节点加入红黑树 (每个进程的mm_struct数据结构中都有一个红黑树(mm—>mm_rb))unsigned long rb_subtree_gap;/* Second cache line starts here. */struct mm_struct *vm_mm;                       //5、指向该VMA所属进程的mm_struct数据结构 pgprot_t vm_page_prot;                         //VMA的访问权限unsigned long vm_flags;                        //描述该VMA的一组标志位struct {struct rb_node rb;unsigned long rb_subtree_last;} shared;    struct list_head anon_vma_chain;                //6、用于管理反向映射struct anon_vma *anon_vma;                      //用于管理反向映射  const struct vm_operations_struct *vm_ops;      //7、通常用于文件映射对VMA中执行各种操作的方法集合。unsigned long vm_pgoff;                         //8、指定文件映射的偏移量,这个变量的单位不是字节,而是页面的大小(PAGE_SIZE)//对于匿名页面来说,可以是0 或 vm_addr/page_size    struct file * vm_file;                        //9、映射的文件,匿名映射即为nullvoid * vm_private_data;atomic_long_t swap_readahead_info;struct vm_region *vm_region;
#ifdef CONFIG_NUMAstruct mempolicy *vm_policy;    /* NUMA policy for the VMA */
#endifstruct vm_userfaultfd_ctx vm_userfaultfd_ctx;
}
  • task_struct 数据结构中有一个mm成员指向进程的内存管理描述符 mm_struct数据结构。
    • 通过mm_struct 数据结构中的mmap成员来遍历所有的VMA。
    • 通过mm_struct 数据结构中的mm_rb成员来遍历和查找VMA。
    • mm_struct 数据结构的pgd成员指向进程的页表,每个进程都有一份独立的页表。
  • 当CPU第一次访问虚拟地址空间时,会触发缺页异常。
    • 在缺页异常处理中,分配物理页面,利用分配的物理页面来创建页表项并且填充页表。
    • 完成虚拟地址到物理地址的映射关系的建立。
      在这里插入图片描述

2、VMA的属性

作为一个进程地址空间的区别,VMA是有属性的,如可读/可写、共享等属性。vm_flags成员描述这些属性,描述了改VMA的全部页面信息,包括如何映射页面、访问每个页面的权限等信息。
VMA属性的标志位部分如下:
在这里插入图片描述

http://www.dtcms.com/a/365499.html

相关文章:

  • 【Zotero】插入中文参考文献遇到的问题
  • 【数据处理工具】依据图层批量分割要素,并自动处理碎图斑
  • Zynq中级开发七项必修课-第七课:AXI DMA (PL→PS) 数据上传
  • 深入掌握sed:Linux文本处理的流式编辑器利器
  • 权威认证!华宇TAS应用中间件获得商用密码产品认证证书
  • MongoDB 性能调优:十大实战经验总结 详细介绍
  • (Me)Adobe Media Encoder 2025音视频格式转码软件及视频编码软件,全新版免激活,安装即永久使用!
  • 面经分享二:Kafka、RabbitMQ 、RocketMQ 这三中消息中间件实现原理、区别与适用场景
  • windows server2008R2 远程提示用户名密码错误
  • 往届生还有机会进入计算机这个行业吗?还能找见好工作吗
  • 软件测试基础知识(数据库篇)
  • [光学原理与应用-377]:ZEMAX - 优化 - ZEMAX中的评价函数、类型、优化算法及其关系解析
  • Coze源码分析-资源库-创建提示词-前端源码
  • 聚焦诊断管理(DM)的传输层设计、诊断服务器实现、事件与通信管理、生命周期与报告五大核心模块
  • 集成学习算法简介
  • 水资源论证方法与报告编制技术及实际案例分析
  • ruoyi vue element 实现点击、返回首页收起已经展开的菜单栏
  • CI/CD流水线驱动自动化流程深度解析:选型、竞品、成本与资源消耗
  • Java项目打包成EXE全攻略​
  • 企业内网安全守护全面指南:从基础防护到智能管理的一站式解决方案
  • vue3前端开发的基础教程——快速上手
  • BERT实战|推理与微调
  • 如何从PDF中高效提取表格数据
  • Top 10 Kali Linux Tools for Hacking 2025.2
  • Flutter + Web:深度解析双向通信的混合应用开发实践
  • 深入解析 MySQL 存储引擎架构
  • 智能制造——解读71页装备制造集团SCM集成计划体系顶层设计方案【附全文阅读】
  • 超低延迟RTSP播放器的技术挑战与跨平台实现之道
  • AWK文本处理工具
  • 【Python练习题】Python小白必练100题答案-第81-97题