在操作系统中为了保证安全性和独立性,在用户态进程之间是独立的,所以如需要进程间数据交互和通信,将进程A的数据拷贝到内核态,然后进程B将进程A的数据从内核态拷贝到用户态;
Binder的作用是连接两个进程,实现了mmap方法进行系统调用(进行通信的核心原理是内存映射),主要负责创建数据接收的缓存空间和管理数据接收缓存;
Binder的一次拷贝:Binder实现1次内存拷贝的秘密就是:它借助了虚拟内存映射机制,在数据接收方和内核空间的数据缓存区做了内存映射。这样一来,从发送方发送的数据,拷贝到内核空间时,直接映射拷贝到了接收方的内存空间中了,也就实现了一次拷贝就完成了数据从发送方、到内核、再到接收方的数据传输过程。
当2个进程C和S进行跨进程通信时,C传递给SM(ServiceManager)一个S的名称,SM查找已注册的列表,从列表中解析出S在客户端C中的Binder引用,C就可以使用这个Binder引用进行通信了。Binder引用会把数据转化成可序列化的对象,经过Binder驱动程序,把数据拷贝到S进程中,然后再反序列化,最终获得C传递过来的数据,并调用S端的本地方法来实现服务的调用。
Binder机制在Android中的具体实现原理: