文章目录

  • 一、mm_struct 结构体成员分析
    • 1、mmap 成员
    • 2、mm_rb 成员
    • 3、get_unmapped_area 函数指针
    • 4、task_size 成员
    • 5、pgd 成员
    • 6、mm_users 成员
    • 7、mm_count 成员

一、mm_struct 结构体成员分析


mm_struct 结构体 在 Linux 源码 linux-4.12\include\linux\mm_types.h#359 位置 ;

参考 【Linux 内核 内存管理】虚拟地址空间布局架构 ② ( 用户虚拟地址空间组成 | 内存描述符 mm_struct 结构体源码 ) 博客 ;

下面开始分析 mm_struct 结构体 的重要 成员 ;

1、mmap 成员

struct vm_area_struct *mmap , 表示 虚拟内存区域 的 " 链表 " 数据结构 ;

 struct vm_area_struct *mmap;        /* list of VMAs */

2、mm_rb 成员

struct rb_root mm_rb , 表示 虚拟内存区域 的 " 红黑树 " 数据结构 ;

 struct rb_root mm_rb;

3、get_unmapped_area 函数指针

get_unmapped_area 函数指针 , 该函数表示 在 " 内存映射区域 " 找到 " 未被映射区 " ;

#ifdef CONFIG_MMUunsigned long (*get_unmapped_area) (struct file *filp,unsigned long addr, unsigned long len,unsigned long pgoff, unsigned long flags);
#endif

4、task_size 成员

unsigned long task_size , 表示 " 用户虚拟地址空间 " 大小 ;

 unsigned long task_size;        /* size of task vm space */

5、pgd 成员

pgd_t * pgd , 该指针指向 " 内存页 " 全局目录 , 第一级的页表 ;

 pgd_t * pgd;

6、mm_users 成员

atomic_t mm_users , 表示有多少个 " 进程 " 共享 " 用户虚拟地址空间 " , 即 线程组 的 进程 数量 ;

 /*** @mm_users: The number of users including userspace.** Use mmget()/mmget_not_zero()/mmput() to modify. When this drops* to 0 (i.e. when the task exits and there are no other temporary* reference holders), we also release a reference on @mm_count* (which may then free the &struct mm_struct if @mm_count also* drops to 0).*/atomic_t mm_users;

7、mm_count 成员

atomic_t mm_count , 表示 内存描述符 引用计数 ;

 /*** @mm_count: The number of references to &struct mm_struct* (@mm_users count as 1).** Use mmgrab()/mmdrop() to modify. When this drops to 0, the* &struct mm_struct is freed.*/atomic_t mm_count;

