Android中的binder

C/S架构:client/server结构
B/S架构:browser/server结构
mmap:一种内存映射方法,可以把某个文件映射到某个内存上

什么是消息队列
存放消息的一个队伍
对消息有读写权限的可以从改消息队列中获取消息,或者插入消息。
消息队列随内核持续存在,进程的退出和死亡不会影响消息队列的生命周期。
消息队列提供了从一个进程到另一个进城之间发送一个数据块的方法、
每个数据 块都有一个自己的数据类型
每个消息有一个最大限制

binder只需要拷贝一次:Linux内核实际上没有从一个用户空间到另一个用户空间直接拷贝的函数,需要先用copy_from_user()拷贝到内核空间,再用copy_to_user()拷贝到另一个用户空间。为了实现用户空间到用户空间的拷贝,mmap()分配的内存除了映射进了接收方进程里,还映射进了内核空间。所以调用copy_from_user()将数据拷贝进内核空间也相当于拷贝进了接收方的用户空间,这就是Binder只需一次拷贝的‘秘密’。

手机系统的内存分为用户内存和内核内存,用户内存时不可共享数据的,内核内存可以。
每个进程都会有一个独立的用户内存,那么进程间的通信基本上流程是通过将A用户内存中的数据拷贝到内核内存,之后再将这份数据拷贝到需要数据的B进程。
但是binder机制只对数据做一次拷贝,采用了内存映射原理

什么是内存映射?

你可能感兴趣的:(Android中的binder)