您好,欢迎来到五一七教育网。
搜索
您的当前位置:首页Android Binder 的主要内容概述以及特性和原理

Android Binder 的主要内容概述以及特性和原理

来源:五一七教育网

[图片上传失败…(image-a27659-1628086130715)]

[](()三、Linux下IPC原理


[图片上传失败…(image-7a3593-1628086130715)]

[](()1.进程隔离

  • 进程与进程间内存是不共享的。两个进程就像两个平行的世界,A 进程没法直接访问 B 进程的数据,这就是进程隔离的通俗解释。

  • A 进程和 B 进程之间要进行数据交互就得采用特殊的通信机制:进程间通信(IPC)。

[](()2.用户空间与内核空间

  • 简单的说就是,内核空间(Kernel)是系统内核运行的空间,用户空间(User Space)是用户程序运行的空间。为了保证安全性,它们之间是隔离的。

[](()3.用户态与内核态

  • 虽然从逻辑上抽离出用户空间和内核空间;但是不可避免的的是,总有那么一些用户空间需要访问内核的资源;比如应用程序访问文件,网络是很常见的事情,怎么办呢?

  • 当一个任务(进程)执行系统调用而陷入内核代码中执行时,我们就称进程处于内核运行态(内核态)此时处理器处于级最高的(0级)内核代码中执行。当进程在执行用户自己的代码时,则称其处于用户运行态(用户态)。即此时处理器在级最低的(3级)用户代码中运行。处理器在等级高的时候才能执行那些CPU指令。

  • 系统调用主要通过如下两个函数来实现:

copy_from_user() //将数据从用户空间拷贝到内核空间

copy_to_user() //将数据从内核空间拷贝到用户空间

复制代码

[](()四、Binder原理


[](()4.1 Binder组成

[图片上传失败…(image-590516-1628086130715)]

Binder 是基于 C/S 架构的。由一系列的组件组成,包括 Client、Server、ServiceManager、Binder 驱动。其中 Client、Server、Service Manager 运行在用户空间,Binder 驱动运行在内核空间。其中 Service Manager 和 Binder 驱动由系统提供,而 Client、Server 由应用程序来实现。Client、Server 和 ServiceManager 均是通过系统调用 open、mmap 和 ioctl 来访问设备文件 /dev/binder,从而实现与 Binder 驱动的交互来间接的实现跨进程通信。

  • Client

如同互联网中客户端(Client),Binder是Server本地对象的一个引用,这个引用实际上是一个代理对象,Client通过这个代理对象来间接访问Server的本地对象;

  • Server

如同互联网中服务器(Server),Binder是提供具体实现的本地对象,需向ServiceManager注册;

  • ServiceManager
  • 驱动

如同互联网中路由器(Binder 驱动),是整个通信的核心;驱动负责进程之间 Binder 通信的建立,Binder 在进程之间的传递,Binder 引用计数管理,数据包在进程之间的传递和交互等一系列底层支持。

[](()4.2 Binder架构

[图片上传失败…(image-a6a75d-1628086130715)]

Binder架构采用分层架构设计,每一层都有其不同的功能,以大家平时用的startService为例子,AMP为ActivityManagerProxy,AMS为ActivityManagerSerivce。BpBinder是Client端创建的用于向Server发送消息的代理,而BBinder是Server端用于接受消息的通道。

  • Binder 通信采用 C/S 架构,从组件视角来说,包含 Client、 Server、 ServiceManager 以及 Binder 驱动,其中 ServiceManager 用于管理系统中的各种服务。

  • Binder 在 framework 层进行了封装,通过 JNI 技术调用 Native(C/C++)层的 Binder 架构。

  • Native 层: 对于Native层,如果需要使用Binder,则可以直接使用BpBinder和BBinder(也包括JavaBBindder)即可,对于上一层Java IPC通信也是基于这个层面。

[](()4.3 Binder机制通讯原理

[图片上传失败…(image-f6d2dc-1628086130715)]

  • Server向ServiceManager注册Server通过Binder驱动向ServiceManager注册,声明可以对外提供服务。ServiceManager中会保留一份映射表。

  • Client向ServiceManager请求Server的Binder查询Client想要请求Server的数据时,需要先通过Binder驱动向ServiceManager请求Server的Binder引用:我要向名字为zhangsan的Server通信,请告诉我Server的Binder引用。

  • 向具体的Server发送请求Client拿到这个Binder引用后,就可以通过Binder驱动和Server进行通信了。

  • Server返回结果Server响应请求后,需要再次通过Binder驱动将结果返回给Client。

[](()4.4 总结

  • 从进程间通信的角度看,Binder 是一种进程间通信的机制;
  • 从 Server 进程的角度看,Binder 指的是 Server 中的 Binder 实体对象;
  • 从 Client 进程的角度看,Binder 指的是对 Binder 代理对象,是 Binder 实体对象的一个远程代理
  • 从传输过程的角度看,Binder 是一个可以跨进程传输的对象;Binder 驱动会对这个跨越进程边界的对象对一点点特殊处理,自动完成代理对象和本地对象之间的转换。

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- 517ttc.cn 版权所有 赣ICP备2024042791号-8

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务