有人可以解释为什么要创建ashmem吗?
我正在浏览mm/ashmem.c
。就像我所知,内核正在考虑将ashmem作为文件支持的内存,可以是mmap'd。但是,为什么要去实施ashmem呢?似乎可以通过安装RAM fs然后使用filemap / mmap共享内存来实现相同的功能。
我确信ashmem可以做更多花哨的东西 - 从查看代码,它似乎与固定/取消固定页面有关?
答案 0 :(得分:23)
Ashmem允许与祖先无关的进程按名称共享内存映射,并自动清理。
普通的旧匿名mmaps和System V共享内存缺少这些要求。
当运行程序不再引用时,系统V共享内存段会一直存在(有时候这是一个功能,有时候是一种麻烦)。
匿名共享mmaps可以从父进程传递到子进程,这是不灵活的,因为有时您希望与该方式不相关的进程共享内存。
答案 1 :(得分:6)
有人可以解释为什么要创建ashmem吗?
David Turner(Android NDK的常规代表)在Why was bionic/libc/include/sys/shm.h removed?中回答了这个问题:
...系统V IPC已被移除用于蛋糕。看到 bionic / libc / docs / SYSV-IPC.TXT了解详情。
简而言之,System V IPC在设计上是漏洞而且不能很好地发挥作用 Android的运行时环境,为杀死进程腾出空间 其他的只是正常而且很常见。最终的结果是任何 依赖于这些IPC的代码最终可能会填满内核 SysV IPC密钥的内部表,只能安全地使用 通过重新启动解决。
我们希望在未来提供没有的替代机制 同样的问题。我们现在提供的一件事就是ashmem 是专为Android设计,以避免这种问题 (虽然它没有记录得那么好)。我们可能需要 类似于信号量和/或消息队列的东西。