在Linux中,为了避免一个进程对其他进程的干扰,进程之间是相互独立的。在一个进程中其实还分为用户空间和内核空间。这里的隔离分为两个部分,进程间的隔离和进程内的隔离。
既然进程间存在隔离,那其实也是存在着交互。进程间通信就是 IPC,用户空间和内核空间的通信就是系统调用。
Linux 为了保证独立性和安全性,进程之间不能直接相互访问,Android 是基于 Linux 的,所以也是需要解决进程间通信的问题。
其实 Linux 进程间通信有很多方式,比如管道、socket 等等。为什么 Android 进程间通信采用了Binder而不是 Linux
已有的方式,主要是有这么两点考虑:性能和安全
性能: 在移动设备上对性能要求是比较严苛的。Linux传统的进程间通信比如管道、socket等等进程间通信是需要复制两次数据,而Binder则只需要一次。所以Binder在性能上是优于传统进程通信的。
安全: 传统的 Linux 进程通信是不包含通信双方的身份验证的,这样会导致一些安全性问题。而Binder机制自带身份验证,从而有效的提高了安全性。
Binder 是基于 CS 架构的,有四个主要组成部分。
Client: 客户端进程。
Server: 服务端进程。
ServiceManager: 提供注册、查询和返回代理服务对象的功能。
Binder 驱动: 主要负责建立进程间的 Binder 连接,进程间的数据交互等等底层操作。
Binder 机制主要的流程是这样的:
1.服务端通过Binder驱动在 ServiceManager 中注册我们的服务。
2.客户端通过Binder驱动查询在 ServiceManager 中注册的服务。
3.ServiceManager 通过Binder 驱动返回服务端的代理对象。
4.客户端拿到服务端的代理对象后即可进行进程间通信。
网友评论