Android系统的Ashmem匿名共享内存系统分析(1)- Ashmem驱动

news/2024/11/16 22:47:14/

声明

  • 其实对于Android系统的Ashmem匿名共享内存系统早就有分析的想法,记得2019年6、7月份Mr.Deng离职期间约定一起对其进行研究的,但因为我个人问题没能实施这个计划,留下些许遗憾…
  • 文中参考了很多书籍及博客内容,可能涉及的比较多先不具体列出来了;
  • 本文使用的代码是LineageOS的cm-14.1,对应Android 7.1.2,可以参考我的另一篇博客:cm-14.1 Android系统启动过程分析(1)-如何下载Nexus5的LineageOS14.1(cm-14.1)系统源码并编译、刷机

1 概述

  Android系统中提供了独特的匿名共享内存子系统Ashmem (Anonymous Shared Memory),它以驱动程序的形式实现在内核空间中。Ashmem有如下两个特点:

  • 能够辅助内存管理系统来有效地管理不再使用的内存块。
  • 通过 Binder进程间通信机制来实现进程间的内存共享。

  对于 Android 系统的匿名共享内存子系统来说,其主体是以驱动程序的形式实现在内核空间的,同时,在系统 Native 层提供了 C/C++ 调用接口和 Framework 层提供了 Java 调用接口。其实对于 Android 系统中的应用程序框架层的 Java 调用接口来说,是通过 JNI 方法来调用 Native 层的 C/C++ 调用接口,最后需要进入到内核空间的 Ashmem 驱动程序中去。
  Android 系统中的匿名共享内存 Ashmem 驱动程序,利用 Linux 的共享内存子系统导出的接口来实现自己的功能。在 Android 系统匿名共享内存系统中,其核心功能是实现创建 (open)、映射(mmap)、读写(read/write)以及锁定和解锁(pin/unpin)。在学习Ashmem之前建议复习下Linux中的内存映射、共享内存相关知识。

  作为Android Native层+Framework层开发者而言,对内核的研究就不深入了,这里详细可参考《深入解析Android 虚拟机》的第5章,而且对于驱动这种底层代码很少改动,很多Android系统相关书籍对这部分的分析也都大同小异。在我这篇中先列出标题,通过这些标题也大致知道Ashmem驱动做了哪些操作,有时间再做分析

2 基础数据结构

3 初始化处理

4 打开匿名共享内存设备文件

5 实现内存映射

6 实现 r/w 操作

7 实现 pin/unpin

8 回收内存块


http://www.ppmy.cn/news/230488.html

相关文章

中国高校鄙视链指南...

某一天,中国各大高校齐聚一堂,开了一场“拒绝高校鄙视链座谈会”,誓要消除高校之间的不平等,不让莘莘学子因为母校问题而被人低看一眼,遗憾终生。 首先主持人介绍清华北大发言: 清华大学谦虚地道&#xff1…

通过分析词性进行人名、地名、组织的替换,生成新的狗屁不通文章

使用百度百科“秦灭六国”融合三国的章节: 秦在发动攻威风凛凛之前,即依刘胜、袁术之谋,以间谍挑拨活动,挑起德公两国之间的战争,待毕恭毕敬战起,南阳即借口援赫赫抗孙坚,开始对孙坚进攻。毕恭毕…

win10巨帧数据包在哪里设置_西城区附近索尼电脑维修哪里好-北京信维佳业科技有限公司...

西城区附近索尼电脑维修哪里好 [xwjywxkj] 解决方法在主板BIOS中设置固态硬盘为启动项,而机械设置为第二启动项。由于每个品牌的主板BOIS不同,不过设置方法大同小异,列举三个主板品牌,比较常见的华硕、技嘉、微星主板。华硕主板设…

黑五剁手纪实 — ITX装机录

我的上一任主力设备GE62-490已达三年的高龄,纵使宝刀未老,但也因我饱受松鼠症困扰而早早就将其存储空间挥霍一空,加之自己的新方向简直就是在显卡上跳舞,那原先的GTX960M可真的是力不从心了。于是乎,在寂寞的闲暇时间里…

魏武帝 太祖知不可匡正,遂不复献言

短句 最近读到几句关于曹操的短句: 是后政教日乱,豪猾益炽,多所摧毁;太祖知不可匡正,遂不复献言。 以为强豪所忿,恐致家祸,故以病还。 诸君北面,我自西向。 《裴注三国志魏书武帝纪…

[宋史学习] 潘美功过

网络上也有为潘美翻案的声音。 问题是:潘美是不是评书里面那个奸臣潘仁美? 评书中的潘仁美害死了杨业。 现实中的潘美对于杨业之死应该担负什么责任? 观点1:是从犯 陈振老师认为是嫉妒杨业,属于从犯。书摘录。 然…

【历史上的今天】5 月 7 日:索尼诞生;Bungie 成立;数据排序结构先驱出生

整理 | 王启隆 透过「历史上的今天」,从过去看未来,从现在亦可以改变未来。 今天是 2022 年 5 月 7 日,在 2016 年的今天,一名叫 Joshua Brown 的司机成为世界上第一个在驾驶特斯拉 Model S 时死于自动驾驶车祸的人。在明亮的天空…

非凸联合创始人李佐凡:将量化作为自己的终身事业

“喜欢数学,热爱编程,逻辑清晰”,这是李佐凡留给我的最初印象。12年前,李佐凡凭借着一股“初生牛犊不怕虎”的勇气进入量化投资,面对华尔街这群聪明的人,丝毫没有显露出胆怯和慌张。华尔街固有万千魅力&…