博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Binder进程间通信(一)---- 总览
阅读量:6117 次
发布时间:2019-06-21

本文共 1068 字,大约阅读时间需要 3 分钟。

hot3.png

    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源代码中的。我并没有下载源码,而是在上看到源码,用的是kernel3.18源代码,搜索一下就能找到binder.h 和 binder.c文件。他就是一个比较标准的驱动程序,设备文件就是 /dev/binder ,但是没有提供hal层的代码。

 

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

你可能感兴趣的文章
centos 7添加快捷键
查看>>
Codeforces 86D Powerful array (莫队)
查看>>
mysql 索引总结
查看>>
F5负载均衡虚拟服务器配置FTP端口访问不了
查看>>
时间复杂度和空间复杂度3 - 数据结构和算法05
查看>>
分享两款好玩的单机游戏^_^
查看>>
UsbManager, UsbDevice的简单示例
查看>>
面试题 14:调整数组顺序使奇数位于偶数前面
查看>>
asp.net core教程 (一)
查看>>
如何用docker部署redis cluster
查看>>
java核心技术面试整理
查看>>
MVC的学习步骤
查看>>
史上最全的Linux常用命令
查看>>
iOS - OC NSLocale 本地化信息
查看>>
在 Swift 中调用 OC 代码
查看>>
SQL DML 数据操纵语句
查看>>
多线程编程中的线程同步问题
查看>>
简单的四则运算网页版
查看>>
UITableView汇总
查看>>
ACM-ICPC 2018 南京赛区网络预赛 G Lpl and Energy-saving Lamps(模拟+线段树)
查看>>