美文网首页
[Binder 一]Binder浅析

[Binder 一]Binder浅析

作者: 慎独静思 | 来源:发表于2024-01-06 00:14 被阅读0次

    Binder是android系统中的一种进程通信方式,Android开发以及源码中大量使用了这种方式。
    进程空间分为:用户空间和内核空间,用户空间不共享,内核空间是共享。

    image.png
    Binder驱动运行在内核空间,相比于其他的进程通信方式如管道,socket等,Binder通信方式只需要进行一次数据拷贝,而其他方式需要进行两次数据拷贝。
    两次数据拷贝分别是:
    copy_from_user() //将数据从用户空间拷贝到内核空间
    copy_to_user() //将数据从内核空间拷贝到用户空间
    image.png
    Binder只有一次数据拷贝的原因是内存映射 image.png

    一次完整的Binder IPC 通信过程通常是这样:

    • Binder 驱动在内核空间创建一个数据接收缓存区;
    • 然后在内核空间开辟一块内核缓存区,建立内核缓存区和内核中数据接收缓存区之间的映射关系,以及内核中数据接收缓存区和接收进程用户空间地址的映射关系;
    • 发送方进程通过系统调用 copy_from_user() 将数据拷贝到内核中的内核缓存区,由于内核缓存区和接收进程的用户空间存在内存映射,因此也就相当于把数据发送到了接收进程的用户空间,这样便完成了一次进程间的通信。

    Binder内容分布在Android系统的Java层,Native层和驱动层。
    Binder通信采用C/S结构,主要的角色包括:Client,Server,Service Manager和Binder驱动。


    image.png

    Service Manager是服务管理类,一个Service想要在Android系统生效,必须在Service Manager进行注册,也就是调用它的addService方法,之后客户端可以通过getService获取对应的服务,然后客户端和服务端可以进行通信。
    步骤1,2,3都使用Binder通信进行跨进程通信。

    文章大部分内容和所用图片来自参考内容3

    参考:

    1. 《深入理解Android卷1》
    2. 《深入理解Android卷2》
    3. Android——Binder机制

    相关文章

      网友评论

          本文标题:[Binder 一]Binder浅析

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