¿Alguien puede explicar por qué se creó ashmem?¿Qué poderes especiales tiene ashmem?
Estoy navegando por mm/ashmem.c
ahora mismo. Por lo que puedo decir, el kernel está pensando en ashmem como memoria respaldada por archivos que puede ser mapeada. Pero entonces, ¿por qué tomarse la molestia de implementar ashmem? Parece que se puede lograr la misma funcionalidad montando una RAM fs y luego usando filemap/mmap para compartir memoria.
Estoy seguro de que ashmem puede hacer cosas más sofisticadas: al mirar el código, parece tener algo que ver con fijar/desanclar páginas.
Pero ashmem requiere compartir a través de los descriptores de archivos. Crear un archivo de respaldo y permitir que cada proceso lo mmap compartido alcanzaría el mismo objetivo, ¿no? Veo que esto es mejor que shmem, pero ¿cómo es mejor que tener un archivo de respaldo? –
Es mejor porque, bueno, crear un archivo cuando lo que realmente quieres es un trozo de memoria compartida es una especie de ruta tortuosa. (Tener que usar un descriptor de archivo sigue siendo raro, pero menos hacky que tener un archivo allí. Los descriptores de archivos ya se generalizan a diferentes tipos de recursos, por ejemplo, sockets y dispositivos.) – Kaz
Ese trabajo de fijación y desenredo parece permitirle implementar caché memoria en su aplicación que desaparecerá cuando se necesite memoria, de manera similar a los almacenamientos intermedios del kernel. La API le permite saber si la memoria se ha purgado (¿todavía tiene su caché o no). – Kaz