Linux 内核 内存管理物理内存组织结构 ⑥ ( 物理页 page 简介 | 物理页 page 与 MMU 内存管理单元 | 内存节点 pglist_data 与 物理页 page 联系 )
Posted 韩曙亮
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux 内核 内存管理物理内存组织结构 ⑥ ( 物理页 page 简介 | 物理页 page 与 MMU 内存管理单元 | 内存节点 pglist_data 与 物理页 page 联系 )相关的知识,希望对你有一定的参考价值。
文章目录
内存管理系统 3 3 3级结构 :
① 内存节点 Node ,
② 内存区域 Zone ,
③ 物理页 Page ,
Linux 内核中 , 使用 上述 3 3 3 级结构 描述 和 管理 " 物理内存 " ;
一、物理页 page 简介
1、物理页 page 引入
" 内存节点 " node 是内存管理的 最顶层结构 ,
" 内存节点 " 再向下划分 , 就是 " 内存区域 " zone ,
" 内存区域 " 再向下划分 , 就是 " 物理页 " page ;
2、物理页 page 与 MMU 内存管理单元
在 Linux 内核中 , MMU 内存管理单元 , 主要作用是 将 " 虚拟地址 " 映射到 真实的 " 物理地址 " 中 ,
MMU 将 物理页 page 作为内存管理基本单位 ,
不同体系结构的支持的 物理页 大小也不同 ,
- 32 32 32 位体系结构中 , 支持的物理页大小为 4 4 4 kb ,
- 64 64 64 位体系结构中 , 支持的物理页大小为 8 8 8 kb ,
- MIPS 64 64 64 位体系结构中 , 支持的物理页大小为 16 16 16 kb ,
3、物理页 page 结构体
" 物理页 " page
是 Linux 内核 " 内存管理 " 中的 最小单位 ,
物理页 中的 " 物理地址 " 是连续的 ,
每个 " 物理页 " 使用 struct page
结构体 进行描述 ;
为了节省 " 内存管理 " 的内存开销 , 物理页的描述符 page 中都是 union 联合体 , 如 :
struct page
union
struct address_space *mapping; /* If low bit clear, points to
* inode address_space, or NULL.
* If page mapped as anonymous
* memory, low bit is set, and
* it points to anon_vma object:
* see PAGE_MAPPING_ANON below.
*/
void *s_mem; /* slab first object */
atomic_t compound_mapcount; /* first tail page */
/* page_deferred_list().next -- second tail page */
;
4、Linux 内核源码中的 page 结构体
" 物理页 " 使用 page
结构体 进行描述 , 该结构体又称为 " 页描述符 " ;
该 page
结构体 定义在 Linux 内核源码的 linux-4.12\\include\\linux\\mm_types.h#40 位置 ;
二、内存节点 pglist_data 与 物理页 page 联系
" 内存节点 " pglist_data
结构体 与 " 物理页 " page
结构体 的联系 :
在 " 内存节点 " pglist_data
结构体 中的 node_mem_map
成员 就是 该 " 内存节点 " 中所有的 " 物理页 " 描述符 page
结构体 数组 ;
CONFIG_FLAT_NODE_MEM_MAP
宏定义指的是 " 除 稀疏内存模型 之外 " 的情况 , 该情况下 声明 struct page *node_mem_map
页描述数组 ;
typedef struct pglist_data
#ifdef CONFIG_FLAT_NODE_MEM_MAP /* means !SPARSEMEM */
// 页描述数组
struct page *node_mem_map;
#endif
参考 【Linux 内核 内存管理】物理内存组织结构 ③ ( 内存管理系统三级结构 | 内存节点描述 | 内存节点 pglist_data 结构体 | pglist_data 结构体源码 ) 博客 ;
以上是关于Linux 内核 内存管理物理内存组织结构 ⑥ ( 物理页 page 简介 | 物理页 page 与 MMU 内存管理单元 | 内存节点 pglist_data 与 物理页 page 联系 )的主要内容,如果未能解决你的问题,请参考以下文章
Linux 内核 内存管理物理分配页 ⑥ ( get_page_from_freelist 快速路径调用函数源码分析 | 检查内存区域水线 | 判定节点回收 | 判定回收距离 | 回收分配页 )
Linux 内核 内存管理分区伙伴分配器 ⑥ ( zone 结构体中水线控制相关成员 | 在 Ubuntu 中查看内存区域水位线 )
Linux 内核 内存管理分区伙伴分配器 ⑥ ( zone 结构体中水线控制相关成员 | 在 Ubuntu 中查看内存区域水位线 )
Linux 内核 内存管理虚拟地址空间布局架构 ⑥ ( mm_struct 结构体源码 | vm_area_struct 结构体源码 )
Linux 内核 内存管理内存映射相关数据结构 ⑥ ( 文件映射 虚拟内存区域 | vm_area_struct | vm_operations_struct | 匿名映射 虚拟内存区域 )
Linux 内核 内存管理物理内存组织结构 ② ( 内存模型 | 平坦内存 | 稀疏内存 | 非连续内存 | 内存管理系统三级结构 | 节点 Node | 区域 Zone | 页 Page )