美文网首页
每日一问(十三)简述Binder机制

每日一问(十三)简述Binder机制

作者: 我在吉安打螺丝 | 来源:发表于2021-08-06 10:01 被阅读0次

    在Linux中,为了避免一个进程对其他进程的干扰,进程之间是相互独立的。在一个进程中其实还分为用户空间和内核空间。这里的隔离分为两个部分,进程间的隔离和进程内的隔离。
    既然进程间存在隔离,那其实也是存在着交互。进程间通信就是 IPC,用户空间和内核空间的通信就是系统调用。
    Linux 为了保证独立性和安全性,进程之间不能直接相互访问,Android 是基于 Linux 的,所以也是需要解决进程间通信的问题。
    其实 Linux 进程间通信有很多方式,比如管道、socket 等等。为什么 Android 进程间通信采用了Binder而不是 Linux

    已有的方式,主要是有这么两点考虑:性能和安全

    性能: 在移动设备上对性能要求是比较严苛的。Linux传统的进程间通信比如管道、socket等等进程间通信是需要复制两次数据,而Binder则只需要一次。所以Binder在性能上是优于传统进程通信的。

    安全: 传统的 Linux 进程通信是不包含通信双方的身份验证的,这样会导致一些安全性问题。而Binder机制自带身份验证,从而有效的提高了安全性。

    Binder 是基于 CS 架构的,有四个主要组成部分。
    Client: 客户端进程。
    Server: 服务端进程。
    ServiceManager: 提供注册、查询和返回代理服务对象的功能。
    Binder 驱动: 主要负责建立进程间的 Binder 连接,进程间的数据交互等等底层操作。
    Binder 机制主要的流程是这样的:
    1.服务端通过Binder驱动在 ServiceManager 中注册我们的服务。
    2.客户端通过Binder驱动查询在 ServiceManager 中注册的服务。
    3.ServiceManager 通过Binder 驱动返回服务端的代理对象。
    4.客户端拿到服务端的代理对象后即可进行进程间通信。

    相关文章

      网友评论

          本文标题:每日一问(十三)简述Binder机制

          本文链接:https://www.haomeiwen.com/subject/ztbmvltx.html