【Linux 内核 内存管理】虚拟地址空间布局架构 ③ ( 内存描述符 mm_struct 结构体成员分析 | mmap | mm_rb | task_size | pgd | mm_users )
文章目录
- 一、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 )相关推荐
- 【Linux 内核 内存管理】虚拟地址空间布局架构 ② ( 用户虚拟地址空间组成 | 内存描述符 mm_struct 结构体源码 )
文章目录 一.用户虚拟地址空间组成 二.内存描述符 mm_struct 结构体源码 一.用户虚拟地址空间组成 " 用户虚拟地址空间 " 包括以下区域 : ① 代码段 ② 数据段 ③ ...
- 【Linux 内核 内存管理】Linux 内核堆内存管理 ① ( 堆内存管理 | 内存描述符 mm_struct 结构体 | mm_struct 结构体中的 start_brk、brk 成员 )
文章目录 一.堆内存管理 二.内存描述符 mm_struct 结构体 三.mm_struct 结构体中的 start_brk.brk 成员 一.堆内存管理 Linux 操作系统中的 " 堆内 ...
- 【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 结构体完整源码 ...
- 【Linux 内核 内存管理】memblock 分配器 ③ ( memblock_region 内存块区域 | memblock_region 结构体成员分析 | memblock 分配器标志位 )
文章目录 一.memblock_region 内存块区域 二.memblock_region 结构体成员分析 1.base 成员 2.size 成员 3.flags 成员 4.nid 成员 三.mem ...
- 【Linux 内核 内存管理】分区伙伴分配器 ② ( free_area 空闲区域结构体源码 | 分配标志位 | GFP_ZONE_TABLE 标志位区域类型映射表 |分配标志位对应的内存区域类型 )
文章目录 一.free_area 空闲区域结构体源码分析 二.分配标志位 三.GFP_ZONE_TABLE 标志位区域类型映射表 四.分配标志位对应的内存区域类型 一.free_area 空闲区域结构 ...
- Linux进程描述符task_struct结构体详解--Linux进程的管理与调度(一)
转自:http://blog.csdn.net/gatieme/article/details/51383272 日期 内核版本 架构 作者 GitHub CSDN 2016-05-12 Linux- ...
- Linux进程描述符task_struct结构体简析
进程是处于执行期的程序以及它所管理的资源(如打开的文件.挂起的信号.进程状态.地址空间等等)的总称 Linux内核通过一个被称为进程描述符的task_struct结构体来管理进程,这个结构体包含了一个 ...
- 深入理解Linux进程描述符task_struct结构体
进程是处于执行期的程序以及它所管理的资源(如打开的文件.挂起的信号.进程状态.地址空间等等)的总称.注意,程序并不是进程,实际上两个或多个进程不仅有可能执行同一程序,而且还有可能共享地址空间等资源. ...
- c语言 结构体映射,内存管理之4:页面映射中的结构体
date: 2014-09-10 19:09 备注:本文中引用的内核代码的版本是2.4.0. 在前面的文章中,我们介绍了linux页式内存管理,讲到了页面目录PGD.中间目录PMD以及页表PT,本文来 ...
最新文章
- 自监督学习简介以及在三大领域中现状
- 关于java中Math的一些用法
- 龙岩学院计算机专业宿舍,龙岩学院的各个学院位置有谁能说下
- C# int[,] 和 int[][]
- fis pure开发php,50个精品网站鉴赏
- 智慧交通day02-车流量检测实现06:目标估计模型-卡尔曼滤波
- 福大软工1816 · 第一次作业 - 准备
- 计算机 科学计算应用邻预,电子计算机的工作特性主要有什么
- 转liunx 常用命令
- 4、vueJs基础知识04
- 初读《Linux运维之道》浅见
- 基于PHP的网上书店系统(前后台)
- [黑苹果]简单修改FB实现显存增加至2048MB修复某些花屏
- VS2019下cmake项目:利用ELAS方法计算双目视差
- linux系统下回收站,Linux怎么开启回收站功能
- vc语言c1083错误,VC Fatal Error C1083的几种解决方案
- Ubuntu16.04 + Titan XP + cuda8.0 + cudnn5.1 + opencv3.3.0 + caffe
- VMware虚拟机安装macos Big Sur 11.1.0 (20C69)镜像CDR/ISO下载
- 51单片机入门(2)LED点亮的背后
- 小程序canvas生成海报保存至手机相册
热门文章
- Microsoft-Office-Professional-Plus-2007
- 中国万网域名注册量动态:12月上旬净增8424个
- ibm服务器imm管理方式简介
- 画正圆角矩形 - HTML5 Canvas 作图
- [转帖]Linux中的15个基本‘ls’命令示例
- git 版本操作命令大全
- 安卓手机如何解压缩文件
- linux useradd(adduser)命令参数及用法详解(linux创建新用户命令)
- ascx页面获取标签的通用方法
- % %和ltscripte runat=server的区别