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)