0%

kmalloc

kmalloc__get_free_pages

kmalloc

kmalloc 可以申请的内存上限由头文件 linxu/kmalloc_sizes.h 来定义

一般情况下上限为 128k,如果打开宏 KMALLOC_MAX_SIZE 可以申请更大的内存

kmalloc 申请的内存位于物理内存映射范围,而且在物理上是连续的,它们与真实的物理地址只有一个固定的偏移,因此存在简单的转换关系,对申请的内存大小有限制

常用的 flags

  • GFP_ATOMIC 分配内存的过程是一个原子过程,分配内存的过程不会被(高优先级进程或中断)打断
  • GFP_KERNEL 正常分配内存
  • GFP_DMA 给 DMA 控制器分配内存,需要使用该标志(DMA 要求分配虚拟地址和物理地址连续)

flags 参考用法:

|– 进程上下文,可以睡眠     GFP_KERNEL
|– 进程上下文,不可以睡眠    GFP_ATOMIC
|  |– 中断处理程序       GFP_ATOMIC
|  |– 软中断          GFP_ATOMIC
|  |– Tasklet         GFP_ATOMIC
|– 用于 DMA 的内存,可以睡眠   GFP_DMA | GFP_KERNEL
|– 用于 DMA 的内存,不可以睡眠  GFP_DMA |GFP_ATOMIC

__get_free_pages

__get_free_pages