首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Linux 内核 内存管理】memblock 分配器 ② ( memblock_type 内存块类型 | memblock_type 结构体成员分析 )

    文章目录 一、memblock_type 内存块类型 二、memblock_type 结构体成员分析 1、cnt 成员 2、max 成员 3、total_size 成员 4、regions 成员 5、...name 成员 一、memblock_type 内存块类型 ---- memblock 分配器 涉及到 内存块 类型 , 在 Linux 内核中 , 使用 struct memblock_type 结构体...描述 , struct memblock_type 结构体 定义在 Linux 内核源码的 linux-4.12\include\linux\memblock.h#40 位置 ; struct memblock_type...*regions; char *name; }; 源码路径 : linux-4.12\include\linux\memblock.h#40 二、memblock_type 结构体成员分析 ---...- memblock_type 结构体成员分析 : 1、cnt 成员 cnt 成员 表示 当前 管理的 " 内存区域 " 个数 ; unsigned long cnt; /* number of regions

    30420

    Linux 内核 内存管理】memblock 分配器编程接口 ⑤ ( memblock_free 函数 | memblock_remove_range 函数 )

    文章目录 一、memblock_free 函数分析 二、memblock_remove_range 函数分析 memblock 分配器提供了如下编程接口 : ① 添加内存 : memblock_add...: memblock_alloc 函数 , 申请分配内存 ; ④ 释放内存 : memblock_free 函数 , 释放之前分配的内存 ; 在之前的博客中介绍了 memblock_add memblock_remove...memblock_alloc 函数源码 , 本篇博客开始介绍 memblock_free 分配内存函数 ; 一、memblock_free 函数分析 ---- memblock_free 函数 的作用是..., 最后调用了 memblock_remove_range 函数 , 继续向后执行 ; memblock_free 函数 定义在 Linux 内核源码的 linux-4.12\mm\memblock.c...); } 源码路径 : linux-4.12\mm\memblock.c#710 二、memblock_remove_range 函数分析 ---- 参考 【Linux 内核 内存管理】memblock

    28940

    Linux 内核 内存管理】memblock 分配器编程接口 ① ( memblock 分配器编程接口简介 | memblock_add 函数原型分析 | memblock_add 函数源码 )

    文章目录 一、memblock 分配器编程接口 二、memblock_add 函数原型分析 三、memblock_add 函数源码 一、memblock 分配器编程接口 ---- memblock 分配器提供了如下编程接口...: ① 添加内存 : memblock_add 函数 , 将 内存块区域 添加到 memblock.memory 成员中 , 即 插入一块可用的物理内存 ; ② 删除内存 : memblock_remove...函数原型分析 ---- memblock_add 函数 , 将 内存块区域 添加到 memblock.memory 成员中 , 即 插入一块可用的物理内存 ; memblock_add 函数原型如下...三、memblock_add 函数源码 ---- memblock_add 函数 定义在 Linux 内核源码的 linux-4.12\mm\memblock.c#603 位置 ; int __init_memblock...&memblock.memory, base, size, MAX_NUMNODES, 0); } 源码路径 : linux-4.12\mm\memblock.c#603

    33310

    Linux 内核 内存管理】memblock 分配器 ③ ( memblock_region 内存块区域 | memblock_region 结构体成员分析 | memblock 分配器标志位 )

    ---- memblock 分配器 中 , 内存块区域 使用 struct memblock_region 结构体进行描述 , 该结构体定义在 Linux 内核源码的 linux-4.12\include...\linux\memblock.h#31 位置 /* Definition of memblock flags. */ enum { MEMBLOCK_NONE = 0x0, /* No special...}; 源码路径 : linux-4.12\include\linux\memblock.h#31 二、memblock_region 结构体成员分析 ---- 1、base 成员 base 成员 表示...nid; #endif 三、memblock 分配器标志枚举 ---- memblock 分配器标志是一个枚举类型 , 该 枚举 定义在 Linux 内核源码的 linux-4.12\include\linux...MEMBLOCK_MIRROR 表示 " 镜像区域 " ; Linux 内核将 内存中的数据 , 进行了复制备份 , 分别存放在 " 主内存 " 和 " 镜像内存 " 中 ; MEMBLOCK_MIRROR

    35520

    Linux 内核 内存管理】memblock 分配器 ⑤ ( Linux 内核中定义 memblock 分配器的位置 | ARM64体系架构下 Linux内核初始化 memblock 分配器流程 )

    文章目录 一、Linux 内核中定义 memblock 分配器的位置 二、ARM64 体系架构下 Linux 内核初始化 memblock 分配器流程 三、arm64_memblock_init 函数完整源码...一、Linux 内核中定义 memblock 分配器的位置 ---- Linux 内核 定义 memblock 分配器 位置 : Linux 内核源码 linux-4.12\mm\memblock.c..., }; 源码路径 : linux-4.12\mm\memblock.c#34 二、ARM64 体系架构下 Linux 内核初始化 memblock 分配器流程 ---- 先在 linux-4.12\...; ARM64 体系架构下 Linux 内核初始化 memblock 分配器流程 : ① 解析 " 设备树二进制文件 " /memory 节点 , 将 " 所有物理内存 " 纳入到 memblock...with memblock. */ memblock_reserve(__pa_symbol(_text), _end - _text); 源码路径 : linux-4.12\arch\arm64

    92810

    Linux 内核 内存管理】memblock 分配器 ① ( memblock 分配器简介 | memblock 结构体成员分析 | 物理内存类型 与 内存类型 )

    文章目录 一、memblock 分配器 二、memblock 结构体分析 1、bottom_up 成员 2、current_limit 成员 3、memory 成员 4、reserved 成员 5、physmem...成员 三、物理内存类型 与 内存类型 ARM64 架构体系中 , 不能使用 bootmem 引导内存分配器 , 使用的是 memblock 分配器 ; 一、memblock 分配器 ---- memblock...分配器 定义在 Linux 内核源码的 linux-4.12\include\linux\memblock.h#48 位置 ; struct memblock { bool bottom_up;...*/ phys_addr_t current_limit; struct memblock_type memory; struct memblock_type reserved; #ifdef CONFIG_HAVE_MEMBLOCK_PHYS_MAP...struct memblock_type physmem; #endif }; 源码路径 : linux-4.12\include\linux\memblock.h#48 二、memblock 结构体分析

    84630

    Linux-3.14.12内存管理笔记【系统启动阶段的memblock算法(2)】

    memory:表示可用可分配的内存; 结束完memblock算法初始化前的准备工作,回到memblock算法初始化及其算法实现上面。memblock是一个很简单的算法。...其结构体定义: 【file:/include/linux/memblock.h】 struct memblock { bool bottom_up; /* is bottom up direction...往下看看memory和reserved的结构体memblock_type定义: 【file:/include/linux/memblock.h】 struct memblock_type { unsigned...total_size则表示当前状态(memory/reserved)的空间大小(也就是可用的内存块信息大小总和),而regions则是用于保存内存块信息的结构(包括基址、大小和标记等): 【file:/include/linux...[INIT_MEMBLOCK_REGIONS] __initdata_memblock; struct memblock memblock __initdata_memblock = { .memory.regions

    1.1K20

    引导内存分配器

    linux内存三大分配器:引导内存分配器,伙伴分配器,slab分配器 一、引导内存分配器 1.引导内存分配器的作用因为内核里面有很多内存结构体,不可能在静态编译阶段就静态初始化所有的这些内存结构体。...2.引导内存分配器的原理在Linux内核中使用struct bootmem_data来描述一个引导内存分配,其节点结构下的一个成员,也就是说每一个节点都有一个引导内存分配。...linux内核可以通过宏定义选择nobootmem 或者bootmem 来在伙伴起来之前管理内存。...这两种机制对提供的API是一致的,因此对用户是透明的 5.bootmem小分析bootmem结构体位于文件include/linux/bootmem.h: typedef struct bootmem_data...结构解析memblock结构体位于include/linux/memblock.h文件: struct memblock { bool bottom_up;//表示内存分配方式,真:从低地址向上分配,

    83411

    Linux-3.14.12内存管理笔记【构建内存管理框架(1)】

    由于NUMA存储结构的引入,这就需要相应的管理机制来支持, linux 2.4版本就已经开始对其支持了。...于是当前分析的3.14.12版本,linux的物理内存管理机制将物理内存划分为三个层次来管理,依次是:Node(存储节点)、Zone(管理区)和Page(页面)。 ?...linux内核的设计就是腾出32个页全局目录项,256的1/8。那么32个页全局目录项对应多大的内存空间?算一下可以知道是128M,也就是说直接映射的内存空间是896M。...memblock_set_node的实现: 【file:/mm/memblock.c】 /** * memblock_set_node - set node ID on memblock regions...这里sparse memory涉及到linux的一个内存模型概念。linux内核有三种内存模型:Flat memory、Discontiguous memory和Sparse memory。

    86420

    Linux内存初始化(下)

    我们接着看linux初始化内存的下半部分,等内存初始化后就可以进入真正的内存管理了,初始化我总结了一下,大体分为三步: 物理内存进系统前 用memblock模块来对内存进行管理 页表映射 zone初始化...map_mem(pgd):将memblock子系统添加的物理内存进行映射(将物理地址映射到线性区域) 主要是完成通过memblock_add添加到系统中的物理内存映射,注意如果memblock设置了MEMBLOCK_NOMAP...(); } 这个函数基本上完成了linux对物理内存“划分”的初始化,包括node, zone, page frame,以及对应的数据结构。...「Linux是如何组织物理内存的?」...最后 至此linux对物理内存的初始化和虚拟地址和物理地址的映射关系算是告一段落,相信你已经知道 linux 虚拟寻址空间layout的来龙去脉,以及如何把物理内存通过node, zone, page

    3.1K31

    一文掌握 Linux 内存管理

    Linux 内存管理是一个很复杂的“工程”,它不仅仅是对物理内存的管理,也涉及到虚拟内存管理、内存交换和内存回收等 物理内存的探测 Linux 内核通过 detect_memory()函数实现对物理内存的探测...在段描述符表准备完成之后会通过汇编跳转到保护模式 事实上,在上面这个过程中,linux 并没有明显地去区分每个段,所以这里并没有很好地起到保护作用,linux 最终使用的还是内存分页管理(开启页式映射可以参考.../arch/x86/kernel/head_32.S) memblock 算法 memblocklinux 内核初始化阶段使用的一个内存分配器,实现较为简单,负责页分配器初始化之前的内存管理和分配请求...到这里,可以大致知道linux 虚拟内存的构造: linux 内存分页 linux 内核主要是通过内存分页来管理内存的,这里先介绍两个重要的变量:max_pfn 和 max_low_pfn。...Middle Directory) 页表(Page Table) 对于没有启动 PAE(物理地址扩展)的 32 位系统,Linux 虽然也采用四级分页模型,但本质上只用到了两级分页,Linux 通过将

    2.1K31
    领券