3.free_all_bootmem 1)reset_node_lowmem_managed_pages,将zone 结构中的z->managed_pages =0,如果支持高端内存 2)free_low_memory_core_early—–>__free_memory_core 引用参考: 内存管理之函数mm_init解读之mem_init
在分页机制完成后, 内核通过setup_arch()->bootmem_init开始进行内存基本数据结构(内存结点pg_data_t, 内存域zone和页帧)的初始化工作, 就是在这个函数中, 内核开始从体系结构相关的部分逐渐展开到体系结构无关的部分, 在zone_sizes_init->free_area_init_node中开始, 内核开始进行内存基本数据结构的初始化, ...
unsignedlongfree_all_bootmem_core(bootmem_data_t *bdata)|-->unsignedlongstart = bdata->node_min_pfn;|存放低端内存的起始物理页号.| unsignedlongend = bdata->node_low_pfn;|存放低端内存的结束物理页号.| |-->while(start <end)|--{| unsignedlong*map = bdata->node_bootmem_map;| idx ...
bdata->node_min_pfn = start; // 记录 node_min_pfn bdata->node_low_pfn = end; // 记录 node_low_pfn link_bootmem(bdata); // bdata和什么做关联? /* * Initially all pages are reserved - setup_arch() has to * register free RAM areas explicitly. */ // 初始化所有保留的页——s...
setup_arch --->arm64_memblock_init --->early_init_fdt_scan_reserved_mem --->fdt_init_reserved_mem --->__reserved_mem_init_node fdt_init_reserved_mem drivers/of/of_reserved_mem.c 246void__init fdt_init_reserved_mem(void)247{248inti;253for(i =0; i < reserved_mem_count; i++)...
内核接着setup_arch()->bootmem_init()函数开始执行 体系结构相关的代码需要在启动期间建立如下信息 系统中各个内存域的页帧边界,保存在max_zone_pfn数组 早期的内核还需记录各结点页帧的分配情况,保存在全局变量early_node_map中 内核提供了一个通用的框架, 用于将上述信息转换为伙伴系统预期的节点和内存域数据...
在分页机制完成后, 内核通过setup_arch()->bootmem_init开始进行内存基本数据结构(内存结点pg_data_t, 内存域zone和页帧)的初始化工作, 就是在这个函数中, 内核开始从体系结构相关的部分逐渐展开到体系结构无关的部分, 在zone_sizes_init->free_area_init_node中开始, 内核开始进行内存基本数据结构的初始化, ...