[转载]Android系统的运行机制: 启动流程与层间交互

Android系统剖析 和 Android系统的运行机制: 启动流程与层间交互,2015-02-28

Android运行机制(看图说话)

1. 启动流程

所有从init开始…

与大多数的基于Linux系统在启动阶段类似,bootLoader加载Linux内核,然后开始init进程。
这里写图片描述

init启动Linux守护进程,包括:
USB守护进程(usbd)来管理USB连接
Android调试桥守护进程(adbd)来管理ADB连接
调试器守护进程(debuggerd)来管理调试进程请求(dump memory等等)
射频接口层守护进程(rild)来管理与射频的通信
这里写图片描述

Init进程启动zygote进程:
一个新生的进程初始化一个Dalvik VM实例
加载类,并监听socket端口用于请求创建VMs实例
Forks请求创建VM实例用于管理进程
写时复制(Copy-on-write)来最大化重用和最小化覆盖
这里写图片描述

init进程启动runtime进程:
初始化Service Manager——上下文管理器用于binder来处理service注册和查询
注册Service Manager作为缺省的上下文管理用于Binder
这里写图片描述

Runtime进程发送请求给Zygote来启动System Service
这里写图片描述

接着Zygote进程fork一个新的VM实例用于System Service进程,然后启动该service。
这里写图片描述

System Service启动本地系统服务器,包括:
Surface Flinger
Audio Flinger
这里写图片描述

本地system servers注册Service Manager作为IPC service目标:
这里写图片描述

System Service启动Android管理服务(framework层各种service和manager):
这里写图片描述

Android管理服务注册到Service Manager中:
这里写图片描述


到此,整个Android系统的启动后:
这里写图片描述

System Server加载完所有的services后, 系统准备 过程如下…

这里写图片描述

zygote生产出home的dalvik vm:
这里写图片描述

底层出现libc:
这里写图片描述

zygote逐个生产出dalvik vm:
这里写图片描述


2. 层间交互(Layer Interaction)

主要有如下三种类型的交互:

  • App -> Runtime Service -> lib

  • App -> Runtime Service -> Native Service -> lib

  • App -> Runtime Service -> Native Daemon -> lib

Android Runtime Services:

这里写图片描述

举例:Location Manager
这里写图片描述

Android Native Services:

这里写图片描述

举例:MediaPlayer
这里写图片描述

增加ALSA?
这里写图片描述

丢弃了kernel driver?
这里写图片描述

Daemon Connection:

native service 被替换为 daemon, binder IPC 被替换为sockets方式,如下:
这里写图片描述

举例:RILD
Telephony Manager
这里写图片描述

(完)

发布了69 篇原创文章 · 获赞 39 · 访问量 20万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章