Memeory Management Code

@[TOC] 目录

1:内存解析流程

(1)Scane Dtb file
扫描DTB文件,然后获取Memory的布局以及大小范围等.
(2)

2: Linux Memory 初始化

asmlinkage void __init start_kernel(void)
{
    ...........
    setup_arch(&command_line);
    .......................
    build_all_zonelists();//create zone fallback order
    page_alloc_init();//register callback
    ...............
    mem_init(); //boot memory retire,create buddy allocator
    kmem_cache_init();//init slab allocator
    ...........
    anon_vma_init();//create a vma slab
    .................
}

从start_kernel()函数,memory相关的步骤,可以大致分为三大块:

  • setup_arch(): boot memory allocator初始化 和直接映射和固定映射的页表创建,然后再 启动分页单元,再初始化每个Node下的Zone
  • mem_init(): 将boot memory allocator退休,将已经在boot memory阶段使用的memory标示为reserve,将未使用的memory以page为单位释放给buddy allocator
  • keme_cache_init():初始化slab allocator的原始slab:cache_cache,在此过后,slab allocator开始使用。

你可能感兴趣的:(Memeory Management Code)