ashmem有什么特别的权力?

有人可以解释为什么ashmem创build?

我正在浏览mm/ashmem.c 。 据我所知,内核正在考虑将ashmem作为可以被mmap的文件备份内存。 但是,为什么要去实施ashmem的麻烦呢? 似乎可以通过安装RAM fs然后使用filemap / mmap共享内存来实现相同的function。

我敢肯定,ashmem可以做更多的花哨的东西 – 从看代码,这似乎有什么与固定/取消固定页面?

Solutions Collecting From Web of "ashmem有什么特别的权力?"

Ashmem允许与祖先无关的进程通过名称共享内存映射,并自动清理内存映射。

普通的旧匿名mmap和System V共享内存缺少其中一些要求。

系统V共享内存段不再被运行程序引用(这有时是一个功能,有时是一个滋扰)。

匿名共享的mmaps可以从父进程传递给子进程,这是不灵活的,因为有时候你需要进程没有这种方式来共享内存。

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

David Turner(Android NDK上的常规)回答了这个问题为什么删除了仿生/ libc / include / sys / shm.h? :

…系统V IPC已被删除的蛋糕。 有关详细信息,请参见仿生/ libc / docs / SYSV-IPC.TXT。

简而言之,系统V的IPC是设计上的漏洞,在Android的运行时环境下不能很好地发挥作用,在这种环境下,杀死进程为其他进程腾出空间是正常和非常普遍的。 最终的结果是任何依赖于这些IPC的代码都可能会填满内核的SysV IPC密钥表,这些只能通过重启来安全解决。

我们希望在未来提供不具备相同问题的替代机制。 我们目前提供的一件事是ashmem,它是专门为Android设计的,以避免这种问题(尽管它没有像应该那样记录)。 我们可能需要类似的信号量和/或消息队列。