了解Binder之前要理解的几个概念:
-
进程
-
虚拟内存&物理内存
进程
进程是系统进行资源分配和调度的基本单位,是操作系统结构的基础。每一个进程都有自己独立的用户空间。在一个android App中最少有一个进程。
虚拟内存&物理内存
虚拟内存是计算机系统内存管理的一种技术。它使得应用程序认为它拥有连续的可用的内存(一个连续完整的地址空间),而实际上,它通常是被分隔成多个物理内存碎片。
物理内存就是硬件实际提供的内存空间。
IPC
ipc即进程间通信。
由于种种原因,一个App实际上并不是完全运行在一个进程中,有时会同时运行两个甚至更多的进程中,而又因为进程彼此的用户空间是隔离的,也就造成了数据无法共享的问题,这时就需要到进程间通信了。
思路:
1.通过系统内核空间,因为都是运行在同一个系统之上,而系统拥有属于自己的内核空间,我们只用把进程1的用户空间中的数据copy到系统内核空间中,再由内核空间copy到进程2的用户空间中。
但是每一次流程都需要copy两次数据。
2.既然系统为进程分配的都是虚拟内存,那可以将进程1与进程2的虚拟内存指向同一片物理空间,这样进程间就拥有了一片共享的内存空间。
这样就没有了copy的步骤。但是这样就会出现类似线程的脏数据与死锁等的问题。
Binder
binder设计时取了一个折中的办法,只copy一次进入内核空间,由内核空间与另一个进程直接
共享内存。
这样只用copy一次数据,而且由于进程直接没有共享内存也不会发生脏数据与死锁的问题。