浅谈Service Manager成为Android进程间通信(IPC)机制Binder守护进程之路.doc
文本预览下载声明
? ? ?上一篇文章 HYPERLINK /luoshengyang/article/details/6618363 Android进程间通信(IPC)机制Binder简要介绍和学习计划简要介绍了Android系统进程间通信机制Binder的总体架构,它由Client、Server、Service Manager和驱动程序Binder四个组件构成。本文着重介绍组件Service Manager,它是整个Binder机制的守护进程,用来管理开发者创建的各种Server,并且向Client提供查询Server远程接口的功能。
?? ? ? ?既然Service Manager组件是用来管理Server并且向Client提供查询Server远程接口的功能,那么,Service Manager就必然要和Server以及Client进行通信了。我们知道,Service Manger、Client和Server三者分别是运行在独立的进程当中,这样它们之间的通信也属于进程间通信了,而且也是采用Binder机制进行进程间通信,因此,Service Manager在充当Binder机制的守护进程的角色的同时,也在充当Server的角色,然而,它是一种特殊的Server,下面我们将会看到它的特殊之处。
?? ? ? 与Service Manager相关的源代码较多,这里不会完整去分析每一行代码,主要是带着Service Manager是如何成为整个Binder机制中的守护进程这条主线来一步一步地深入分析相关源代码,包括从用户空间到内核空间的相关源代码。希望读者在阅读下面的内容之前,先阅读一下前一篇文章提到的两个参考资料 HYPERLINK /innost/archive/2011/01/09/1931456.html Android深入浅出之Binder机制和 HYPERLINK /2011/02/28/android-bnder-design/ Android Binder设计与实现,熟悉相关概念和数据结构,这有助于理解下面要分析的源代码。
?? ? ??Service Manager在用户空间的源代码位于frameworks/base/cmds/servicemanager目录下,主要是由binder.h、binder.c和service_manager.c三个文件组成。Service Manager的入口位于service_manager.c文件中的main函数:
HYPERLINK /luoshengyang/article/details/6621566 \o view plain view plain
int?main(int?argc,?char?**argv)??
{??
????struct?binder_state?*bs;??
????void?*svcmgr?=?BINDER_SERVICE_MANAGER;??
??
????bs?=?binder_open(128*1024);??
??
????if?(binder_become_context_manager(bs))?{??
????????LOGE(cannot?become?context?manager?(%s)\n,??strerror(errno));??
????????return?-1;??
????}??
??
????svcmgr_handle?=?svcmgr;??
????binder_loop(bs,?svcmgr_handler);??
????return?0;??
}??
?? ? ? ?main函数主要有三个功能:一是打开Binder设备文件;二是告诉Binder驱动程序自己是Binder上下文管理者,即我们前面所说的守护进程;三是进入一个无穷循环,充当Server的角色,等待Client的请求。进入这三个功能之间,先来看一下这里用到的结构体binder_state、宏BINDER_SERVICE_MANAGER的定义:
?? ? ? ?struct?binder_state定义在frameworks/base/cmds/servicemanager/binder.c文件中:
HYPERLINK /luoshengyang/article/details/6621566 \o view plain view plain
struct?binder_state??
{??
????int?fd;??
????void?*mapped;??
????unsigned?mapsize;??
};??
?? ? ? ?fd是文件描述符,即表示打开的/dev/binder设备文件描述符;mapped是把设备
显示全部