
Android系统的Ashmem匿名共享内存系统分析
文章平均质量分 91
本专栏分析Android系统的Ashmem匿名共享内存系统
小馬佩德罗
业精于勤荒于嬉,行成于思毁于随
展开
-
Android系统的Ashmem匿名共享内存子系统分析(1)- Ashmem驱动
Android系统中提供了独特的匿名共享内存子系统Ashmem (Anonymous Shared Memory),它以驱动程序的形式实现在内核空间中。能够辅助内存管理系统来有效地管理不再使用的内存块。通过 Binder进程间通信机制来实现进程间的内存共享。对于 Android 系统的匿名共享内存子系统来说,其主体是以驱动程序的形式实现在内核空间的,同时,在系统 Native 层提供了 C/C++ 调用接口和 Framework 层提供了 Java 调用接口。原创 2023-06-05 22:54:10 · 659 阅读 · 0 评论 -
Android系统的Ashmem匿名共享内存子系统分析(2)- 运行时库cutils的Ashmem访问接口
如果是,那么第15行就将它的 PROT_EXEC 位也设置为1,因为当一个进程的 personality 属性的 READ_IMPLIES_EXEC 位被设置为1时,就表示当它有权限读一块内存时,也隐含着它对该内存有执行权限。此后,应用程序只能删除它的访问保护位,而不能增加它的访问保护位。调用函数 open 打开设备文件 /dev/ashmem 时,Ashmem 驱动程序的函数 ashmem_open 就会被调用主要是为应用程序创建一个 ashmem_area 结构体,用来描述一块匿名共享内存。原创 2023-06-07 09:09:53 · 669 阅读 · 0 评论 -
Android系统的Ashmem匿名共享内存子系统分析(3)- Ashmem子系统的 C/C++访问接口
通过引用信息中的 Server 端的 MemoryHeapBase 对象的引用 heap,可以在 Client 端进程中创建一个 BpMemoryHeap 远程接口,最后将这个 BpMemoryHeap 远程接口保存在成员变量 mHeap 中,同时从 Server 端获得的信息还包括这块匿名共享内存在整个匿名共享内存中的偏移位置以及大小。类 IMemory 的具体实现在源码 frameworks/native/libs/binder/IMemory.cpp 中定义。原创 2023-06-06 22:45:00 · 964 阅读 · 0 评论 -
Android系统的Ashmem匿名共享内存子系统分析(4)- Ashmem子系统的 Java访问接口
Binder 进程间通信机制使用一个类型为 BINDER_TYPE_FD 的 Binder 对象来描述一个文件描述符,当 Binder 驱动程序发现进程间通信数据中包含有这种 Binder 对象时,就会将对应的文件描述符复制到目标进程中,从而实现在两个进程中共享同一个文件。成员函数 readBytes 用于读取某一块匿名共享内存的内容,成员函数 writeBytes 用于写入某一块匿名共享内存的内容,成员函数 isDeactivated 用于保证匿名共享内存已经被映射到进程的地址空间中。原创 2023-06-06 23:15:00 · 472 阅读 · 0 评论 -
Android系统的Ashmem匿名共享内存子系统分析(5)- 实现共享的原理
Client 组件从 Binder 驱动程序中获得了 flat_binder_object 结构体之后,首先将它封装成一个 ParcelFileDescriptor 对象,然后再将它转换成一个 FileDescriptor 对象,最后就可以使用这个 FileDescriptor 对象来创建一个 MemoryFile 对象,即将 MemoryService 服务内部的匿名共享内存映射到 Client 组件所在的进程的地址空间,从而达到了在不同的进程中共享同一块匿名共享内存的目的。在Linux内核中,原创 2023-06-06 19:50:46 · 794 阅读 · 0 评论