Android---Binder进程间通信机制1

Binder是Android系统中的进程间通信机制,它提供了一种高效的数据传输方式,通过内存映射(mmap)实现一次拷贝,性能接近于共享内存。相比于其他LinuxIPC方式,Binder具有性能优势。文章详细介绍了Binder的工作原理,包括数据传输过程、内存划分以及Binder驱动在进程通信中的作用。
摘要由CSDN通过智能技术生成

1 binder 是什么?

\bullet 进程间通信机制(一个进程可以理解为一个 app

\bullet 是一个驱动

\bullet Binder.java(implement Ibinder) --> 写一个类 extends Binder.jiva 就有了跨进程的能力。

 跨进程的应用:

 \bullet 自己创建的进程:webView、视频播放、音乐、大图浏览和推送

 \bullet 系统服务:打电话,闹钟等等

2 Android 为什么要增加Binder?为什么面试要问 Binder?Binder 有什么优势?

Linux 进程间通信机制有:管道、信号量、socket、共享内存等。而 android 增加 binder 肯定是比 linux 进程间通信机制更好。

Binder 的性能仅次于“共享内存”优于其它 IPC(进程间通信机制) ,有很多有点。

Binder 与其它 IPC 对比

 Binder 如何实现一次拷贝?

内存划分:

内存被操作系统划分称两块:用户空间内核空间。用户空间是用户程序代码运行的地方,内核空间是内核代码运行的地方。为了安全,它们是隔离的,即使用户程序崩溃了,内核也不受影响。

 传统 IPC 传输数据时的两次拷贝

 第一次copy, 通过系统调用 copy_from_user() 将数据从用户空间 copy 到内核缓存区; 第二次 copy通过调用 copy_to_user() 将数据从内核空间 copy 到用户空间。用户空间和内核空间都是虚拟内存,我们只能操作虚拟内存。

Binder 传输数据时的一次拷贝

数据发送方通过 copy_from_user() 将数据发送到内核地址空间(一次拷贝),内核地址空间与接收方映射了同一块物理内存(binder map空间),接收方通过 mmap(内存映射) 技术就能直接在共同的物理空间中接收数据。内核地址空间与接收方通过mmap 技术实现内存共享的。

mmap(memory mapping) 原理

Linux 通过将一个虚拟内存区域与一个磁盘上的物理区域的对象关联起来,以初始化这个虚拟内城区区域的内容,这个过程称为内存映射(Memory Mapping)

mmap 能够让虚拟内存与指定的物理内存直接联系起来。

共享内存

发送方、接收方、内核都通过mmap 共享同一块内存。所以 Binder 相当于是"半共享内存"。

进程间是怎么实现通信的?

假设:进程A,进程B(有一个 test 方法),进程A 想要调用进程B的 test 方法,在进程A 中 new B.test() 显然是不行的。因为进程间的内存是隔离的。

Binder 驱动设备

binder_init:

1 分配内存;2 初始化设备;3 放入链表 binder_devices

binder_open:

1 创建 binder_proc 对象;2 保存当前进程信息到 proc

3 file-->private_data = proc; 4 添加到 binder_procs 链表中

binder_mmap:

struct vm_struc *area ---> 内核的虚拟内存;vma ---> 进程的虚拟内存

1 通过用户空间的虚拟内存大小,分配一块内核的虚拟内存;

2 分配了一块物理内存 ---4KB;

3 把这块物理内存分别映射到用户的虚拟内存和内核的虚拟内存;

binder_ioctl:

读写操作

binder 的 jni 注册:

目的: java 和 jni 能够相互调用

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

别偷我的猪_09

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值