2012-04-02 12 views
21

Czy ktoś może wyjaśnić, dlaczego powstał asmem?Jakie specjalne moce mają asmem?

Przeglądam teraz: mm/ashmem.c. Z tego co wiem, jądro myśli o asmem jako pamięci wspieranej plikami, która może być mmap'd. Ale dlaczego warto wprowadzić asmem? Wygląda na to, że tę samą funkcjonalność można osiągnąć montując RAM-fs, a następnie używając file/mmap do współdzielenia pamięci.

Jestem pewna, że ​​asmem może robić bardziej fantazyjne rzeczy - patrząc na kod, wydaje się, że ma on coś wspólnego z przypinaniem/odpinaniem stron?

Odpowiedz

19

Ashmem pozwala procesom, które nie są powiązane z przodkami, udostępniać mapy pamięci według nazwy, które są automatycznie czyszczone.

Zwykłe stare anonimowe mmaps i pamięć współdzielona systemu V nie spełniają niektórych z tych wymagań.

Segmenty pamięci wspólnej V systemu pozostają w pobliżu, gdy nie są już przywoływane przez uruchomione programy (co jest czasami funkcją, czasami uciążliwością).

Anonimowe udostępnione mmaps można przekazywać z procesów nadrzędnych do podrzędnych, co jest nieelastyczne, ponieważ czasami potrzebne są procesy niezwiązane w ten sposób z udostępnianiem pamięci.

+3

Ale ashmem wymaga współdzielenia przez deskryptory plików. Stworzenie pliku kopii zapasowej i umożliwienie każdemu procesowi podzielenia go na mmap dokonałoby tego samego celu, nie? Widzę, jak to jest lepsze niż shmem, ale jak to jest lepsze niż posiadanie pliku pomocniczego? –

+1

Jest to lepsze, ponieważ, no cóż, tworzenie pliku, gdy to, czego naprawdę chcemy, to wspólna pamięć, to rodzaj okrężnej, hackowej trasy. (Używanie deskryptora plików jest wciąż hackowskie, ale mniej odstręczające niż posiadanie tam pliku, deskryptory plików już generalizują różne rodzaje zasobów, np. Gniazda i urządzenia.) – Kaz

+0

Ten przypinanie i odpinanie biznesu pozwala ci zaimplementować pamięć podręczną pamięć w aplikacji, która zniknie, gdy pamięć będzie potrzebna, podobnie jak bufory jądra. Interfejs API informuje, czy pamięć została wyczyszczona (czy nadal masz pamięć podręczną lub nie). – Kaz

5

Czy ktoś może wyjaśnić, dlaczego powstał asmem?

David Turner (regularny na Android NDK) odpowiedział ten w Why was bionic/libc/include/sys/shm.h removed?:

... System V IPC zostały usunięte na cupcake. Aby uzyskać szczegółowe informacje, patrz bionic/libc/docs/SYSV-IPC.TXT.

W skrócie System V IPC są nieszczelne z projektem i nie dobrze grać w środowiska wykonawczego Android gdzie zabijanie procesów, aby zrobić miejsce dla innych nich jest po prostu normalne i bardzo częste. Rezultat końcowy jest taki, że każdy kod , który opiera się na tych IPC, może zakończyć się zapełnieniem wewnętrznej tablicy kluczy SysV IPC, coś, co może być bezpiecznie usunięte tylko przez przez ponowne uruchomienie.

Chcemy zapewnić w przyszłości alternatywny mechanizm, który nie będzie miał takich samych problemów w przypadku . Obecnie zapewniamy ashmem, który został specjalnie zaprojektowany dla systemu Android, aby uniknąć tego rodzaju problemów. Prawdopodobnie potrzebujemy czegoś podobnego do semaforów i/lub kolejek wiadomości.

Powiązane problemy