日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

linux内存初始化初期内存分配器——memblock

發布時間:2023/11/29 linux 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux内存初始化初期内存分配器——memblock 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

2019獨角獸企業重金招聘Python工程師標準>>>

1.1.1?memblock

系統初始化的時候buddy系統,slab分配器等并沒有被初始化好,當需要執行一些內存管理、內存分配的任務,就引入了一種內存管理器bootmem分配器。

當buddy系統和slab分配器初始化好后,在mem_init()中對bootmem分配器進行釋放,內存管理與分配由buddy系統,slab分配器等進行接管。

?????? 而memblock是用來替代bootmem的新接口。用__alloc_memory_core_early()取代了bootmem的__alloc_bootmem_core()來完成內存分配.

實現都位于mm/memblock.c文件中。例如,可以通過函數memblock_reserve可以保留內存。

?????? 此外還有如下函數:

int?__init_memblock memblock_add_node(phys_addr_t base, phys_addr_t size,

??????? ???????????????????????????????int?nid)

{

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

}

//移除操作

int?__init_memblock memblock_remove(phys_addr_t base, phys_addr_t size)

{

????????return?memblock_remove_range(&memblock.memory, base, size);

}

//釋放操作

int?__init_memblock memblock_free(phys_addr_t base, phys_addr_t size)

{

??????? phys_addr_t end = base + size -?1;

?

??????? memblock_dbg("?? memblock_free: [%pa-%pa]?%pF\n",

???????????????????? &base, &end, (void?*)_RET_IP_);

?

??????? kmemleak_free_part_phys(base, size);

????????return?memblock_remove_range(&memblock.reserved, base, size);

}

//標記已經使用的方法

int?__init_memblock memblock_reserve(phys_addr_t base, phys_addr_t size)

轉載于:https://my.oschina.net/u/3611008/blog/2245940

總結

以上是生活随笔為你收集整理的linux内存初始化初期内存分配器——memblock的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。