linux ion 源码详解

参考:android内存管理之ion - 知乎 (zhihu.com)

ion简介

ion是一个内存管理框架,产生于安卓内核,后面linux合近内核中。主要用于多媒体,gpu等需要连续大片物理内存的场景。

ion主要用途

1.内核模块之间通信。

2.内核到用户空间之间内存共享。

3.用户空间到内核之间内存共享。

4.用户空间不同进程内存共享。

ion框架图

自底向上详解

  1. 操作系统将内存堆分为很多块,而ion常用的有这四种。也就是他可以使用这四种类型的堆内存。使用时调用的是该内存堆类型的分配,释放,等操作函数。不受限于kmalloc或者vmalloc这种。前提需要注册ion_heap_ops。
  2. ion 核心即是ion 框架也是ion device。全局只有一个,通过访问该设备进行资源分配,操作等。
  3. ion driver根据dts创建ion heaps ,ion device,并创建一些用于debug的节点
  4. 不同的进程通过访问ion device分配客户端,一个进程只有一个client。

不同内存堆都有什么区别

  1. ION_HEAP_TYPE_SYSTEM:使用vmalloc分配的,物理内存不连续,虚拟地址连续。
  2. ION_HEAP_TYPE_SYSTEM_CONTIG:使用kmalloc分配,物理地址连续。
  3. ION_HEAP_TYPE_CARVEOUT:从预留的堆中分配连续物理内存。
  4. ION_HEAP_TYPE_CHUNK:分配的是固定大小的内存,按2^n * 4K(页面大小)对齐。
  5. ION_HEAP_TYPE_DMA:通过DMA API操作。
  6. ION_HEAP_TYPE_CMA_RESERVED:通过 CMA(Contiguous Memory Allocator)分配内存。

重要的数据结构

  • ion_device设备驱动数据结构,ion是基于(也可以说是继承)misc(杂项设备)的,所以正常情况是挂载到 /dev 目录下。
    • ion_device 管理了所有的client ,ion_heap,buffer,ion_share_handle(因为他不属于某个client)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值