前言:
还是习惯性的以前言开篇,“深入骨髓”的程序猿思想,干啥事都想从main 开始~~
在Android 项目中接触内存管理相关的有一段时间了,中间看了很多代码,看了忘,忘了看,反反复复,索性就抽点时间整理出来~~
该专栏会尽可能的清晰、完整地总结内存管理相关的知识点,因为时间有限,不可能一次性总结出来,但一定是持续、长期地的完善各个模块和细节。
以付费的形式出现,大致体现在如下几点:
一,专栏覆盖了内存管理的大部分的内容,是一个很全面的完整知识体系的专栏;
二,笔者长期坚持结合代码实际总结知识点,会深入模块细节、流程细节去分析;
三,整个知识点脉络中会将复杂的逻辑过程以流程图、框架图形式同步呈现,方便深入理解;
笔者会长期地坚持总结下去,后期也会根据不同的Linux 版本进行比较分析、补充,敬请期待!!
1. 内存管理的一些预备知识
- 管理机制简述
- 页面查询过程简述
- 内存与内存分布
- 内存架构和内存模型简述
2. 物理内存初始化流程
- memblock 发展过程概述
- memblock初始化
- fixmap 详解
- paging_init
- 内存模型SPARSEMEM初始化
- zone简介以及初始化
- 备选区域初始化
3. buddy 分配器
- buddy 系统简介和初始化
- buddy 系统分配器前篇
- buddy 系统分配器之快速分配(1)
- buddy 系统分配器之快速分配(2)
- buddy 系统分配器之快速分配(3)
- buddy 系统分配器之慢速分配
- buddy 系统分配器之页面释放
- CMA 分配器详解
4. slab 分配器
- slab 分配器概述
- slub 分配器初始化
- slub 分配器之__kmem_cache_create
- slub 分配器之kmem_cache_alloc
- slub 分配器之kmem_cache_create
- slub 分配器之kmem_cache_free
- slub 分配器之kmem_cache_destroy
-
slub 分配器之kmalloc详解
5. 缺页异常处理
- page 概念和数据结构;
- page 相关的函数使用;
6. 页面回收
- LRU简介
- LRU 第二次机会法
- 页面回收简介和 kswapd详解(1)
- kswapd详解(2)
- shrink_node 详解
- shrink_list 详解(1)
- shrink_list 详解(2)
- 直接内存回收详解
- 页面回收总结
7. 内存规整
- 内存规整简介
- kcompactd详解
- 直接内存规整详解
8. 基础概念
- vmstat;
- meminfo;
- zoneinfo;
- buddyinfo;
- pagetypeinfo;
- slabinfo;
- overcommit;
- min_free_kbytes;
- lowmem_reserve_ratio;
- dirty_background_bytes和dirty_background_ratio;
9. 其他
- PSI;
- PageAnon 与 PageSwapBacked
- 内核OOM机制详解
- vmalloc 详解
- ION 详解
- 高速缓存管理;
- MESI 协议;
- ARM 处理器设计;
- 内存中可能出现的 BUG 或 panic
博文中的专业术语:
- VIVT:Virtual Index Virtual Tag,虚拟索引虚拟标签
- VIPT:Virtual Index Physical Tag,虚拟索引物理标签
- PIPT:Physical Index Physical Tag,物理索引物理标签
- TLB:Translation Look-aside Buffer,转换旁视缓存,转换旁路缓存
- TTW:Translation Table Walk,转换表遍历
- TWU:Table Walk Unit,页表遍历单元
- MMU:Memory Management Unit,内存管理单元
- EPN:Effective Page Number,有效页帧号
- RPN:Real Page Number,实际页帧号
- PFN:Page frame Number,页帧号
- VA:Virtual Address,虚拟地址
- PA:Physical Address,物理地址
- SMP:Symmetric Multiple Processing,对称多处理器
- UMA:Uniform Memory Access,统一内存访问
- NUMA:Non-Uniform Memory Access,非统一内存访问
参考:
Linux 内存管理总续