背景
Read the fucking source code!
--By 鲁迅A picture is worth a thousand words.
--By 高尔基
说明:
- Kernel版本:4.14
- ARM64处理器,Contex-A53,双核
- 使用工具:Source Insight 3.5, Visio
1. 概述
在之前的系列文章中,分析到了Buddy System
的页框分配,Slub分配器
的小块内存对象分配,这些分配的地址都是物理内存连续的。当内存碎片后,连续物理内存的分配就会变得困难,可以使用vmap
机制,将不连续的物理内存页框映射到连续的虚拟地址空间中。vmalloc
的分配就是基于这个机制来实现的。
还记得下边这张图吗?
vmap/vmalloc
的区域就是在VMALLOC_START ~ VMALLOC_END
之间。
开启探索之旅吧。
2. 数据结构
2.1 vmap_area/vm_struct
这两个数据结构比较简单,直接上代码:
struct vm_struct {