Linux 内核 内存管理memblock 分配器 ③ ( memblock_region 内存块区域 | memblock_region 结构体成员分析 | memblock 分配器标志位 )
愿君学长松,慎勿作桃李。这篇文章主要讲述Linux 内核 内存管理memblock 分配器 ③ ( memblock_region 内存块区域 | memblock_region 结构体成员分析 | memblock 分配器标志位 )相关的知识,希望能为你提供帮助。
文章目录
- ??一、memblock_region 内存块区域??
- ??二、memblock_region 结构体成员分析??
- ??1、base 成员??
- ??2、size 成员??
- ??3、flags 成员??
- ??4、nid 成员??
- ??三、memblock 分配器标志枚举??
- ??1、MEMBLOCK_NONE??
- ??2、MEMBLOCK_HOTPLUG??
- ??3、MEMBLOCK_MIRROR??
- ??4、MEMBLOCK_NOMAP??
?struct memblock_region?
? 结构体进行描述 ,该结构体定义在 Linux 内核源码的 linux-4.12\\include\\linux\\memblock.h#31 位置
/* Definition of memblock flags. */
enum
MEMBLOCK_NONE= 0x0,/* No special request */
MEMBLOCK_HOTPLUG= 0x1,/* hotpluggable region */
MEMBLOCK_MIRROR= 0x2,/* mirrored region */
MEMBLOCK_NOMAP= 0x4,/* dont add to kernel direct mapping */
;
struct memblock_region
phys_addr_t base;
phys_addr_t size;
unsigned long flags;
#ifdef CONFIG_HAVE_MEMBLOCK_NODE_MAP
int nid;
#endif
;
源码路径 : linux-4.12\\include\\linux\\memblock.h#31
二、memblock_region 结构体成员分析 1、base 成员?
?base?
? 成员 表示 " 内存块区域 " 的起始地址 ;
phys_addr_t base;
2、size 成员?
?size?
? 成员 表示 " 内存块区域 " 的大小 ;
phys_addr_t size;
3、flags 成员?
?flags?
? 成员 表示 " 内存块区域 " 的标志位 ;
unsigned long flags;
可设置的标志位如下 :
/* Definition of memblock flags. */
enum
MEMBLOCK_NONE= 0x0,/* No special request */
MEMBLOCK_HOTPLUG= 0x1,/* hotpluggable region */
MEMBLOCK_MIRROR= 0x2,/* mirrored region */
MEMBLOCK_NOMAP= 0x4,/* dont add to kernel direct mapping */
;
4、nid 成员?
?nid?
? 成员 表示 " 内存块区域 " 的节点编号 ;
#ifdef CONFIG_HAVE_MEMBLOCK_NODE_MAP
int nid;
#endif
三、memblock 分配器标志枚举
memblock 分配器标志是一个枚举类型 ,
该 枚举 定义在 Linux 内核源码的 linux-4.12\\include\\linux\\memblock.h#23 位置 ;
/* Definition of memblock flags. */
enum
MEMBLOCK_NONE= 0x0,/* No special request */
MEMBLOCK_HOTPLUG= 0x1,/* hotpluggable region */
MEMBLOCK_MIRROR= 0x2,/* mirrored region */
MEMBLOCK_NOMAP= 0x4,/* dont add to kernel direct mapping */
;
1、MEMBLOCK_NONE?
?MEMBLOCK_NONE?
? 表示 " 没有特殊要求的区域 " ;
MEMBLOCK_NONE= 0x0,/* No special request */
2、MEMBLOCK_HOTPLUG?
?MEMBLOCK_HOTPLUG?
? 表示 " 支持热插拔区域 " , 在运行过程中 , 物理内存可以 " 热插拔 " ;
MEMBLOCK_HOTPLUG= 0x1,/* hotpluggable region */
3、MEMBLOCK_MIRROR?
?MEMBLOCK_MIRROR?
? 表示 " 镜像区域 " ;
Linux 内核将 内存中的数据 , 进行了复制备份 , 分别存放在 " 主内存 " 和 " 镜像内存 " 中 ;
MEMBLOCK_MIRROR= 0x2,/* mirrored region */
4、MEMBLOCK_NOMAP?
?MEMBLOCK_NONE?
? 表示 " 线性映射区域 " , 该区域不添加到内核映射区域 ;
MEMBLOCK_NOMAP= 0x4,/* dont add to kernel direct mapping */
【Linux 内核 内存管理memblock 分配器 ③ ( memblock_region 内存块区域 | memblock_region 结构体成员分析 | memblock 分配器标志位 )】
推荐阅读
- Redis实现并发阻塞锁方案
- 带你彻底吃透Spring
- redis优化系列高可用集群Redis Cluster的认识
- Linux 内核 内存管理伙伴分配器 ② ( 伙伴分配器分配内存流程 )
- [C++]C++入门到入土篇 HelloWorld 解析 && C++入门
- Python基础知识自检,离深入掌握 Python 还有多远
- [ 数据结构--C语言 ]不收藏必后悔系列--二叉树初阶
- poj-2486-Apple Tree
- 支付宝APP支付里设置应用网关和授权回调地址是不必填的