Какими особыми способностями обладает ашмем? - PullRequest
25 голосов
/ 02 апреля 2012

Может кто-нибудь объяснить, почему был создан ашмем?

Я сейчас просматриваю mm/ashmem.c.Насколько я могу судить, ядро ​​думает, что ashmem - это файловая память, которую можно использовать в mmap.Но тогда зачем идти на реализацию ашмэма?Похоже, что ту же функциональность можно было бы получить, смонтировав fs RAM, а затем используя filemap / mmap для совместного использования памяти.

Я уверен, что ashmem может делать более причудливые вещи - от просмотра кода доКажется, что-то связано с закреплением / откреплением страниц?

Ответы [ 2 ]

24 голосов
/ 02 апреля 2012

Ashmem позволяет процессам, которые не связаны по происхождению, совместно использовать карты памяти по имени, которые очищаются автоматически.

Обычные старые анонимные карты и разделяемая память System V не имеют некоторых из этих требований.

Сегменты разделяемой памяти System V остаются в стороне, когда на них больше не ссылаются запущенные программы (что иногда является функцией, иногда неприятностью).

Анонимные общие mmaps могут передаваться от родительских к дочерним процессам, что является негибким, поскольку иногда требуется, чтобы процессы, не связанные таким образом, разделяли память.

6 голосов
/ 07 июля 2013

Может кто-нибудь объяснить, почему был создан ashmem?

Дэвид Тернер (постоянный пользователь на Android NDK) ответил на это в Почему был bionic / libc / include / sys / shm.h удалено? :

... IPC System V были удалены для кекса.Подробнее см. Bionic / libc / docs / SYSV-IPC.TXT.

Вкратце, IPC System V имеют утечку и не очень хорошо работают в среде выполнения Android, где уничтожение процессов, чтобы освободить место для другихпросто нормально и очень часто.Конечным результатом является то, что любой код, основанный на этих IPC, может в конечном итоге заполнить внутреннюю таблицу ядра ключей SysV IPC, что может быть безопасно разрешено только перезагрузкой.

Мы хотим предоставить альтернативный механизм вбудущее, у которого нет таких же проблем.Одна вещь, которую мы предоставляем на данный момент, это ashmem, которая была разработана специально для Android, чтобы избежать подобных проблем (хотя она не так хорошо документирована, как должна).Возможно, нам нужно что-то подобное для семафоров и / или очередей сообщений.

...