![](https://img-blog.csdnimg.cn/20190918140145169.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
07-内存管理
文章平均质量分 88
kernel 内存管理介绍
frank_zyp
一切皆有可能
展开
-
内存管理一 prorank的使用及解释
一、procrank的生成及使用: linux内存的调试有很多命令和节点,如vmstat命令、/proc/meminfo、prorank命令、 /proc/vmallocinfo/sys/kernel/debug/ion/ion_mm_heap、slabtrace等,下面详细介绍procrank的命令: procrank是android system/xb...原创 2018-08-25 12:37:36 · 2544 阅读 · 0 评论 -
内存管理十 MTK平台内存RAM大小拆解
一、拆解: 本文以MTK平台2G RAM的设备为例,对RAM进行详细的拆解,对于2G的手机在设置->存储中,会看到总内存的大小为2G,这里的2G也可以通过ADB命令来获取到:(1)获取meminfo: cat /proc/meminfo MemTotal: 1860024 kB (2)获取reserve的内存:cat /proc/mtk_memcfg...原创 2019-01-15 19:53:54 · 3319 阅读 · 0 评论 -
linux内核并发与同步机制
一、临界资源: 临界区是指访问或操作共享资源的代码段,这些资源无法同时被多个执行线程访问,为了避免临界区的并发访问,需要保证临界区的原子性,临界区不能有多个并发源同时执行,原子性保护的是资源和数据,包括静态局部变量、全局变量、共享的数据结构、Buffer缓存等各种资源数据,产生并发访问的并发源主要有如下:中断和异常:中断发生后,中断执行程序和被中断的进程之间可能产生并发访问; ...原创 2018-11-16 10:39:22 · 1136 阅读 · 0 评论 -
内存管理九 linux内存页面回收
一、概序: 内核中的页面可以分为两类,一类是使用完毕便无保存的价值,所以立即便可释放、回收,这种页面的周转很简单:空闲 -> (分配)-> 使用 -> (释放)-> 空闲,例如通过kmalloc/vmalloc/alloc_page()分配的内存。另外一类是使用完毕了,其内容仍有保存的价值,只要条件允许,把这些页面“养起来”可以提供后面的工作效率,这些页面...原创 2018-10-31 14:42:30 · 1530 阅读 · 0 评论 -
内存管理八 内存分配接口总结
一、简介: 内存分配的接口有很多,不同的申请函数有不同的功能,下面会做详细的介绍和对比。kmalloc:基于slab分配器,用于分配小内存,物理空间连续的内存块; vmalloc:用于分配大内存,虚拟地址连续的内存; malloc:为用户空间分配进程地址空间(即分配一块VMA); mmap:用户空间分配内存、读写大文件和加载静态库等; 可以用下图清晰的表明:二、详细...原创 2018-10-26 14:20:43 · 1180 阅读 · 0 评论 -
内存管理六 伙伴系统管理内存
首先要做的就是找到指定的分配管理区,管理区的编号保存在high_zoneidx中然后就是尝试第一次分配,流程是从指定的管理区开始扫描管理区-->找到充足的管理区-->从指定的迁移类型链表中分配内存-->如果在指定迁移类型中找不到则到其他的迁移类型中去寻找如果第二步在各个区域都找不到可以满足分配的内存了,那么说明管理区的内存已经确实不够了,于是开始启用一条慢速的途径来分配,包括尝试去换出一些不经常使用的页等等,内核会在这原创 2018-09-30 16:32:36 · 1428 阅读 · 1 评论 -
内存管理五 物理内存初始化
一、概序: linux内存管理包含内存初始化、页表映射过程、内核内存布局图、伙伴系统、SLAB分配器、vmalloc、malloc、mmap缺页中断等内容。按层分可以分为用户空间、内核空间和硬件层,下面的图可以详细的说明: ...原创 2018-09-28 14:21:24 · 1050 阅读 · 0 评论 -
内存管理七 SLUB分配器管理内存
一、概序 linux内存管理的基础是:伙伴系统(buddy system),但伙伴系统是以页为单位(4kB)管理和分配内存。现实的需求是以字节为单位,这样基于Buddy系统分配最小的一个page会严重的浪费内存。slab分配器就是为了解决此问题而出现,专为小内存分配而生。slab分配器分配内存以Byte为单位。但是slab分配器是基于伙伴系统分配的大内存进一步细分成小内存分配,是...原创 2018-10-16 15:58:11 · 650 阅读 · 2 评论 -
内存管理三 内核内存检测KASAN
一、简介: Kasan 是 Kernel Address Sanitizer 的缩写,它是一个动态检测内存错误的工具,主要功能是检查内存越界访问和使用已释放的内存等问题。KASAN可以检测的内存异常包括:slab-out-of-bounds/user-after-free/stack-out-of-bounds/global-out-of-bounds等。(1)环境要求:...原创 2018-09-07 16:25:26 · 11791 阅读 · 3 评论 -
内存管理四 内存泄漏检测kmemleak
一、简介: Kmemleak工作于内核态,Kmemleak 提供了一种可选的内核泄漏检测,其方法类似于跟踪内存收集器。当独立的对象没有被释放时,其报告记录在 /sys/kernel/debug/kmemleak中,Kmemcheck能够帮助定位大多数内存错误的上下文。二、使用方法:(1)打开方法: 在kernel的defconfig的文件中,使能如下宏控 CO...原创 2018-09-10 15:20:50 · 2553 阅读 · 0 评论 -
内存管理二 proc/meminfo 文件详解
一、meminfo中参数的解释:cat /proc/meminfoMemTotal: 1859640 kB //可用的总内存MemFree: 69836 kB //完全未用到的物理内存 LowFree+HighFreeMemAvailable: ...原创 2018-08-25 13:57:08 · 3672 阅读 · 0 评论 -
内存管理十一 MIGRATE_HIGHATOMIC类型页面
一、内存管理 中migration type中MIGRATE_HIGHATOMIC介绍: 在系统运行一段时间后,会出现大量内存碎片,会导致高阶页块(high-order page)的分配失败。为了避免,减轻这种情况,创建了MIGRATE_HIGHATOMIC类型的页面。在此后的分配中,只有当相同的高阶,并拥有高级分配权限时,才会分配这样的页块。当分配单个页框失败时,这样的页块会被...原创 2019-04-15 15:44:54 · 2524 阅读 · 0 评论