Binder是什么?

章嘉致
2023-12-01

Binder是什么?

从IPC角度来说

定义:Binder是Android中的一种跨进程通信方式,该通信方式在linux中没有,是Android独有

作用:在Android中实现跨进程通信

从Android Driver层

定义:Binder还可以理解为一种虚拟的物理设备,它的设备驱动是/dev/binder

备注:驱动层位于Linux内核中,它提供了最底层的数据传递,对象标识,线程管理,调用过程控制等功能。驱动层是整个Binder机制的核心

从Android Native层

定义:Binder是创建Service Manager以及BpBinder/BBinder模型,搭建与binder驱动的桥梁

从Android Framework层

定义:Binder是各种Manager(ActivityManager、WindowManager等)和相应xxxManagerService的桥梁

从Android APP层

定义:Binder是客户端和服务端进行通信的媒介,当bindService的时候,服务端会返回一个包含了服务端业务调用的 Binder对象,通过这个Binder对象,客户端就可以获取服务端提供的服务或者数据,这里的服务包括普通服务和基于AIDL的服务

Binder驱动

binder_init() 

主要是驱动设备的初始化

binder_open()

打开binder驱动设备

binder_mmap()

首先在内核虚拟地址空间,申请一块与用户虚拟内存相同大小的内存;然后再申请1个page大小的物理内存,再将同一块物理内存分别映射到内核虚拟地址空间和用户虚拟内存空间,从而实现了用户空间的Buffer和内核空间的Buffer同步操作的功能。

binder_ioctl()

数据操作

Binder在进程间数据通信的流程

当Client端与Server端发送数据时,Client(作为数据发送端)先从自己的进程空间把IPC通信数据copy_from_user拷贝到内核空间,而Server端(作为数据接收端)与内核共享数据,不再需要拷贝数据,而是通过内存地址空间的偏移量,即可获悉内存地址,整个过程只发生一次内存拷贝

 

 类似资料: