Binder知识点

一、Linux内核基础知识

        1、进程隔离/虚拟地址空间:进程的隔离就是为了防止进程A直接操作进程B的数据;进程A的虚拟地址空间和进程B的虚拟地址空间是不同的,这样可以防止进程A的数据可以写到进程B里main;不同进程之间的数据是不共享的,而他们如果需要通信,那么就需要通过Binder机制来进行通讯。

        2、 系统调用:内核的保护机制来告诉应用程序,你只可以访问那些资源,不许可的资源是不可以被访问的。

        3、Binder驱动:在内核当中负责应用程序间通过binder机制来交互的一个模块。

二、Binder通信机制介绍

        1、为什么使用binder:android使用的Linux内核拥有非常多的跨进程通信机制,binder相比于其他通讯机制更加高效,安全性中,binder通讯机制就要双方进行身份校验,身份校验也是android权限模型的基础。

        2、binder通讯模型:我们进程的标识信息会保存在binder中类似于通讯录,binder驱动就相当通讯基站。

        3、bubder通信机制原理: 


    第一步:Service Manager的建立,ServiceManager就相当于通讯录

    第二步:当每个进程启动的时候都会想ServiceManager中注册自己的内存地址,这个时候在ServiceManager表中就会有一个类似通讯录的表,里面对应着进程名字和内存地址。

    第三步:client与Server2通讯的话就发送查询请求到ServiceManager中,ServiceManager就会把内存地址告诉client。这样client就能与Server2通讯了。

进程间的通讯:


上图的动作就是,client想要调用server端的一个返回类型是object的一个add方法。

首先,server会到SM(ServiceManager)中注册一张表,这张表中的内容就是server端有一个object对象可以执行add方法操作。

这个时候,client就去SM中查询,看看有没有一个object对象,object对象有没有add方法。我们知道进程间的通讯数据都是在内核空间里的,这时驱动并不会返回给client进程一个真正的object对象,因为这时无法进行操作的,他会返回一个object的一个代理对象,这个代理对象就包含了一个add方法但是这个方法是一个空方法,他唯一做的事把参数包装好交给内核驱动来实现。

当client收到这个object的代理对象时, 然后就调用add方法,client调用add方法的时候add是一个空方法,这时候由binder驱动处理add方法,binder收到add方法参数就会通知server端调动add方法。

最后server端的add返回结果给驱动,驱动返回给client。

client进程只是持有Service端的一个代理,我们通过代理对象协助驱动完成跨进程通信

        4、binder是什么:binder是跨进程通讯机制 ;对server进程来说,Binder指的是Binder本地对象/对Client来说,Binder指的是Binder代理对象;对于传输看过程而言,Binder是可以进行跨进程传递的对象。

        
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值