[轉載]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萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章