一.简介
Binder是什么?
Android系统中,涉及到多进程间的通信底层都是依赖于Binder IPC机制。
例如当进程A中的Activity要向进程B中的Service通信,这便需要依赖于Binder IPC。不仅于
此,整个Android系统架构中,大量采用了Binder机制作为IPC(进程间通信,Interprocess Communication)方案。
也存在部分其他的IPC方式,如管道、SystemV、Socket等。
二.Binder的原理
在讲解Binder
前,我们先了解一些Linux
的基础知识。
进程空间划分:
- 一个进程空间分为 用户空间 & 内核空间(
Kernel
),即把进程内 用户 & 内核 隔离开来 - 二者区别:
- 进程间,用户空间的数据不可共享,所以用户空间 = 不可共享空间
- 进程间,内核空间的数据可共享,所以内核空间 = 可共享空间
- 进程内 用户空间 & 内核空间 进行交互 需通过 系统调用,主要通过函数:
copy_from_user():将用户空间的数据拷贝到内核空间
copy_to_user():将内核空间的数据拷贝到用户空间
a. 而Binder
的作用则是:连接 两个进程,实现了mmap()系统调用,主要负责 创建数据接收的缓存空间 & 管理数据接收缓存
b. 注:传统的跨进程通信需拷贝数据2次,但Binder
机制只需1次,主要是使用到了内存映射,具体下面会详细说明。
Binder 跨进程通信机制 模型 :
Binder
跨进程通信机制 模型 基于 Client - Server
模式。
Binder
驱动的作用 & 原理:
- 跨进程通信的核心原理
- 模型原理步骤说明