【Linuxカーネルメモリ管理】memblockアロケータプログラミングインターフェース①(memblockアロケータプログラミングインターフェース入門|memblock_add関数プロトタイプ解析|memblock_add関数ソースコード)





1.memblockディストリビュータープログラミングインターフェイス



memblockアロケータは、次のプログラミングインターフェイスを提供します。

①メモリの追加: memblock_add機能、メモリブロック領域をmemblock.memoryメンバーに追加します。つまり、使用可能な物理メモリの一部を挿入します。

②メモリの削除: memblock_remove機能、メモリブロック領域を削除します。

③メモリの割り当て: memblock_alloc機能、メモリ割り当ての申請。

④メモリの解放: memblock_free機能、以前に割り当てられたメモリを解放します。





2つ目は、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);




3、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

ここに画像の説明を挿入

おすすめ

転載: blog.csdn.net/han1202012/article/details/124286916