- 内核程序将内核缓存区中通过 copy_to_user 函数将数据拷贝到数据接收方进程的内存缓存区
通过以上过程,一次 IPC 就完成了,但是这种传统的 IPC 机制有两个问题:
-
性能比较低:整个过程数据的传递需要经历发送方内存缓存区——内核缓存区——接收方内存缓存区的过程
-
接收方进程事先不知道需要开辟多大的内存用于存放数据,因此需要开辟尽可能大的空间或者事先调用 API 来解决这个问题,这两种方式不是浪费空间就是浪费时间。
Binder IPC 原理
为了克服 Linux 传统的 IPC 机制中的不足之处,Android 系统引入了 Binder 机制,从字面上看 Binder 是胶水的意思,在这里,Binder 的职责是在不同的进程之间扮演一个桥梁的角色,让它们之间能够相互通信。从上一小节内容可以了解到,进程间的通信少不了 Linux 内核的支持,而 Binder 并不属于内核的一部分,但是,得益于 Linux 的 LKM(Loadable Kernel Module) 机制:
模块是具有独立功能的程序,它可以被单独编译,但不能独立运行。它在运行时被链接到内核作为内核的一部分在内核空间运行
因此,Binder 作为这种模块存在于内核之中,也称为 Binder 驱动。回顾上一小节的内容ÿ