Ashmem是安卓在linux基础上添加的驱动模块,就是说安卓有linux没有的功能。

  Ashmem模块在内核层面上实现,在运行时库和应用程序框架层提供了访问接口。在运行时库层提供的是C++接口,在应用框架层提供的是java接口。

  

  首先从驱动模块开始分析起,驱动模块加载之后首先进行misc_register来注册一个ashmem_misc设备。这个设备文件就是"/dev/ashmem"。这个设备对用户层提供了四个操作open、mmap、release、ioctl。但是没有read和write操作,这两个操作靠mmap来实现。

    • open():  对应于ashmem_open,实质上是创建一个ashmem_area结构体,返回到文件结构中。这么做的目的是打开ashmem
    • mmap():  对应于ashmem_mmap,功能是在tmpfs中创建临时文件,并且设置文件映射
    • ioctl():       对应ashmem_mmap,通过swtich结构提供不同的设置功能  

  这里有一个例子,就是打开匿名共享内存文件的函数执行流程。

  应用层类:MemoryFile的构造函数——》JNI函数:native_open——》运行库:ashmem_create_region——》Ashmem驱动的接口函数:open、ioctl——》Ashmem驱动的函数:ashmem_open、ashmem_ioctl

  注意这里的驱动接口open是对应驱动中的ashmem_open的,ioctl是对应ashmem_ioctl的。这个我个人感觉有点像Windows驱动的IRP主功能码对应有分发函数一样,不知道这样理解对不对0.0,当然了Windows应用层是是用固定的函数(如WriteFile等,然后由I/O管理器进行操作的),是不能自定义的。

  

【读书笔记】Android的Ashmem机制学习的更多相关文章

  1. 读书笔记--Android Gradle权威指南(下)

    前言 最近看了一本书<Android Gradle 权威指南>,收获挺多,就想着来记录一些读书笔记,方便后续查阅. 本篇内容是基于上一篇:读书笔记--Android Gradle权威指南( ...

  2. 强化学习读书笔记 - 06~07 - 时序差分学习(Temporal-Difference Learning)

    强化学习读书笔记 - 06~07 - 时序差分学习(Temporal-Difference Learning) 学习笔记: Reinforcement Learning: An Introductio ...

  3. 读书笔记--Android Gradle权威指南(上)

    本篇文章已授权微信公众号 dasu_Android(大苏)独家发布 最近看了一本书<Android Gradle 权威指南>,对于 Gradle 理解又更深了,但不想过段时间就又忘光了,所 ...

  4. 《Android源代码设计模式解析》读书笔记——Android中你应该知道的设计模式

    断断续续的,<Android源代码设计模式解析>也看了一遍.书中提到了非常多的设计模式.可是有部分在开发中见到的几率非常小,所以掌握不了也没有太大影响. 我认为这本书的最大价值有两点,一个 ...

  5. Android系统Binder机制学习总结

    一.Binder机制概述 在Android开发中,很多时候我们需要用到进程间通信,所谓进程间通信,实现进程间通信的机制有很多种,比如说socket.pipe等,Android中进程间通信的方式主要有三 ...

  6. Python深度学习读书笔记-1.什么是深度学习

    人工智能 什么是人工智能.机器学习与深度学习(见图1-1)?这三者之间有什么关系?

  7. 读书笔记-Android初学笔记

    Eclipse [ADT] 源 https://dl-ssl.google.com/android/eclipse Notice that no matter what scenario causes ...

  8. 《深入理解 Java 虚拟机》读书笔记:虚拟机类加载机制

    正文 虚拟机把描述类的数据从 Class 文件加载到内存,并对数据进行校验.转换解析和初始化,最终形成可以被虚拟机直接使用的 Java 类型,这就是虚拟机的类加载机制. 一.类加载的时机 1.类的生命 ...

  9. C++ primer plus读书笔记——第2章 开始学习C++

    第2章 开始学习C++ 1. endl确保程序继续运行前刷新输出(将其立即显示在屏幕上),而使用"\n"不提供这样的保证,这意味着在有些系统中,有时可能在您输入信息后才会出现提示. ...

随机推荐

  1. Python之——生产环境代码包发布管理fabirc

    程序生产环境的发布是业务上线最后一个环境,要求具备源码打包.发布.切换.回滚.版本管理等功能,本实例实现了一整套流程,其中版本切换与回滚使用了Linux的软链接来实现.具体代码如下:   # -*- ...

  2. Nginx反向代理websocket配置实例(官网)

    https://www.nginx.com/blog/websocket-nginx/ Blog Tech Rick Nelson of NGINX, Inc.   May 16, 2014   NG ...

  3. SQL复杂语句查询练习

    --复杂查询练习 -- 1 .列出所有员工的年工资,按年薪从低到高排序. SELECT (SAL+NVL(COMM,0))*12 INCOME FROM EMP ORDER BY INCOME; -- ...

  4. Go_13:Go常用功能总结一阶段

    1. go语言从键盘获取输入内容 <1. 最简单的办法是使用 fmt 包提供的 Scan 和 Sscan 开头的函数.请看以下程序: package main import "fmt& ...

  5. java基础-IO流对象之Properties集合

    java基础-IO流对象之Properties集合 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Properties集合的特点 Properties类表示了一个持久的属性集. ...

  6. Shell记录-Shell脚本基础(一)

    Shell 注释: 你可以把注释,在你的脚本如下: #!/bin/bash # Author : Zara Ali # Copyright (c) Tutorialsyiibai.com # Scri ...

  7. bzoj千题计划147:bzoj1207: [HNOI2004]打鼹鼠

    http://www.lydsy.com/JudgeOnline/problem.php?id=1207 dp[i] 表示打的最后一只鼹鼠是第i只,最多能打多少只鼹鼠 输出max(dp[i]) 错解: ...

  8. Spring MVC处理响应的 header

    我们经常需要在HttpResponse中设置一些headers,我们使用Spring MVC框架的时候我们如何给Response设置Header呢? So easy, 看下面的代码: @Request ...

  9. SELECT INTO 和 INSERT INTO SELECT比较

    Insert是T-sql中常用语句,但我们在开发中经常会遇到需要表复制的情况,如将一个table1的数据的部分字段复制到table2中,或者将整个table1复制到table2中,这时候我们就要使用S ...

  10. js生成接口请求参数签名加密

    js生成接口请求参数签名加密 定义规则:将所有参数字段按首字母排序, 拼接成key1 = value1 & key2 = value2的格式,再在末尾拼接上key = appSecret, 再 ...