Binder介绍

1.1  Android系统使用的一些IPC机制

信号机制(进程管理)

Socket通信(调试)

DBUS(蓝牙)

共享内存(匿名共享内存Ashmem

Binder

1.2  Binder由来

Binder是一个分布式的组件架构,它类似于COMCORBA。最初用于构建传统的操作系统BeOS的系统级消息传递机制的,在BeOS退出历史舞台之后,又被Palm收购用于Palm OS

有一个openBinder的开源项目 :

http://www.angryredplanet.com/~hackbod/openbinder/docs/html/index.html (C++实现)

1.3  Binder的特点

1Binder是一种同步的通信方式。

2传输的数据都是采用函数参数的形式进行的

3)高性能,使用ioctl来进行通信,会绕开文件系统缓冲,达到实时交互的目的

4)安全,以进程为单位进行通信,进程运行时的uid/gid也会在Binder通信时被用于权限判断

1.4  Android Binder

Android Binder 使用了Binder的原理,但因为协议以及OpenBinder的设计过于复杂的缘故,没有使用openBinder的代码,而是自己去重新实现了更轻量的版本。openBinder使用(MPL),Android使用Apache2.0协议。

Android选择Binder的原因:

(1)binder的特点

(2)Binder对硬件要求很低,这正好符合android的实际情况

(3)Binder经历过产品化的考验(Palm OS Cobalt),并且对多个操作系统平台都可以提供支持

(4)Binder的作者(Dianne Hackborn)跳槽去了google,并且参与到了android的开发

1.5 原理简单介绍

Binder构建于Linux内核里的一个叫binder的驱动之上,系统里所有涉及Binder通信的部分,都通过与/dev/binder的设备驱动交互来得到信息互通的功能。而binder本身只是一种借用内存作后端的伪驱动,并不对应到硬件,而只是作用于一段内存区域。

Android系统Binder机制中的四个组件ClientServerService ManagerBinder驱动程序的关系图

    (1ClientServerService Manager实现在用户空间中,Binder驱动程序实现在内核空间中

    (2Binder驱动程序和Service ManagerAndroid平台中已经实现,开发者只需要在用户空间实现自己的ClientServer

    (3Binder驱动程序提供设备文件/dev/binder与用户空间交互,ClientServerService Manager通过openioctl文件操作函数与Binder驱动程序进行通信

    (4 ClientServer之间的进程间通信通过Binder驱动程序间接实现

    (5Sevice ManagerBinder机制的守护进程,用来管理各种Server,并向Client提供查询远程接口的功能。它本身也是一个Server,但是一个特殊的Server,其ID号固定为0

     Service Manager开启的时候会完成:打开Binder设备、告诉Binder自己是守护进程、进入一个无穷循环,充当一个Server,等待Client的请求。(代码位于:frameworks\base\cmds\servicemanager

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值