美文网首页
Android Framework 03--- Binder机制

Android Framework 03--- Binder机制

作者: 沪漂意哥哥 | 来源:发表于2022-03-29 20:07 被阅读0次

一.阿里一问:为什么Android需要采用Binder

Linux已有进程通信了,为什么Android还需要单独设计?
进程通信的本质:内存数据拷贝
Linux已有进程通信:

1.管道
image.png

效率:不高(两次拷贝)
安全:比较安全
模型:一对一

2.共享内存
image.png

效率:最高(0次拷贝)
安全:不安全
模型:多对多

3.Scoket

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

image.png

二. 阿里二问:Binder一次拷贝原理是什么

用户空间拷贝到内核空间。


image.png

三. 阿里三问:Binder驱动作用机制

binder 的整体架构: image.png

四. 阿里四问: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();
        }
    }
}

相关文章

网友评论

      本文标题:Android Framework 03--- Binder机制

      本文链接:https://www.haomeiwen.com/subject/xlvjjrtx.html