目录
- Linux内核背景
- Binder通信模型
- Binder通信原理
- AIDL
- 总结
1. Linux内核背景
进程隔离/虚拟地址空间:
- 操作系统通过分配不同的虚拟地址空间对进程进行隔离(A进程的数据不能写到B进程)
- 即每个进程独占一块内存空间,数据不共享,A进程中的对象引用是无法为B进程获得和使用的
用户空间/内核空间/系统调用:
- 内核最重要的就是管理硬件资源,只有内核空间中的进程才有访问受保护的内存空间和底层硬件设备的权限(如文件、网络)
- 用户空间中的进程要访问内核资源,只能通过系统调用,将操作交给内核来执行
Binder驱动:
- 既然用户空间的进程是相互隔离的(内存空间互相独立),同时又都可以通过系统调用使用内核资源,那么就可以通过在内核中引入一块“"共享内存"实现通信了,该内存由Binder驱动管理
- Binder驱动作为一个内核模块,管理一块内存,运行在内核空间,并提供进程间通信的功能
2. Binder通信模型
四个角色:
- Client:客户端进程
- Server:服务端进程
- ServiceManager:服务进程
- Binder驱动:内核模块
类比方式:
- 以通电话类比,Cilent 和 Server 分别为通信双方,SM 为通讯录,Binder驱动为基站
- 以计算机网络类比,Client 为浏览器,Server 为服务器,SM 为 DNS,Binder驱动为路由器
通信步骤:
- Server 向 SM 注册,并表明它可以提供的 Service
- Client 在需要某些功能时向 SM 发出请求,SM 通过查询找到相应 Server,此时通过 Binder 驱动在 Client 与 Server 之间建立连接
3. Binder通信原理
- 由于进程隔离,Client 是无法直接调用 Server 端 Binder 对象提供的方法的,当 Client 向 SM 查询,Binder驱动返回的是一个代理对象 BinderProxy
- BinderProxy 唯一的作用就是包装参数(序列化),然后交给Binder驱动,驱动调用真正的 Binder 实现后再将结果返回(反序列化)
4. AIDL
参考:AIDL用法与分析
5. 总结
- Binder背景:进程隔离,系统调用
- Binder概念:Binder驱动,Binder类
- Binder通信模型:CS模式
- Binder通信原理:代理模式
- Binder实现:AIDL