標籤:核心進程 add loader bubble 執行 分享 c++和java process 建立
轉自Gityuan的Android開篇,對自我學習作進一步整理。
Android系統以Linux核心作為基底,上層採用Native層和Java層。系統分為核心空間和使用者空間,並通過系統調用(Syscall)連通。使用者空間主要採用C++和Java代碼實現,通過JNI技術連通Java層和Native層(C/C++)。
圖片來源 GITYUANLoader層
- Boot ROM: 電源按下,引導晶片代碼開始從預定義的地方(固化在ROM)開始執行.載入引導程式到
RAM,然後執行.
- Boot Loader: 這是
Android系統系統之前的引導程式,主要用來檢測外部的RAM以及設定網路、記憶體、初始化硬體參數等.
Kernel層
Kernel層是指Android核心層,到這裡才剛剛開始進入Android系統。
- 啟動
Kernel的swapper進程(pid=0):該進程又稱為idle進程, 系統初始化過程Kernel由無到有開創的第一個進程, 用於初始化進程管理、記憶體管理,載入Display,Camera Driver,Binder Driver等相關工作(圖中kernel層藍色區塊);
- 啟動kthreadd進程(pid=2):是
Linux系統的核心進程,會建立核心背景工作執行緒kworkder,非強制中斷線程ksoftirqd,thermal等一系列核心守護進程。kthreadd進程是所有核心進程的父進程。
Linux核心載入主要包括初始化kernel核心(記憶體初始化,開啟中斷,初始化進程表等)、初始化驅動、啟動核心後台(daemons)線程、安裝根(root)檔案系統等。後續啟動第一個使用者級進程init(pid=1).
Native層
Native層主要包括啟動init進程(Android的第一個使用者空間進程)、HAL層(硬體抽象層)以及開機動畫等。init進程是所有使用者進程的鼻祖。同時init進程也會孵化一系列使用者進程,還會啟動關鍵的服務以及孵化Zygote進程。
init進程會孵化出ueventd、logd、healthd、installd、adbd、lmkd等使用者守護進程;
init進程還啟動servicemanager(binder服務管家)、bootanim(開機動畫)等重要服務
init進程孵化出Zygote進程,Zygote進程是Android系統的第一個Java進程,Zygote是所有Java進程的父進程,Zygote進程本身是由init進程孵化而來的。
- kthreadd進程: 是所有核心進程的父進程
- init進程 : 是所有使用者進程的父進程(或者父父進程)
- zygote進程 : 是所有上層Java進程的父進程,另外zygote的父進程是init進程。
Framework層
,Framework層分為Java Frameword和C++ Framework,分別由system_server進程和media_server進程負責啟動和管理。
Zygote本身是一個Native的應用程式,剛開始的名字為“app_process”,運行過程中,通過系統調用將自己名字改為Zygote。在圖中的紅色線,便是Zygote fork出來的進程,所有的App進程都是由Zygote fork產生的。
image.png
Zygote進程,是由init進程通過解析init.rc檔案後fork產生的,Zygote進程主要包含:
載入ZygoteInit類,註冊Zygote Socket服務端通訊端;
載入虛擬機器;
preloadClasses;
preloadResouces。
System Server進程,是由Zygote進程fork而來,System Server是Zygote孵化的第一個進程,System Server負責啟動和管理整個Java framework,包含ActivityManager,PowerManager等服務。
Media Server進程,是由init進程fork而來,負責啟動和管理整個C++ framework,包含AudioFlinger,Camera Service,等服務。
App層
Zygote進程孵化出的第一個App進程是Launcher,這是使用者看到的案頭App;
- Zygote進程還會建立Browser,Phone,Email等App進程,每個App至少運行在一個進程上。
- 所有的App進程都是由Zygote進程fork產生的。
Syscall && JNI
- Native與Kernel之間有一層系統調用(SysCall)層,見Linux系統調用(Syscall)原理;
- Java層與Native(C/C++)層之間的紐帶JNI,見Android JNI原理分析。
Andorid的啟動過程
Android進程整理
Android系統全貌 (轉)