Anciroid的IPC机制-Binder概述

Linux系统中,是以进程为单位分配和管理资源的。出于保护机制,一个进程不能直接访问另外一个进程的资源,也就是说,进程之间互相封闭。可是,在一个复杂的应用系统中,一般会使用多个相关的进程来共同完成一项任务,所以要求进程之间必须可以互相通讯,从而共享资源和信息。因此,操做系统内核必须提供进程间的通讯机制(IPC)。在Linux中,进程间的通讯机制有不少种,例如能够采用命名管道(named pipe)、消息队列(message queue)、信( signal)、共享内存(share memory)、socket等方式,它们均可以实现进程间的通讯。可是,Android终端上的应用软件的通讯几乎看不到这些IPC通讯方式,取而代之的是Binder方式。Android同时为Java环境和C/C++环境提供了Binder机制。本章主要介绍C/C++环境下的Binder机制,主要包括Binder驱动的实现、运做原理、IPC机制的实现、接口等.咱们将详细讲解。安全

3.1 Binder概述异步

    应用程序虽然是以独立的进程运行的,但相互之间仍是须要通讯,好比,在多进程的环境下,应用程序和后台服务一般会运行在不一样的进程中,有着独立的地址空间,可是由于须要相互协做,彼此间又必须进行通讯和数据共享,这就须要进程通讯来完成。在Linux系统中,进程间通讯的方式有socketnamed pipemessage queuesignalshare memory等;Java系统中的进程间通讯方式也有socketnarned pipe等,因此Android能够选择的进程间通讯的方式也不少,可是它主要包括如下几种方式:socket

    (1)标准Linux Kemel IPC接口spa

    (2)标准D-BUS接口操作系统

    (3)Binder接口线程

 

3.1.1  为何选择Binder教程

  在上面这些可供选择的方式中,Android使用得最多也最被承认的仍是Binder机制。为什么会选择Binder来做为进程之间的通讯机制呢?由于Binder更加简洁和快速,消耗的内存资源更小吗?不错,这些也正是Binder的优势。固然,也还有不少其余缘由,好比传统的进程间通讯可能会增长进程的开销,并且有进程过载和安全漏洞等方面的风险,Binder正好能解决和避免这些问题。Binder主要能提供如下一些功能:接口

 (1)用驱动程序来推动进程间的通讯。队列

3.1.2初识Binder进程

    Binder是经过LinuxBinder Driver来实现的,Binder操做相似于线程迁移(thread migration),两个进程间通讯看起来就像是一个进程进入另外一个进程去执行代码,而后带着执行的结果返回。Binder的用户空间为每个进程维护着一个可用的线程池,线程池用于处理到来的IPC以及执行进程的本地消息,Binder通讯是同步的而不是异步的。同时,Binder机制是基于OpenBindero来实现的,是一个OpenBinderLinux实现,Android系统的运行都将依赖Binder驱动。 Binder通讯也是基于ServiceClient的,全部须要IBinder通讯的进程都必须建立一个IBinder接口。系统中有一个名为Service Manager的守护进程管理着系统中的各个服务,它负责监听是否有其余程序向其发送请求,若是有请求就响应,若是没有则继续监听等待。每一个服务都要在Service Manager中注册,而请求服务的客户端则向Service Manager请求服务。在Android虚拟机启动以前,系统会先启动Service Manager进程,Service Manager就会打开Binder驱动,并通知Binder Kemel驱动程序,这个进程将做为System Service Manager,而后该进程将进入一个循环,等待处理来自其余进程的数据。所以,咱们也能够将Binder的实现大体分为:Binder驱动、Service ManagerServiceClient这几个部分,在后面教程中分别对这几个部分进行详细分析。

相关文章
相关标签/搜索