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

1.1.1 memblock

系統初始化的時候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)

相關文章
相關標籤/搜索