bootmem的笔记

来源:互联网 发布:北京电子科技学院知乎 编辑:程序博客网 时间:2024/06/04 18:50
//The struct of bootmem is simple, first several pages are
//used for a page frame bitmap. All left pages can be used
//by system during booting phrase

typedef struct bootmem_data {
    unsigned long node_boot_start;  //start physical addr
    unsigned long node_low_pfn;     //end page frame
    void *node_bootmem_map;         //page frame bitmap
    unsigned long last_offset;
    unsigned long last_pos;
    unsigned long last_success; /* Previous allocation point.  To speed
                                 * up searching */
} bootmem_data_t;

init_bootmem_core()
    //init bootmem_data_t struct
    //node_boot_start, node_low_pfn, node_bootmem_map
    //set bitmap node_bootmem_map to 1


//Marks a particular physical memory range as unallocatable
reserve_bootmem_core()
    //change the bitmap for the range

free_bootmem()
    free_bootmem_core()

//Marks a particular physical memory range as allocatable
free_bootmem_core()


__alloc_bootmem_node()
    //find a continuous memory area and set bitmap to 1
    if __alloc_bootmem_core() failed
        __alloc_bootmem()
__alloc_bootmem
    for_each_pgdat(pgdat)
        __alloc_bootmem_core

//reclaim pages and added them to Buddy system
free_all_bootmem

原创粉丝点击