[转载]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
这里写图片描述

(完)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值