Android Framework-IPC Binder通信(一)

 总览

         在 Android 中,每个应用程序通常分配一个独立的虚拟地址空间,虚拟地址空间的大小通常由操作系统和硬件决定。一般来说,Android 应用程序的虚拟地址空间大小是固定的,通常在 32 位系统上大约是 4GB(2^32)。这个虚拟地址空间被分成了用户空间和内核空间,其中大部分(约 3GB)是用户空间,用于存放应用程序的代码、数据、堆栈等,而一小部分(约 1GB)是内核空间,用于存放操作系统的代码和数据结构。客户端和服务端共享内核空间。

         在 Binder IPC 中,数据的传输是通过跨进程的内存映射(Memory Mapping)来实现的。即Binder 机制会在发送端和接收端之间建立一个共享的内存区域(缓冲区或共享内存),用于存放需要传输的数据。发送端将数据写入到共享内存中,然后通过 Binder 通信机制将共享内存的描述符发送给接收端,接收端再通过描述符找到共享内存,并读取其中的数据。

Binder架构

蓝色部分(C/S 架构):

        BinderProxy类代码客户端,Binder类代表服务端。framework层的Binder逻辑是建立在Native层架构基础之上,核心逻辑都是由Native层方法来处理。

绿色部分(C/S 架构):

1、Service Manager 是 Android 系统底层的服务管理器,位于系统级别的进程中。通过 ioctl 函数调用 /dev/binder 设备节点,实现服务的注册、查找和获取等操作。如当某个服务需注册 Service Manager 可通过 ioctl 函数向设备节点写入注册信息;当客户端需获取某个服务时,Service Manager 可通过 ioctl 函数从设备节点中读取服务的信息并返回给客户端。

2、BpBinder(Binder Proxy)是 Binder 通信的客户端代理,位于客户端进程中。负责向服务端进程发送 Binder 调用请求。当客户端需要向服务端发送请求时,可通过 ioctl 函数调用 /dev/binder 设备节点,将请求数据写入设备节点,然后等待服务端的响应。

3、BBinder(Binder Stub)是 Binder 通信的服务端存根,位于服务端进程中。负责接收来自客户端的 Binder 调用请求,并根据请求执行相应的操作。服务端进程可通过 ioctl 函数调用 /dev/binder 设备节点,从设备节点中读取客户端发送的请求数据,并进行处理,然后将执行结果返回给客户端。

  • 12
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值