Какие особые полномочия имеют ашмем?
Может кто-нибудь объяснить, почему была создана пепельница?
Я просматриваю mm/ashmem.c
прямо сейчас. Насколько я могу судить, ядро думает о ashmem в качестве файловой памяти, которая может быть mmap'd. Но почему, зачем идти наперекор внедрению пепельницы? Похоже, что такая же функциональность может быть достигнута путем установки RAM fs, а затем с помощью filemap/mmap для обмена памятью.
Я уверен, что ashmem может делать больше причудливых вещей - от взгляда на код, похоже, что-то связано с пиннинга/открепления страниц?
Ответы
Ответ 1
Ashmem позволяет обрабатывать процессы, которые не связаны между собой, чтобы совместно использовать карты памяти по имени, которые автоматически очищаются.
Обычные старые анонимные mmaps и системная память V имеют некоторые из этих требований.
Сегменты разделяемой памяти System V придерживаются, когда больше не ссылаются на запуск программ (иногда это функция, иногда это неприятность).
Анонимные общие файлы mmaps могут передаваться от родительского к дочерним процессам, что является негибким, поскольку иногда вы хотите, чтобы процессы не были связаны с этим способом совместного использования памяти.
Ответ 2
Может кто-нибудь объяснить, почему была создана пепельница?
Дэвид Тернер (постоянный на Android NDK) ответил на это в Почему был удален bionic/libc/include/sys/shm.h?:
... Система V IPC была удалена для кекса. Видеть bionic/libc/docs/SYSV-IPC.TXT для деталей.
Вкратце, IPC System V протекают по дизайну и плохо воспроизводятся в Среда выполнения для Android, в которой процессы убийства освобождают место для другие просто нормальные и очень распространенные. Конечным результатом является то, что любой код, который опирается на эти IPC, может привести к заполнению внутренняя таблица ключей IPC SysV, что может только безопасно разрешено перезагрузкой.
Мы хотим предоставить альтернативный механизм в будущем, который не имеет те же проблемы. Одна вещь, которую мы предоставляем на данный момент, - это ashmem, которая был разработан специально для Android, чтобы избежать такой проблемы (хотя это не так хорошо документировано, как должно). Нам, вероятно, нужно что-то похожее для семафоров и/или очередей сообщений.