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