系統初始化的時候buddy系統,slab分配器等並無被初始化好,當須要執行一些內存管理、內存分配的任務,就引入了一種內存管理器bootmem分配器。node
當buddy系統和slab分配器初始化好後,在mem_init()中對bootmem分配器進行釋放,內存管理與分配由buddy系統,slab分配器等進行接管。函數
而memblock是用來替代bootmem的新接口。用__alloc_memory_core_early()取代了bootmem的__alloc_bootmem_core()來完成內存分配.spa
實現都位於mm/memblock.c文件中。例如,能夠經過函數memblock_reserve能夠保留內存。接口
此外還有以下函數:內存
int __init_memblock memblock_add_node(phys_addr_t base, phys_addr_t size,rem
int nid)it
{內存管理
return memblock_add_range(&memblock.memory, base, size, nid, 0);方法
}db
//移除操做
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)