Linux内存管理(六十四):ION 内存管理器——system heap
源码基于:Linux 5.4
约定:
- 芯片架构:ARM64
- 内存架构:UMA
- CONFIG_ARM64_VA_BITS:39
- CONFIG_ARM64_PAGE_SHIFT:12
- CONFIG_PGTABLE_LEVELS :3
0. 前言
ION 是 Google 在 Android 4.0 中引入,目的主要是通过在硬件设备和用户空间之间分配和共享内存,实现设备之间零拷贝共享内存,多用于多媒体,比如 camera、display、graphic等。ION是一个内存管理器,管理不同type的内存堆(heap),而不同的type的内存又通过不同的内存分配器来分配,比如cma、kmalloc、vmalloc等。
通过《ION 总篇》一文得知用户层会通过 ioctl() 与ION 驱动通信,请求ION 从特定 heap 中分配buffer 用以共享使用。内核会根据用户传入特定的 heap id 匹配对应的heap。
本文中剖析的是 system heap 的初始化和分配流程。