文章目录

  • 一、memblock_free 函数分析
  • 二、memblock_remove_range 函数分析

memblock 分配器提供了如下编程接口 :

① 添加内存 : memblock_add 函数 , 将 内存块区域 添加到 memblock.memory 成员中 , 即 插入一块可用的物理内存 ;

② 删除内存 : memblock_remove 函数 , 删除 内存块区域 ;

③ 分配内存 : memblock_alloc 函数 , 申请分配内存 ;

④ 释放内存 : memblock_free 函数 , 释放之前分配的内存 ;

在之前的博客中介绍了 memblock_add memblock_remove memblock_alloc 函数源码 , 本篇博客开始介绍 memblock_free 分配内存函数 ;

一、memblock_free 函数分析


memblock_free 函数 的作用是 释放内存 , 从 " 预留内存区域 " 中, 删除一块 内存块 ;

memblock_free 函数参数说明 :

  • phys_addr_t base 参数 表示 要删除的内存区域的 起始地址 ;
  • phys_addr_t size 参数 表示 要删除的内存区域的 大小 ;

memblock_free 函数中 ,

调用 kmemleak_free_part_phys 函数 , 计算 要删除的 物理内存区域 的 终止地址 ,

最后调用了 memblock_remove_range 函数 , 继续向后执行 ;

memblock_free 函数 定义在 Linux 内核源码的 linux-4.12\mm\memblock.c#710 位置 ;

int __init_memblock memblock_free(phys_addr_t base, phys_addr_t size)
{phys_addr_t end = base + size - 1;memblock_dbg("   memblock_free: [%pa-%pa] %pF\n",&base, &end, (void *)_RET_IP_);kmemleak_free_part_phys(base, size);return memblock_remove_range(&memblock.reserved, base, size);
}

源码路径 : linux-4.12\mm\memblock.c#710

二、memblock_remove_range 函数分析


参考 【Linux 内核 内存管理】memblock 分配器编程接口 ③ ( memblock_remove 函数 | memblock_remove_range 函数 ) 二、memblock_remove_range 函数分析 博客章节 , 在该博客章节中 , 详细地分析了该函数的执行流程 , 源码 ;

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

  1. 【Linux 内核 内存管理】mmap 系统调用源码分析 ④ ( do_mmap 函数执行流程 | do_mmap 函数源码 )

    文章目录 一.do_mmap 函数执行流程 二.do_mmap 函数源码 调用 mmap 系统调用 , 先检查 " 偏移 " 是否是 " 内存页大小 " 的 & ...

  2. Linux内核内存管理(1):内存块 - memblock

    Linux内核内存管理 内存块 - memblock rtoax 2021年3月 在英文原文基础上,针对中文译文增加5.10.13内核源码相关内容. 1. 简介 内存管理是操作系统内核中最复杂的部分之 ...

  3. 【Linux 内核 内存管理】分区伙伴分配器 ② ( free_area 空闲区域结构体源码 | 分配标志位 | GFP_ZONE_TABLE 标志位区域类型映射表 |分配标志位对应的内存区域类型 )

    文章目录 一.free_area 空闲区域结构体源码分析 二.分配标志位 三.GFP_ZONE_TABLE 标志位区域类型映射表 四.分配标志位对应的内存区域类型 一.free_area 空闲区域结构 ...

  4. linux 内核内存管理

    物理内存 相关数据结构 page(页) Linux 内核内存管理的实现以 page 数据结构为核心,其他的内存管理设施都基于 page 数据结构,如 VMA 管理.缺页中断.RMAP.页面分配与回收等 ...

  5. 【Linux 内核 内存管理】内存管理架构 ② ( 用户空间内存管理 | malloc | ptmalloc | 内核空间内存管理 | sys_brk | sys_mmap | sys_munmap)

    文章目录 一.用户空间内存管理 ( malloc / free / ptmalloc / jemalloc / tcmalloc ) 二.内核空间内存管理 1.内核内存管理系统调用 ( sys_brk ...

  6. 【Linux 内核 内存管理】内存管理架构 ④ ( 内存分配系统调用过程 | 用户层 malloc free | 系统调用层 brk mmap | 内核层 kmalloc | 内存管理流程 )

    文章目录 一.内存分配系统调用过程 ( 用户层 | 系统调用 | 内核层 ) 二.内存管理流程 一.内存分配系统调用过程 ( 用户层 | 系统调用 | 内核层 ) " 堆内存 " ...

  7. Linux内核内存管理(3):kmemcheck介绍

    Linux内核内存管理 kmemcheck介绍 rtoax 2021年3月 在英文原文基础上,针对中文译文增加5.10.13内核源码相关内容. 5.10.13不存在kmemcheck的概念,取代的是k ...

  8. Linux内核内存管理(2):固定映射地址(fixmap)和输入输出重映射(ioremap)

    Linux内核内存管理 固定映射地址(fixmap)和输入输出重映射(ioremap) rtoax 2021年3月 在英文原文基础上,针对中文译文增加5.10.13内核源码相关内容. Print ke ...

  9. 【Linux 内核 内存管理】物理分配页 ⑦ ( __alloc_pages_slowpath 慢速路径调用函数源码分析 | 判断页阶数 | 读取 mems_allowed | 分配标志位转换 )

    文章目录 一.__alloc_pages_slowpath 慢速路径调用函数 二.判断页阶数 三.读取进程 mems_allowed 成员 四.分配标志位转换 五.__alloc_pages_slow ...

最新文章

  1. Silverlight 预定义颜色速查表
  2. Python 多进程开发与多线程开发
  3. HTML、HTML5、XML、XHMTL区别
  4. 【...】小程序扩展运算符 ... 说明
  5. 第一学期计算机网络作业,2010-2011学年第一学期计算机网络(33973)试卷
  6. 人工智能 21 个子领域高被引学者Top 3
  7. (11)FPGA面试题同步复位与异步复位
  8. MTKI 驱动(57)---音频参数含义
  9. 定时器精度对性能的影响_Comet CAA-500天线分析仪 | 高精度模拟十字针同时显示SWR和阻抗...
  10. jQuery右键菜单ContextMenu使用笔记
  11. linux查询语言,Linux结构化查询语言SQL——SQL的分类和DDL使用
  12. bp神经网络训练流程图,bp神经网络训练样本
  13. git基于某个分支新建分支
  14. 上海不行 java 地址识别 省、市、区,包括直辖市
  15. echarts+高德地图设置卫星图层
  16. [CSP-J 2019] 加工零件题解
  17. 盘点5月份GitHub上最热门的开源项目
  18. vue watch store
  19. RAD Studio 11.X Alexandria release有何新的改变及改变实务
  20. 基于java的雷电游戏

热门文章

  1. 手游网红之亲民的双机位手机游戏直播方案
  2. 编译原理实验一: Cygwin环境的熟悉和lex的使用
  3. 前端 JavaScript 原型和原型链
  4. 16G内存的iPhone手机能扩容?是真的 暴力拆机失质保! 值得吗?
  5. Vue directive 自定义指令
  6. python 视频剪辑_视频剪辑太麻烦?用Python带你高效创作短视频
  7. 生成licence文件
  8. ctf xss利用_TCTF/0CTF2018 XSS Writeup
  9. Android实战简易教程-第五十一枪(ListView实现子控件的动态显示和隐藏、checkbox全选和反选)
  10. javaScript 合并对象的多种方式