1.C语言简谈binder

本文介绍了Android中Binder通信机制的基础,从C层分析Binder,包括binder_call关键方法及C实现的Binder测试程序,阐述了IPC和RPC的概念。通过服务端和客户端的逻辑流程,展示了Binder在C层的工作原理。
摘要由CSDN通过智能技术生成

本章关键点总结 & 说明:

上面的导图描述了Binder框架中主要几个部分,同时本章节主要通过Bctest的案例 对Binder原理进行简单说明。

binder系统概述:Binder系统是一种基于IPC的RPC (远程过程调用) 通信机制

android为什么要引入binder通信机制?

  1. Binder使用Client-Server通信方式
  2. 安全性好,简单高效
  3. 面向对象的设计
  4. 独特的接收缓存管理和线程池管理方式

这里从C层的binder进行分析,因为这是android原生系统给出的案例,因此就从这里开始分析。实际上无论从哪里分析,原理都是一样的,从servicemanager启动,到服务端注册服务,再到客户端获取服务,无非是在这里面添加了框架,以及C++和Java层,让我们感觉很多地方云里来雾里去。但实际上Binder就是一个通信机制。本节 抛开框架,简单说下binder的原理。

1 从C测试程序开始Binder系统的学习

首先从Binder系统的C程序开始说起,文件位置在frameworks/native/cmds/servicemanager

1.1 Android Binder系统整体简要框架

这里关注了整体流程,下面是servicemanager运行流程:

//service_manager运行流程,service_manager.c :
a. binder_open
b. binder_become_context_manager
c. binder_loop(bs, svcmgr_handler);
   c.1 res = ioctl(bs->fd, BINDER_WRITE_READ, &bwr);
   c.2 binder_parse
          // 解析
          // 处理  : svcmgr_handler
                       SVC_MGR_GET_SERVICE/SVC_MGR_CHECK_SERVICE : 获取服务
                       SVC_MGR_ADD_SERVICE : 注册服务          
          // 回复      

下面是 服务端 服务注册流程:

//bctest.c,注册服务的过程:
a. binder_open
b. binder_call(bs, &msg, &reply, 0, SVC_MGR_ADD_SERVICE)
                   // 含有服务的名字
                         // 它会含有servicemanager回复的数据 
                                 // 0表示servicemanager
                                    // code: 表示要调用servicemanager中的"addservice函数"

 下面是 客户端获取服务流程:

//获取服务的过程:
a. binder_open
b. binder_call(bs, &msg, &reply, target, SVC_MGR_CHECK_SERVICE)
                   // 含有服务的名字
                         // 它会含有servicemanager回复的数据, 表示提供服务的进程 
                                 // 0表示servicemanager
                                    // code: 表示要调用servicemanager中的"getservice函数"

1.2 明确2个概念IPC与RPC

@1 IPC : Inter-Process Communication, 进程间通信

三个关键要素:源(source)、数据(data)、目的(target),如下所示:

对于binder系统来讲

假设源是服务端A,目的是ServiceManager;A向ServiceManager发送数据,表示注册服务的IPC流程

假设源是客户端B,目的是ServiceManager;B向ServiceManager发送数据,表示查询并获取服务handle的IPC流程

IPC

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值