前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【Linux 内核 内存管理】物理内存组织结构 ⑥ ( 物理页 page 简介 | 物理页 page 与 MMU 内存管理单元 | 内存节点 pglist_data 与 物理页 page 联系 )

【Linux 内核 内存管理】物理内存组织结构 ⑥ ( 物理页 page 简介 | 物理页 page 与 MMU 内存管理单元 | 内存节点 pglist_data 与 物理页 page 联系 )

作者头像
韩曙亮
发布2023-03-30 14:49:35
6.8K0
发布2023-03-30 14:49:35
举报
文章被收录于专栏:韩曙亮的移动开发专栏

文章目录

内存管理系统

3

级结构 :

① 内存节点 Node ,

② 内存区域 Zone ,

③ 物理页 Page ,

Linux 内核中 , 使用 上述

3

级结构 描述 和 管理 " 物理内存 " ;

一、物理页 page 简介


1、物理页 page 引入

" 内存节点 " node 是内存管理的 最顶层结构 ,

" 内存节点 " 再向下划分 , 就是 " 内存区域 " zone ,

" 内存区域 " 再向下划分 , 就是 " 物理页 " page ;

2、物理页 page 与 MMU 内存管理单元

在 Linux 内核中 , MMU 内存管理单元 , 主要作用是 将 " 虚拟地址 " 映射到 真实的 " 物理地址 " 中 ,

MMU 将 物理页 page 作为内存管理基本单位 ,

不同体系结构的支持的 物理页 大小也不同 ,

32

位体系结构中 , 支持的物理页大小为

4

kb ,

64

位体系结构中 , 支持的物理页大小为

8

kb ,

  • MIPS
64

位体系结构中 , 支持的物理页大小为

16

kb ,

3、物理页 page 结构体

" 物理页 " page 是 Linux 内核 " 内存管理 " 中的 最小单位 ,

物理页 中的 " 物理地址 " 是连续的 ,

每个 " 物理页 " 使用 struct page 结构体 进行描述 ;

为了节省 " 内存管理 " 的内存开销 , 物理页的描述符 page 中都是 union 联合体 , 如 :

代码语言:javascript
复制
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 页描述数组 ;

代码语言:javascript
复制
typedef struct pglist_data {
#ifdef CONFIG_FLAT_NODE_MEM_MAP	/* means !SPARSEMEM */
	// 页描述数组
	struct page *node_mem_map;
#endif
}

参考 【Linux 内核 内存管理】物理内存组织结构 ③ ( 内存管理系统三级结构 | 内存节点描述 | 内存节点 pglist_data 结构体 | pglist_data 结构体源码 ) 博客 ;

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-04-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • 一、物理页 page 简介
    • 1、物理页 page 引入
      • 2、物理页 page 与 MMU 内存管理单元
        • 3、物理页 page 结构体
          • 4、Linux 内核源码中的 page 结构体
          • 二、内存节点 pglist_data 与 物理页 page 联系
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档