bootmem_init()始化内存数据结构包括内存节点,内存域和页帧page||--->arm64_numa_init();|支持numa架构||--->zone_sizes_init(min,max);来初始化节点和管理区的一些数据项||--->free_area_init_node|初始化内存节点||--->free_area_init_core|初始化zone||--->memmap_init|初始化page页面||--->...
start_kernel ——> setup_arch ——> arch_mem_init ——> bootmem_init ——> init_bootmem_node: 此时,不得不说的就是 bootmem 。 1. 什么是bootmem: 我们都知道,所有的物理内存是交给内核管理的,或者说是交给内存管理子系统管理的。那么,从内核启动到内核管理子系统启动之间,是否需要内存呢?答案是肯...
1 bootmem_init的位置 arm架构下, 在setup_arch中通过paging_init函数初始化内核分页机制之后, 内核通过bootmem_init()开始完成内存结点和内存区域的初始化工作,其函数定义在arch/arm64/mm/init.c中, void __init setup_arch(char **cmdline_p) { early_fixmap_init(); early_ioremap_init(); setup_machine...
在分页机制完成后, 内核通过setup_arch()->bootmem_init开始进行内存基本数据结构(内存结点pg_data_t, 内存域zone和页帧)的初始化工作, 就是在这个函数中, 内核开始从体系结构相关的部分逐渐展开到体系结构无关的部分, 在zone_sizes_init->free_area_init_node中开始, 内核开始进行内存基本数据结构的初始化, ...
mm_init中执行mem_init,将原通过bootmem分配器管理的低端内存 及 通过meminfo得知的高端内存释放到伙伴系统中,最后bootmem位图本身占用的低端内存物理页也被释放进伙伴系统,当然对于内核、初始页表、pkmap页表、struct page实例、ramdisk、percpu变量、dentry_hashtable、inode_hash_table已经被占用的区域不会被释放(对于...
在初始化内存结点和内存域之前, 内核首先通过setup_arch()-->bootmem_init()-->zone_sizes_init()来初始化节点和管理区的一些数据项, 其中关键的是初始化了系统中各个内存域的页帧边界,保存在max_zone_pfn数组. [zone_sizes_init](zone_sizes_init函数定义在 arch/arm64/mm/init.c?v=4.7, line 92, 由...
//bootmem_init_node():为指定节点的主内存创建映射 staticunsignedlong__initbootmem_init_node(intnode,structmeminfo*mi){ unsignedlongstart_pfn,end_pfn,boot_pfn; unsignedintboot_pages; pg_data_t*pgdat; inti; start_pfn=-1UL; end_pfn=0; /* *Calculatethepfnrange,andmapthememorybanksfor...
从物理内存角度描述内存之间的关系(bootmem_init) 1.内存条(bank):由内存插槽组成 2.节点(node):从一个cpu 访问速度相同的内存的集合,包含多个bank,使用pg_data_t 表示,称为节点描述符 3.uma:cpu 对所以内存访问的速度一致 numa:cpu 对所以内存访问的速度不一致 4.zone:节点中具有相同内存属性的区域,有zone...
static unsigned long __init bootmem_init_node(int node, struct meminfo *mi) in arch/arm/mm/init.c 1.1 根据内存信息重新映射页表,此处为低端内存的线性映射 map_memory_bank(bank) 1.2 Allocate the bootmem bitmap page bootmem分配器用每一bit表示一个物理页框的使用情况,该函数计算表示所有的物理页...
mm_init中执行mem_init,将原通过bootmem分配器管理的低端内存 及 通过meminfo得知的高端内存释放到伙伴系统中,最后bootmem位图本身占用的低端内存物理页也被释放进伙伴系统,当然对于内核、初始页表、pkmap页表、struct page实例、ramdisk、percpu变量、dentry_hashtable、inode_hash_table已经被占用的区域不会被释放(对于...