当前位置: 首页 > news >正文

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驱动做了哪些操作,有时间再做分析

2 基础数据结构

3 初始化处理

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

5 实现内存映射

6 实现 r/w 操作

7 实现 pin/unpin

8 回收内存块

http://www.lryc.cn/news/91279.html

相关文章:

  • Redis 事务详细介绍
  • 2023-5-29第二十九天
  • 【第三方库】PHP实现创建PDF文件和编辑PDF文件
  • 线程的回收及内存演示
  • 高精度倾角传感器测量原理
  • Android 12 init流程分析
  • 【Python小技巧】Python操控Chrome浏览器实现网页打开、切换、关闭(送独家Chrome操作打包类源码、Chrome浏览器Cookie在哪里?)
  • 数据在内存中的存储
  • Rust in Action笔记 第三章 复合数据类型
  • 算法基础学习笔记——⑬高斯消元\组合计数\容斥原理
  • 渗透测试辅助工具箱
  • chatgpt赋能python:Python后退命令:如何让你的程序退回到之前的状态
  • OJ练习第127题——统计范围内的元音字符串数
  • 图片优化: CssSprites与Base64编码
  • JavaScript中的Map、WeakMap和Object的区别
  • 华为OD机试之打印机队列(Java源码)
  • 分享一个国内免费的ChatGPT网站,手机电脑通用,免费无限制,支持AI绘画
  • 【面向对象编程1】——类和对象——如桃花来
  • chat聊天系统消息消费时遇到的问题及优化思路(二)
  • js正则中的match()
  • Apache 配置和应用
  • 实现PyTorch/ONNX自定义节点操作的TensorRT部署
  • Shamir 秘密共享、GMW和BGW方案
  • Day56【动态规划】583.两个字符串的删除操作、72.编辑距离
  • Arnold图像置乱的MATLAB实现
  • ASP.NET Core
  • javascript基础二十二:举例说明你对尾递归的理解,有哪些应用场景
  • hive中如何计算字符串中表达式
  • 如何将maven项目改为springboot项目?
  • Java与查找算法(5):哈希查找