Linux 内核 内存管理memblock 分配器编程接口 ① ( memblock 分配器编程接口简介 | memblock_add 函数原型分析 | memblock_add 函数源码 )

Posted 韩曙亮

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux 内核 内存管理memblock 分配器编程接口 ① ( memblock 分配器编程接口简介 | memblock_add 函数原型分析 | memblock_add 函数源码 )相关的知识,希望对你有一定的参考价值。

文章目录





一、memblock 分配器编程接口



memblock 分配器提供了如下编程接口 :

① 添加内存 : memblock_add 函数 , 将 内存块区域 添加到 memblock.memory 成员中 , 即 插入一块可用的物理内存 ;

② 删除内存 : memblock_remove 函数 , 删除 内存块区域 ;

③ 分配内存 : memblock_alloc 函数 , 申请分配内存 ;

④ 释放内存 : memblock_free 函数 , 释放之前分配的内存 ;





二、memblock_add 函数原型分析



memblock_add 函数 , 将 内存块区域 添加到 memblock.memory 成员中 , 即 插入一块可用的物理内存 ;

memblock_add 函数原型如下 :

int __init_memblock memblock_add(phys_addr_t base, phys_addr_t size)

phys_addr_t base 参数 表示 被添加的 " 内存块 " " 起始地址 " ;

phys_addr_t size 参数 表示 被添加的 " 内存块 " " 大小 " ;


memblock_add 函数 中 , 调用 memblock_add_range 函数 , 将内存块添加到 memblock.memory 中 ;

memblock_add_range(&memblock.memory, base, size, MAX_NUMNODES, 0);




三、memblock_add 函数源码



memblock_add 函数 定义在 Linux 内核源码的 linux-4.12\\mm\\memblock.c#603 位置 ;

int __init_memblock memblock_add(phys_addr_t base, phys_addr_t size)

	phys_addr_t end = base + size - 1;

	memblock_dbg("memblock_add: [%pa-%pa] %pF\\n",
		     &base, &end, (void *)_RET_IP_);

	return memblock_add_range(&memblock.memory, base, size, MAX_NUMNODES, 0);

源码路径 : linux-4.12\\mm\\memblock.c#603

以上是关于Linux 内核 内存管理memblock 分配器编程接口 ① ( memblock 分配器编程接口简介 | memblock_add 函数原型分析 | memblock_add 函数源码 )的主要内容,如果未能解决你的问题,请参考以下文章

Linux 内核 内存管理memblock 分配器 ② ( memblock_type 内存块类型 | memblock_type 结构体成员分析 )

Linux 内核 内存管理memblock 分配器编程接口 ⑤ ( memblock_free 函数 | memblock_remove_range 函数 )

Linux 内核 内存管理memblock 分配器 ③ ( memblock_region 内存块区域 | memblock_region 结构体成员分析 | memblock 分配器标志位 )

Linux 内核 内存管理memblock 分配器编程接口 ① ( memblock 分配器编程接口简介 | memblock_add 函数原型分析 | memblock_add 函数源码 )

Linux 内核 内存管理memblock 分配器编程接口 ③ ( memblock_remove 函数 | memblock_remove_range 函数 )

Linux 内核 内存管理memblock 分配器编程接口 ④ ( memblock_alloc 函数 | memblock_alloc_base 函数 )