【Linux 内核 内存管理】虚拟地址空间布局架构 ③ ( 内存描述符 mm_struct 结构体成员分析 | mmap | mm_rb | task_size | pgd | mm_users )相关推荐

  1. 【Linux 内核 内存管理】虚拟地址空间布局架构 ② ( 用户虚拟地址空间组成 | 内存描述符 mm_struct 结构体源码 )

    文章目录 一.用户虚拟地址空间组成 二.内存描述符 mm_struct 结构体源码 一.用户虚拟地址空间组成 " 用户虚拟地址空间 " 包括以下区域 : ① 代码段 ② 数据段 ③ ...

  2. 【Linux 内核 内存管理】Linux 内核堆内存管理 ① ( 堆内存管理 | 内存描述符 mm_struct 结构体 | mm_struct 结构体中的 start_brk、brk 成员 )

    文章目录 一.堆内存管理 二.内存描述符 mm_struct 结构体 三.mm_struct 结构体中的 start_brk.brk 成员 一.堆内存管理 Linux 操作系统中的 " 堆内 ...

  3. 【Linux 内核 内存管理】内存映射相关数据结构 ③ ( vm_area_struct 结构体成员分析 | shared 成员 | anon_vma_chain 成员 | anon_vma 成员 )

    文章目录 一.vm_area_struct 结构体成员分析 1.shared 成员 2.anon_vma_chain 成员 3.anon_vma 成员 二.vm_area_struct 结构体完整源码 ...

  4. 【Linux 内核 内存管理】memblock 分配器 ③ ( memblock_region 内存块区域 | memblock_region 结构体成员分析 | memblock 分配器标志位 )

    文章目录 一.memblock_region 内存块区域 二.memblock_region 结构体成员分析 1.base 成员 2.size 成员 3.flags 成员 4.nid 成员 三.mem ...

  5. 【Linux 内核 内存管理】分区伙伴分配器 ② ( free_area 空闲区域结构体源码 | 分配标志位 | GFP_ZONE_TABLE 标志位区域类型映射表 |分配标志位对应的内存区域类型 )

    文章目录 一.free_area 空闲区域结构体源码分析 二.分配标志位 三.GFP_ZONE_TABLE 标志位区域类型映射表 四.分配标志位对应的内存区域类型 一.free_area 空闲区域结构 ...

  6. Linux进程描述符task_struct结构体详解--Linux进程的管理与调度(一)

    转自:http://blog.csdn.net/gatieme/article/details/51383272 日期 内核版本 架构 作者 GitHub CSDN 2016-05-12 Linux- ...

  7. Linux进程描述符task_struct结构体简析

    进程是处于执行期的程序以及它所管理的资源(如打开的文件.挂起的信号.进程状态.地址空间等等)的总称 Linux内核通过一个被称为进程描述符的task_struct结构体来管理进程,这个结构体包含了一个 ...

  8. 深入理解Linux进程描述符task_struct结构体

    进程是处于执行期的程序以及它所管理的资源(如打开的文件.挂起的信号.进程状态.地址空间等等)的总称.注意,程序并不是进程,实际上两个或多个进程不仅有可能执行同一程序,而且还有可能共享地址空间等资源. ...

  9. c语言 结构体映射,内存管理之4:页面映射中的结构体

    date: 2014-09-10 19:09 备注:本文中引用的内核代码的版本是2.4.0. 在前面的文章中,我们介绍了linux页式内存管理,讲到了页面目录PGD.中间目录PMD以及页表PT,本文来 ...

最新文章

  1. 自监督学习简介以及在三大领域中现状
  2. 关于java中Math的一些用法
  3. 龙岩学院计算机专业宿舍,龙岩学院的各个学院位置有谁能说下
  4. C# int[,] 和 int[][]
  5. fis pure开发php,50个精品网站鉴赏
  6. 智慧交通day02-车流量检测实现06:目标估计模型-卡尔曼滤波
  7. 福大软工1816 · 第一次作业 - 准备
  8. 计算机 科学计算应用邻预,电子计算机的工作特性主要有什么
  9. 转liunx 常用命令
  10. 4、vueJs基础知识04
  11. 初读《Linux运维之道》浅见
  12. 基于PHP的网上书店系统(前后台)
  13. [黑苹果]简单修改FB实现显存增加至2048MB修复某些花屏
  14. VS2019下cmake项目:利用ELAS方法计算双目视差
  15. linux系统下回收站,Linux怎么开启回收站功能
  16. vc语言c1083错误,VC Fatal Error C1083的几种解决方案
  17. Ubuntu16.04 + Titan XP + cuda8.0 + cudnn5.1 + opencv3.3.0 + caffe
  18. VMware虚拟机安装macos Big Sur 11.1.0 (20C69)镜像CDR/ISO下载
  19. 51单片机入门(2)LED点亮的背后
  20. 小程序canvas生成海报保存至手机相册

热门文章

  1. Microsoft-Office-Professional-Plus-2007
  2. 中国万网域名注册量动态:12月上旬净增8424个
  3. ibm服务器imm管理方式简介
  4. 画正圆角矩形 - HTML5 Canvas 作图
  5. [转帖]Linux中的15个基本‘ls’命令示例
  6. git 版本操作命令大全
  7. 安卓手机如何解压缩文件
  8. linux useradd(adduser)命令参数及用法详解(linux创建新用户命令)
  9. ascx页面获取标签的通用方法
  10. % %和ltscripte runat=server的区别