Android Binder机制初识(一)

进程间通信(IPC)

进程空间划分

  • 在Linux中,一个进程空间可以分为 用户空间(User space) & 内核空间(Kernel space),即把进程内 用户 & 内核 隔离开来;
  • 用户空间中的数据不可共享,内核空间中的数据可共享,这样做的目的在于保证内核的安全;
  • 进程内 用户 与 内核 进行交互 称为系统调用
    进程结构图

进程隔离与通信

  • 进程间通信(inter-Process Communication, IPC),是指两个进程之间进行数据交换的过程。而在Linux系统中为了保证 安全性 & 独立性,一个进程不能直接操作或者访问另一个进程,即Android的进程是相互独立、隔离的。
  • 隔离后,由于某些需求,进程间 需要合作 / 交互,主要分为两步:1. 先通过进程间的内核空间进行 数据交互; 2. 再通过 进程内 的用户空间 & 内核空间进行 数据交互,从而实现 进程间的用户空间 的数据交互。
    在这里插入图片描述
  • 而上面的两个进程间通信 实质上是在内核区间中分配内存并开辟一块内核缓存区,通过copy_from_user函数将数据拷贝到到内核空间的缓冲区中,然后调用 copy_to_user() 函数将数据从内核缓存区拷贝到接收进程。但这种IPC机制需要传递两次数据,且传递数据存储空间浪费,效率较为低下。

Binder机制

基于内存映射的Binder机制的出现解决了这个问题,使得进程间通信效率大为提升。

  • Binder 只需要拷贝一次数据,而一般的IPC需要拷贝两次;
  • 通过驱动内核空间拷贝数据,不需要额外的同步处理;
  • 不会因为不知道数据的大小而浪费空间或者时间,效率更高。

在这里插入图片描述

Binder机制模型

Binder 跨进程通信机制 模型 基于 Client - Server 模式,模型原理图如下:

  • Client进程: Android客户端,使用服务的进程;
  • Server进程:服务器端,提供服务的进程;
  • Service Manger进程:中转站,管理Sevice注册与查询;
  • Binder驱动:一种虚拟设备驱动,连接Server进程、Client进程、ServerManger进程的桥梁,实现进程间数据传递与线程控制。

在这里插入图片描述

注册服务

Service Manger 注册 Server进程 信息

  1. Server进程 向 Binder驱动 发起服务注册请求;
  2. Binder驱动 将注册请求转发给 Service Manger进程;
  3. Service Manger进程 添加该 Server进程。

获取服务

Client 与 Server建立连接

  1. Client进程 向 Binder驱动发起获取服务的请求,传递要获取的服务名称;
  2. Binder驱动将该请求转发给 Service Manger进程;
  3. Service Manger 查找需要的Service 对应的服务器信息;
  4. 通过Binder驱动将上述服务信息返回给Client进程。

使用服务

  1. Client进程将参数数据发送给Server进程:

    1. Client进程将需要传送的数据放到 Client进程的共享内存;
    2. Binder驱动从Client进程的共享内存中读取上述数据,并根据Service Manger 进程里的Server信息找到对应的Server进程;
    3. Binder驱动 把上述数据拷贝到Server进程的共享内存中,并通知Server进程执行解包。
  2. Server进程根据Client进程要求调用目标方法:

    1. 收到Binder驱动驱动通知后,Server进程从线程池中取出线程,进行数据解包&调用目标方法;
    2. 将最终执行结果写入自己的共享内存中。
  3. Server进程将目标方法的结果返回给Client进程

    1. Binder驱动将Server进程的共享内存中的数据(目标方法执行结果)拷贝到Client进程的共享内存;
    2. 通知Client进程获得返回结果(此时Client进程之前挂起的线程被重新唤醒)。

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值