上传了网站程序后,兵团公共资源交易中心,给网站app做后台的公司,常州小程序开发报价帧缓存实际上就是一块内存。在 Android 系统中分配与回收帧缓存#xff0c;使用的是一个叫 ION 的内核模块#xff0c;App 使用 ioctl 系统调用后#xff0c;会在内核内存中分配一块符合要求的内存#xff0c;用户态会拿到一个 fd#xff08;有的地方也称之为 handle…帧缓存实际上就是一块内存。在 Android 系统中分配与回收帧缓存使用的是一个叫 ION 的内核模块App 使用 ioctl 系统调用后会在内核内存中分配一块符合要求的内存用户态会拿到一个 fd有的地方也称之为 handle然后接着调用 mmap 就能把内核内存映射到用户态内存中接着返回对应的用户态内存地址给 App。 我们知道一个普通的 fd比如某个文件对应的 fd如果把它从 A 进程传递到 B 进程在 B 进程中这个 fd 的值是没有意义的索引不到对应的文件的。
ION 应该是在驱动中动了手脚ION 分配的内存对应的 fd 可以从 A 进程传递到 B 进程且在 B 进程中能够索引到内存也就是也可以将 fd 传入 mmap 中获取到内存地址。
为什么需要这个 fd 可跨进程传递 的特性呢因为在 Android 中显示一帧画面需要涉及到多个进程比如 App 进程、 Gralloc Hal 进程、HwComposer Hal 进程、SurfaceFlinger 进程如果在不同的进程之间直接传递 buffer开销过大我们直接在不同进程之间传递 buffer 的索引 fd 即可fd 是一个整型变量大大减小了内存的开支。
在 Android 中ION 被封装在了 Gralloc HAL 中这是一个 AIDL HALNative App 可以直接访问这个 HAL。 Gralloc Hal 进一步去访问 ION 模块分配回收内存ION 分配的是内核内存.