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

这篇具有很好参考价值的文章主要介绍了Android系统的Ashmem匿名共享内存系统分析(1)- Ashmem驱动。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

声明

  • 其实对于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驱动做了哪些操作,有时间再做分析文章来源地址https://www.toymoban.com/news/detail-472458.html

2 基础数据结构

3 初始化处理

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

5 实现内存映射

6 实现 r/w 操作

7 实现 pin/unpin

8 回收内存块

到了这里,关于Android系统的Ashmem匿名共享内存系统分析(1)- Ashmem驱动的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 分布式系统概念和设计——分布式共享内存

    分布式共享内存 分布式共享内存是在不共享物理内存的计算机之间实现数据的共享的一个抽象。 有一个底层运行的系统保证其透明性,但是进程还是根据内存的分布处理物理内存的分布式能力 DMS最关键点: 不需要关心数据的通信,消息传递能力是巨大的底层支持。 生存周

    2024年02月10日
    浏览(53)
  • Android 内存分析(java/native heap内存、虚拟内存、处理器内存 )

    1.jvm 堆内存(dalvik 堆内存) 不同手机中app进程的 jvm 堆内存是不同的,因厂商在出厂设备时会自定义设置其峰值。比如,在Android Studio 创建模拟器时,会设置 jvm heap 默认384m , 如下图所示: 当app 进程中java 层 new 对象(加起来总和)占用的堆内存达到jvm heap 峰值时,就会抛出OOM 。

    2024年02月14日
    浏览(47)
  • android 如何分析应用的内存(六)

    接上文,本系列文章,最重要的部分——————对native堆内存的分析,即将上演 分成六大板块: 手动实现,new和delete,以及malloc和freee,并统计内存分配情况 使用malloc hook 使用Malloc debug和libc回调 使用malloc统计和libmemunreachable 使用HWASan/Asan工具,查找内存错误 使用perfetto工

    2024年02月08日
    浏览(41)
  • Android Profiler 内存分析器使用

    Android Profiler是Android Studio的一部分,提供了一个集成的性能分析工具套件,包括内存分析。Android Profiler 工具可提供实时数据,帮助您了解应用的 CPU、内存、网络和电池资源使用情况。 在Android Profiler中,您可以查看内存使用情况的实时图表、堆转储快照、分析内存泄漏等,

    2024年02月08日
    浏览(49)
  • Android内存泄漏分析及检测工具LeakCanary简介,Android进阶

    @Synchronized override fun expectWeaklyReachable( watchedObject: Any, description: String ) { if (!isEnabled()) { return } removeWeaklyReachableObjects() val key = UUID.randomUUID() .toString() val watchUptimeMillis = clock.uptimeMillis() val reference = KeyedWeakReference(watchedObject, key, description, watchUptimeMillis, queue) SharkLog.d { \\\"Watching \\\" +

    2024年04月25日
    浏览(39)
  • android 如何分析应用的内存(十一)——ASan

    接下来是,heap的第五大板块——ASan(Address Sanitizer)和HWASan(Hardware Address Sanitizer)。可以将其称为:地址清理器 与其说是Heap板块,不如说是debug板块。 ASan是一个集成在编译器中的工具,因此只需要在编译的时候设置好Flag即可。而HWASan则可以认为是ASan的plus版本。HWASan比

    2024年02月13日
    浏览(37)
  • android 如何分析应用的内存(十二)——HWASan

    上一篇介绍了ASan,这次介绍ASan的加强版HWASan 从NDK r21和Android 10 开始,Android支持HWAsan。HWAsan仅仅支持arm64架构的设备。 HWASan需要系统的支持,因此,需要重新编译系统镜像。可以是android模拟器,也可以是真机。 本次实验,选择了Pixel3的真机作为演示。同时使用了android-12.0

    2024年02月15日
    浏览(42)
  • android 如何分析应用的内存(十三)——perfetto

    本篇文章是native内存的最后一篇文章——perfetto 从2018年始,android开发者峰会正式推出perfetto工具。从此perfetto成为安卓最重要的工具之一。在2018年以前,android使用systrace工具,进行同样的工作。 perfetto分成三部分: 第一部分: 录制。这部分将录制不同的数据来源,如:内存,

    2024年02月09日
    浏览(38)
  • Android 内存泄漏、性能分析常用工具

    一、内存泄漏 1、 MAT-eclipse :“Memory Analyzer Tool”,一个基于Eclipse的内存分析工具,是一个快速、功能丰富的JAVA heap分析工具,它可以帮助我们查找内存泄漏和减少内存消耗。 2、Leakcanary :一款开源的自动检测内存泄漏的工具。 3、AndroidStudio Profiler :Android Studio 3.0 采用全新

    2024年02月12日
    浏览(48)
  • android 如何分析应用的内存(十七)——使用MAT查看Android堆

    前一篇文章,介绍了使用Android profiler中的memory profiler来查看Android的堆情况。 如Android 堆中有哪些对象,这些对象的引用情况是什么样子的。 可是我们依然面临一个比较严峻的挑战:不管是app开发者,还是内存分析者而言,堆中的对象,非常之多,不仅有Android 原生的类,还

    2024年02月13日
    浏览(69)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包