一.阿里一问:为什么Android需要采用Binder
Linux已有进程通信了,为什么Android还需要单独设计?
进程通信的本质:内存数据拷贝
Linux已有进程通信:
1.管道

效率:不高(两次拷贝)
安全:比较安全
模型:一对一
2.共享内存

效率:最高(0次拷贝)
安全:不安全
模型:多对多
3.Scoket
效率:最低(拷贝两次,用户和内核CPU切换)
安全:安全
模型:多对一
4.File
效率:最低
安全:不安全
模型:多对多

二. 阿里二问:Binder一次拷贝原理是什么
用户空间拷贝到内核空间。

三. 阿里三问:Binder驱动作用机制
binder 的整体架构:
四. 阿里四问:Intent传递参数为何有限制,限制多少,Binder驱动在哪限制
1M-8K
#define BINDER_VM_SIZE ((1 * 1024 * 1024) - sysconf(_SC_PAGE_SIZE) * 2)//这里的限制是1MB-4KB*2
ProcessState::ProcessState(const char *driver)
{
if (mDriverFD >= 0) {
// mmap the binder, providing a chunk of virtual address space to receive transactions.
// 调用mmap接口向Binder驱动中申请内核空间的内存
mVMStart = mmap(0, BINDER_VM_SIZE, PROT_READ, MAP_PRIVATE | MAP_NORESERVE, mDriverFD, 0);
if (mVMStart == MAP_FAILED) {
// *sigh*
ALOGE("Using %s failed: unable to mmap transaction memory.\n", mDriverName.c_str());
close(mDriverFD);
mDriverFD = -1;
mDriverName.clear();
}
}
}
网友评论