ashmem有什么特殊的力量?

时间:2012-04-02 04:20:35

标签: android linux shared-memory

有人可以解释为什么要创建ashmem吗?

我正在浏览mm/ashmem.c。就像我所知,内核正在考虑将ashmem作为文件支持的内存,可以是mmap'd。但是,为什么要去实施ashmem呢?似乎可以通过安装RAM fs然后使用filemap / mmap共享内存来实现相同的功能。

我确信ashmem可以做更多花哨的东西 - 从查看代码,它似乎与固定/取消固定页面有关?

2 个答案:

答案 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设计,以避免这种问题   (虽然它没有记录得那么好)。我们可能需要   类似于信号量和/或消息队列的东西。