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

linux 内核 - 进程地址空间的数据结构

1. 在linux内核中, task_struct 表示一个进程的实例 

struct task_struct{[…]struct mm_struct *mm, *active_mm;[…]
}

2.  mm_struct 表示进程的内存映射

struct mm_struct {struct vm_area_struct *mmap;unsigned long mmap_base;unsigned long task_size;unsigned long highest_vm_end;pgd_t * pgd;atomic_t mm_users;atomic_t mm_count;atomic_long_t nr_ptes;
#if CONFIG_PGTABLE_LEVELS > 2atomic_long_t nr_pmds;
#endifint map_count;spinlock_t page_table_lock;unsigned long total_vm;unsigned long locked_vm;unsigned long pinned_vm;unsigned long data_vm;unsigned long exec_vm;unsigned long stack_vm;unsigned long start_code, end_code, start_data, end_data;unsigned long start_brk, brk, start_stack;unsigned long arg_start, arg_end, env_start, env_end;/* ref to file /proc/<pid>/exe symlink points to */struct file __rcu *exe_file;
};

    其中 pdg 表示进程的一级页表,

    start_stack 表示用户栈起始地址,

    mmap_base表示映射区域的起始地址(动态库.so, mmap系统调用映射的文件),

    start_brk 表示堆起始地址,

    brk 表示堆结束的地址,

    start_data 表示数据段起始地址,

    end_data 表示数据段结束地址,

    end_code 表示代码段结束地址 

3. task_struct  和  mm_struct 的关系如图:

4. 虚拟内存区域:

  如前所述,mm_struct 里面有一个  mmap 成员,它表示进程内存映射的一个区域(VMA),VMA(Virtual Memory Area)即虚拟内存区域。 在Linux中,每个正在运行的进程都会有多个VMA,如代码段,数据段,堆栈段,文件映射区域等。

struct vm_area_struct {unsigned long vm_start; unsigned long vm_end;struct vm_area_struct *vm_next, *vm_prev;struct mm_struct *vm_mm;pgprot_t vm_page_prot;unsigned long vm_flags;unsigned long vm_pgoff;struct file * vm_file;[...]
}

5. task_struct, mm_struct, vm_area_struct  关系图

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

相关文章:

  • 【STM32】STM32H750 CubeMX 配置 USB CDC 虚拟串口笔记
  • 保姆级教学:使用 Jenkins 部署前端项目(2025 年最新版)
  • 基于JS实现的中国象棋AI系统:多模块协同决策与分析
  • ffmpeg编译
  • 音视频面试题集锦第 26 期
  • 计算机网络-IPv6
  • 679. 24 点游戏
  • Android Cutout(屏幕挖孔)详解
  • ubuntu 编译ffmpeg6.1 增加drawtext,libx264,libx265等
  • Leetcode 3648. Minimum Sensors to Cover Grid
  • OCR库pytesseract安装保姆级教程
  • LeetCode:无重复字符的最长子串
  • SQLite 加密与不加密性能对比与优化实践
  • Opsqueue:为重负载而生的轻量级批处理队列,已开源!
  • 视频因为264问题无法网页播放,解决方案之一:转化视频
  • 智创飞跃|2025 Google 开发者大会伴你成长精进
  • 兴趣爱好——虾哥开源小智AI机器人搭建(丐版—最低成本)ESP32开发板 MicroPython V1.0.0 Rev1
  • 嵌入式Linux学习 -- 进程和线程4
  • 三高架构杂谈
  • Ansible 自动化运维实践笔记:Jinja2 模板、LNMP+WordPress 部署与大项目管理
  • 飞算JavaAI智慧校园场景实践:从校园管理到师生服务的全链路技术革新
  • 【C++✨】多种 C++ 解法固定宽度右对齐输出(每个数占 8 列)
  • 常见的光源频闪控制方式
  • GitHub 热榜项目 - 日榜(2025-08-18)
  • 为什么有些相机“即插即用”,而有些则需要采集卡?
  • 联动无影(TscanPlus)送激活码
  • 短剧小程序系统开发:推动短剧行业规范化与标准化发展
  • 【计算机网络】TCP/IP
  • 决策树简单实战
  • 【github-action 如何为github action设置secrets/environment】