【Linux 内核 内存管理】memblock 分配器 ③ ( memblock_region 内存块区域 | memblock_region 结构体成员分析 | memblock 分配器标志位 )
2023-09-14 09:07:26 时间
文章目录
一、memblock_region 内存块区域
memblock 分配器 中 , 内存块区域 使用 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, /* don't 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, /* don't 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, /* don't 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, /* don't add to kernel direct mapping */
相关文章
- linux中使用valgrind检测内存泄露
- 我理解的Linux内存管理
- 【Linux基础】查看硬件信息-内存
- Linux堆内存管理深入分析(上)
- 【Linux 内核 内存管理】物理分配页 ⑨ ( __alloc_pages_slowpath 慢速路径调用函数源码分析 | retry 标号代码分析 )
- 【Linux 内核 内存管理】物理分配页 ③ ( 物理页分配标志位分析 | ALLOC_WMARK_MIN | ALLOC_WMARK_MASK | ALLOC_HARDER )
- 【Linux 内核 内存管理】mmap 系统调用源码分析 ⑤ ( mmap_region 函数执行流程 | mmap_region 函数源码 )
- 【Linux 内核 内存管理】mmap 系统调用源码分析 ④ ( do_mmap 函数执行流程 | do_mmap 函数源码 )
- 【Linux 内核 内存管理】内存管理系统调用 ② ( mmap 创建内存映射 | mmap 创建内存映射 与 malloc 申请内存对比 | mmap 创建内存映射 与 普通文件操作对比 )
- 【Linux 内核 内存管理】内存映射相关数据结构 ⑥ ( 文件映射 虚拟内存区域 | vm_area_struct | vm_operations_struct | 匿名映射 虚拟内存区域 )
- 【Linux 内核 内存管理】内存映射原理 ② ( 内存映射概念 | 文件映射 | 匿名映射 | 内存映射原理 | 分配虚拟内存页 | 产生缺页异常 | 分配物理内存页 | 共享内存 | 进程内存 )
- 【Linux 内核 内存管理】Linux 内核堆内存管理 ① ( 堆内存管理 | 内存描述符 mm_struct 结构体 | mm_struct 结构体中的 start_brk、brk 成员 )
- 【Linux 内核 内存管理】Linux 内核内存布局 ② ( x86_64 架构体系内存分布 | 查看 /proc/meminfo 文件 | /proc/meminfo 重要字段解析 )
- 【Linux 内核 内存管理】优化内存屏障 ④ ( 处理器内存屏障 | 八种处理器内存屏障 | 通用内存屏障 | 写内存屏障 | 读内存屏障 | 数据依赖屏障 | 强制性内存屏障 |SMP内存屏障 )
- 【Linux 内核 内存管理】RCU 机制 ③ ( RCU 模式下添加链表项 list_add_rcu 函数 | RCU 模式下删除链表项 list_del_rcu 函数 )
- 【Linux 内核 内存管理】RCU 机制 ① ( RCU 机制简介 | RCU 机制的优势与弊端 | RCU 机制的链表应用场景 )
- 【Linux 内核】NUMA 非一致内存访问结构 ( NUMA 概念介绍 | NUMA 架构优势分析 | SMP、NUMA、MPP 架构 )
- 嵌入式linux开发,将新创建文件存储于linux内存中
- linux内存操作--ioremap和mmap学习笔记
- sar 找出系统瓶颈的利器 目前Linux上最为全面的系统性能分析工具之一 直接 sar -dur 1 30 即可看内存 CPU和IO占用
- 【Linux】常用命令:磁盘、内存、cron、命令超详细介绍
- Linux 内存是如何工作的
- Linux 内存泄漏了,我该如何定位和处理?