CMA在计算机上是内存管理子系统中的一个模块,负责物理地址连续的内存分配。
一般系统会在启动过程中,从整个memory中配置一段连续内存用于CMA,然后内核其他的模块可以通过CMA的接口API进行连续内存的分配。CMA的核心并不是设计精巧的算法来管理地址连续的内存块,实际上它的底层还是依赖内核伙伴系统这样的内存管理机制,或者说CMA是处于需要连续内存块的其他内核模块(例如DMA mapping framework)和内存管理模块之间的一个中间层模块。其主要功能包括:
1、解析DTS或者命令行中的参数,确定CMA内存的区域,这样的区域我们定义为CMA area。
2、提供cma_alloc和cma_release两个接口函数用于分配和释放CMA pages3、记录和跟踪CMA area中各个pages的状态4、调用伙伴系统接口,进行真正的内存分配。