init_bootmem_node】的更多相关文章

初始化pg_data_t->bdtat结构体, /* * node_bootmem_map is a map pointer - the bits represent all physical * memory pages (including holes) on the node. */ typedef struct bootmem_data { unsigned long node_min_pfn; unsigned long node_low_pfn; void *node_bootmem…
目录 . 引言 . 页表 . 结构化内存管理 . 物理内存的管理 . SLAB分配器 . 处理器高速缓存和TLB控制 . 内存管理的概念 . 内存覆盖与内存交换 . 内存连续分配管理方式 . 内存非连续分配管理方式 . 虚拟内存的概念.特征及其实现 . 请求分页管理方式实现虚拟内存 . 页面置换算法 . 页面分配策略 . 页面抖动和工作集 . 缺页异常的处理 . 堆与内存管理 0. 引言 有两种类型的计算机,分别以不同的方法管理物理内存 . UMA计算机(一致内存访问 uniform memor…
内存管理子系统是linux内核最核心最重要的一部分,内核的其他部分都需要在内存管理子系统的基础上运行.而对其初始化是了解整个内存管理子系统的基础.对相关数据结构的初始化是从全局启动例程start_kernel开始的.本文详细描述了从bootloader跳转到linux内核内存管理子系统初始化期间所做的操作,从而来加深对内存管理子系统知识的理解和掌握. 内核的入口是stext,这是在arch/arm/kernel/vmlinux.lds.S中指定的.而符号stext是在arch/arm/kerne…
本地的笔记有点长,先把bootmem位图分配器的建立 及  使用过程做下梳理. 都是代码,上面做了标注.开始的汇编部分省略了(涉及的内容不多,除了swapper_pg_dir的分配). 该记录不会再添加说明,看下记录中的注释就明白了bootmem的建立及使用. 该记录中考虑了高端内存…… 从start_kernel开始…… start_kernel()    |---->page_address_init()    |     考虑支持高端内存    |     业务:初始化page_addre…
static unsigned long __init bootmem_init_node(int node, struct meminfo *mi) in arch/arm/mm/init.c 1.1 根据内存信息重新映射页表,此处为低端内存的线性映射 -->map_memory_bank(bank); -->create_mapping(&map); -->alloc_init_section(pgd, addr, next, phys, type); -->/*如果地…
转自:http://blog.csdn.net/lights_joy/article/details/2704788 版权声明:本文为博主原创文章,未经博主允许不得转载.   目录(?)[-] 11   相关数据结构 111             bootmem_data 12   相关全局变量 121             bdata_list 13   初始化 131             setup_arch 132             init_bootmem_node 133…
start_kernel ——> setup_arch ——> arch_mem_init ——> bootmem_init ——> init_bootmem_node: 此时,不得不说的就是 bootmem . 1. 什么是bootmem: 我们都知道,所有的物理内存是交给内核管理的,或者说是交给内存管理子系统管理的.那么,从内核启动到内核管理子系统启动之间,是否需要内存呢?答案是肯定的,该时间段内是需要物理内存的. 那么bootmem就是负责该时间段的物理内存的分配. 2. 特…
PFN相关宏说明: /* kernel/include/linux/pfn.h */ PFN : Page Frame Number(物理页帧) /* * PFN_ALIGN:返回地址x所在那一页帧的下一页帧的起始地址. * 例如:PFN_ALIGN(0x00000800) = 0x00001000 : PFN_ALIGN(0x00001800) = 0x00002000; * 理解:假如我们认为一页大小是0x0f,那么当前地址是0x08,如何通过0x08获得0x10呢? 0x08 + (0x1…
前言 Linux内核源码分析之setup_arch (三) 基本上把setup_arch主要的函数都分析了,由于距离上一篇时间比较久了,所以这里重新贴一下大致的流程图,本文主要分析的是bootmem_init函数. 代码分析 bootmem_init函数的结构如下: find_limits通过存储在meminfo中的内存条信息得到低端内存和高端内存的页框编号,分别放入到min.max_low.max_high中. static void __init find_limits(unsigned l…