Binder进程间通信(一)---- 总览

    Android的底层基于linux相信这是所有android开发人员都了解的,但是android得进程间通信机制可以说是外来户,罗老师介绍的很详细,这里我整理一下:

  1. 提供服务的进程称为Server进程,而访问服务的进程称为Client进程
  2. 同一个Server进程可以同时运行多个组件来向Client进程提供服务,这些组件称为Service组件
  3. 同时,同一个Client进程也可以同时向多个Service组件请求服务,每一个请求都对应有一个Client组件,或者称为Service代理对象。
  4. Server进程和Client进程都维护一个Binder线程池来处理进程间的通信请求,已实现并发地提供和访问服务。
  5. Server进程和Client进程的通信要依靠运行在内核空间的Binder驱动程序来进行。Binder驱动程序向用户空间暴露了一个设备文件/dev/binder,使得应用程序进程可以间接地通过它来建立通信通道。
  6. Service组件在启动时,会将自己注册到一个Service Manager组件中,以便Client组件可以通过Service Manager组件找到它。因此,我们将Service Manager组件称为Binder进程间通信机制的上下文管理者,同时由于它也需要与普通的Server进程和Client进程通信,我们也将它看作是一个Service组件,只不过它是一个特殊的Service组件。
  7. Client、Service和Service Manager运行在用户空间,而Binder驱动程序运行在内核空间,其中,Service Manager和Binder驱动程序由系统负责提供,而Client和Service组件由应用程序来实现。Client、Service和Service Manager均是通过系统调用open、mmap和ioctl来访问设备文件/dev/binder,从而实现与Binder驱动程序的交互,而交互的目的就是为了能够间接地执行进程间通信。

    用一张图来说明一下

Binder驱动程序实现在内核空间中,注意驱动程序是放在kernel中的,而不是放在android源代码中的。我并没有下载源码,而是在http://androidxref.com/上看到源码,用的是kernel3.18源代码,搜索一下就能找到binder.h 和 binder.c文件。他就是一个比较标准的驱动程序,设备文件就是 /dev/binder ,但是没有提供hal层的代码。

 

转载于:https://my.oschina.net/zzxzzg/blog/1553380

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值