【Linux 内核 内存管理】memblock 分配器编程接口 ⑤ ( memblock_free 函数 | memblock_remove_range 函数 )
文章目录
- 一、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 函数 )相关推荐
- 【Linux 内核 内存管理】mmap 系统调用源码分析 ④ ( do_mmap 函数执行流程 | do_mmap 函数源码 )
文章目录 一.do_mmap 函数执行流程 二.do_mmap 函数源码 调用 mmap 系统调用 , 先检查 " 偏移 " 是否是 " 内存页大小 " 的 & ...
- Linux内核内存管理(1):内存块 - memblock
Linux内核内存管理 内存块 - memblock rtoax 2021年3月 在英文原文基础上,针对中文译文增加5.10.13内核源码相关内容. 1. 简介 内存管理是操作系统内核中最复杂的部分之 ...
- 【Linux 内核 内存管理】分区伙伴分配器 ② ( free_area 空闲区域结构体源码 | 分配标志位 | GFP_ZONE_TABLE 标志位区域类型映射表 |分配标志位对应的内存区域类型 )
文章目录 一.free_area 空闲区域结构体源码分析 二.分配标志位 三.GFP_ZONE_TABLE 标志位区域类型映射表 四.分配标志位对应的内存区域类型 一.free_area 空闲区域结构 ...
- linux 内核内存管理
物理内存 相关数据结构 page(页) Linux 内核内存管理的实现以 page 数据结构为核心,其他的内存管理设施都基于 page 数据结构,如 VMA 管理.缺页中断.RMAP.页面分配与回收等 ...
- 【Linux 内核 内存管理】内存管理架构 ② ( 用户空间内存管理 | malloc | ptmalloc | 内核空间内存管理 | sys_brk | sys_mmap | sys_munmap)
文章目录 一.用户空间内存管理 ( malloc / free / ptmalloc / jemalloc / tcmalloc ) 二.内核空间内存管理 1.内核内存管理系统调用 ( sys_brk ...
- 【Linux 内核 内存管理】内存管理架构 ④ ( 内存分配系统调用过程 | 用户层 malloc free | 系统调用层 brk mmap | 内核层 kmalloc | 内存管理流程 )
文章目录 一.内存分配系统调用过程 ( 用户层 | 系统调用 | 内核层 ) 二.内存管理流程 一.内存分配系统调用过程 ( 用户层 | 系统调用 | 内核层 ) " 堆内存 " ...
- Linux内核内存管理(3):kmemcheck介绍
Linux内核内存管理 kmemcheck介绍 rtoax 2021年3月 在英文原文基础上,针对中文译文增加5.10.13内核源码相关内容. 5.10.13不存在kmemcheck的概念,取代的是k ...
- Linux内核内存管理(2):固定映射地址(fixmap)和输入输出重映射(ioremap)
Linux内核内存管理 固定映射地址(fixmap)和输入输出重映射(ioremap) rtoax 2021年3月 在英文原文基础上,针对中文译文增加5.10.13内核源码相关内容. Print ke ...
- 【Linux 内核 内存管理】物理分配页 ⑦ ( __alloc_pages_slowpath 慢速路径调用函数源码分析 | 判断页阶数 | 读取 mems_allowed | 分配标志位转换 )
文章目录 一.__alloc_pages_slowpath 慢速路径调用函数 二.判断页阶数 三.读取进程 mems_allowed 成员 四.分配标志位转换 五.__alloc_pages_slow ...
最新文章
- Silverlight 预定义颜色速查表
- Python 多进程开发与多线程开发
- HTML、HTML5、XML、XHMTL区别
- 【...】小程序扩展运算符 ... 说明
- 第一学期计算机网络作业,2010-2011学年第一学期计算机网络(33973)试卷
- 人工智能 21 个子领域高被引学者Top 3
- (11)FPGA面试题同步复位与异步复位
- MTKI 驱动(57)---音频参数含义
- 定时器精度对性能的影响_Comet CAA-500天线分析仪 | 高精度模拟十字针同时显示SWR和阻抗...
- jQuery右键菜单ContextMenu使用笔记
- linux查询语言,Linux结构化查询语言SQL——SQL的分类和DDL使用
- bp神经网络训练流程图,bp神经网络训练样本
- git基于某个分支新建分支
- 上海不行 java 地址识别 省、市、区,包括直辖市
- echarts+高德地图设置卫星图层
- [CSP-J 2019] 加工零件题解
- 盘点5月份GitHub上最热门的开源项目
- vue watch store
- RAD Studio 11.X Alexandria release有何新的改变及改变实务
- 基于java的雷电游戏
热门文章
- 手游网红之亲民的双机位手机游戏直播方案
- 编译原理实验一: Cygwin环境的熟悉和lex的使用
- 前端 JavaScript 原型和原型链
- 16G内存的iPhone手机能扩容?是真的 暴力拆机失质保! 值得吗?
- Vue directive 自定义指令
- python 视频剪辑_视频剪辑太麻烦?用Python带你高效创作短视频
- 生成licence文件
- ctf xss利用_TCTF/0CTF2018 XSS Writeup
- Android实战简易教程-第五十一枪(ListView实现子控件的动态显示和隐藏、checkbox全选和反选)
- javaScript 合并对象的多种方式