【Linux 内核 内存管理】memblock 分配器 ① ( memblock 分配器简介 | memblock 结构体成员分析 | 物理内存类型 与 内存类型 )
2023-09-14 09:07:26 时间
文章目录
ARM64 架构体系中 , 不能使用 bootmem
引导内存分配器 , 使用的是 memblock
分配器 ;
一、memblock 分配器
memblock 分配器 定义在 Linux 内核源码的 linux-4.12\include\linux\memblock.h#48 位置 ;
struct memblock {
bool bottom_up; /* is bottom up direction? */
phys_addr_t current_limit;
struct memblock_type memory;
struct memblock_type reserved;
#ifdef CONFIG_HAVE_MEMBLOCK_PHYS_MAP
struct memblock_type physmem;
#endif
};
源码路径 : linux-4.12\include\linux\memblock.h#48
二、memblock 结构体分析
1、bottom_up 成员
bottom_up
成员表示 内存分配方式 ,
- TRUE , 表示 从 " 低地址向上分配 " ,
- FALSE , 表示 从 " 高地址向下分配 " ;
bool bottom_up; /* is bottom up direction? */
2、current_limit 成员
current_limit
成员表示 可分配内存的 最大物理地址 ;
phys_addr_t current_limit;
3、memory 成员
memory
成员 表示 内存类型 , 该内存 包括 已分配 和 未分配 的内存 ;
struct memblock_type memory;
4、reserved 成员
reserved
成员 表示 预留类型 , 该内存只包含 已分配内存 ;
struct memblock_type reserved;
5、physmem 成员
physmem
成员 表示 物理内存类型 ;
#ifdef CONFIG_HAVE_MEMBLOCK_PHYS_MAP
struct memblock_type physmem;
#endif
三、物理内存类型 与 内存类型
物理内存类型 与 内存类型 :
- 包含关系 : 物理内存类型 包含 内存类型 ;
- 内存类型 : 在 内核 引导启动时 , 只能使用
mem
内核参数 指定可用内存大小范围 , 该范围之外的内存不可使用 , 即内核无法使用所有的内存 ; - 物理类型 : 包含所有的内存范围 ;
相关文章
- Linux下内存查看命令
- Linux内核中常见内存分配函数
- Linux下查看内存使用情况方法总结
- Linux安装minikube命令整理
- Linux中进程内存RSS与cgroup内存的RSS统计 - 差异
- 【Linux 内核 内存管理】物理分配页 ⑨ ( __alloc_pages_slowpath 慢速路径调用函数源码分析 | retry 标号代码分析 )
- 【Linux 内核 内存管理】物理分配页 ④ ( __alloc_pages_nodemask 函数源码分析 | 快速路径 | 慢速路径 | get_page_from_freelist 源码 )
- 【Linux 内核 内存管理】物理分配页 ② ( __alloc_pages_nodemask 函数参数分析 | __alloc_pages_nodemask 函数分配物理页流程 )
- 【Linux 内核 内存管理】memblock 分配器 ⑤ ( Linux 内核中定义 memblock 分配器的位置 | ARM64体系架构下 Linux内核初始化 memblock 分配器流程 )
- 【Linux 内核 内存管理】memblock 分配器 ④ ( memblock、memblock_type、memblock_region 结构体的关系 )
- 【Linux 内核 内存管理】memblock 分配器 ② ( memblock_type 内存块类型 | memblock_type 结构体成员分析 )
- 【Linux 内核 内存管理】引导内存分配器 bootmem ③ ( bootmem 引导内存分配器算法 | 低端内存映射 | 内存记录位图 | 最先适配算法 | 内存分配记录 | 内存操作函数 )
- 【Linux 内核 内存管理】物理内存组织结构 ① ( 多处理器体系结构 | SMP/UMA 对称多处理器结构 | NUMA 非一致内存访问结构 )
- 【Linux 内核 内存管理】munmap 系统调用源码分析 ② ( do_munmap 函数执行流程 | do_munmap 函数源码 )
- 【Linux 内核 内存管理】mmap 系统调用源码分析 ② ( sys_mmap_pgoff 系统调用函数执行流程 | sys_mmap_pgoff 函数源码 )
- 【Linux 内核 内存管理】mmap 系统调用源码分析 ① ( mmap 与 mmap2 系统调用 | Linux 内核中的 mmap 系统调用源码 )
- 【Linux 内核 内存管理】内存映射相关数据结构 ⑥ ( 文件映射 虚拟内存区域 | vm_area_struct | vm_operations_struct | 匿名映射 虚拟内存区域 )
- 【Linux 内核 内存管理】内存映射相关数据结构 ③ ( vm_area_struct 结构体成员分析 | shared 成员 | anon_vma_chain 成员 | anon_vma 成员 )
- 【Linux 内核 内存管理】内存映射相关数据结构 ② ( vm_area_struct 结构体成员分析 | vm_mm 成员 | vm_page_prot 成员 | vm_flags 成员 )
- 【Linux 内核 内存管理】虚拟地址空间布局架构 ⑥ ( mm_struct 结构体源码 | vm_area_struct 结构体源码 )
- 【Linux 内核 内存管理】Linux 内核内存布局 ③ ( Linux 内核 动态分配内存 系统接口函数 | 统计输出 vmalloc 分配的内存 )
- linux命令之内存信息查询
- linux的vm.overcommit_memory的内存分配参数详解