Android 匿名共享記憶體初始化篇(三)

2021-09-11 22:06:08 字數 1199 閱讀 8585

ashmem初始化流程從ashmem.c的__ashmem_init方法開始,**如下:

835 static int __init ashmem_init(void)

836

846

847 ashmem_range_cachep = kmem_cache_create("ashmem_range_cache",

848 sizeof(struct ashmem_range),

849 0, 0, null);

850 if (unlikely(!ashmem_range_cachep))

854

855 ret = misc_register(&ashmem_misc);

856 if (unlikely(ret))

860

861 register_shrinker(&ashmem_shrinker);

862

863 pr_info("initialized\n");

864

865 return 0;

866 }

第839行和第847行使用函式kmem_cache_create建立了兩個slab緩衝分配器,ashmem_area_cachep和ashmem_range_cachep,前者用來分配ashmem_area結構體,後者用來分配ashmem_range結構體,第855行註冊裝置型別為misc,ashmem_misc裝置結構體定義為:

829 static struct miscdevice ashmem_misc = ;
根據該結構體定義可知ashmem對應的裝置檔案為:/dev/ashmem,該結構體定義了fops欄位,具體內容為ashmem_fops如下:

816 static const struct file_operations ashmem_fops = ;
根據字段可以看出該結構體定義了對ashmem的開啟、釋放、讀取、對映、seek等操作。

繼續看__ashmem_init函式的第861行,呼叫register_shrinker函式向記憶體管理系統註冊了乙個記憶體**函式ashmem_shrinker,當系統記憶體不足的時候就會呼叫該函式釋放記憶體。

Android匿名共享記憶體

ashmem的使用流程如下 1.ashmem create region建立匿名共享記憶體區域,本質是呼叫open系統呼叫 2.ioctl設定共享記憶體的名字和大小,設定的名字為 dev ashmem 名字的存在就為了能夠讓其他人找到目標 3.mmap對映檔案中的虛擬記憶體以及物理記憶體 4.直接對...

Android匿名共享記憶體

android匿名共享記憶體可用於跨程序通訊中。參考 006 匿名共享記憶體 ashmem 的使用 android 匿名共享記憶體驅動原始碼分析 android 重學系列 ashmem匿名共享記憶體 fresco記憶體機制 ashmem匿名共享記憶體 android匿名共享 ashmem 記憶體使用...

Android 共享記憶體(ashmem)持續更新

android 共享記憶體 ashmem 前言專案中接入訊飛語音合成,在sdk中看到 memoryfile,了解下用法發現,看到的只是冰山一角。官方介紹 sharedmemory啟用對匿名共享記憶體的建立,對映和保護控制。簡單用法 將data陣列內容寫入到sd卡上。memoryfile memfil...