Android 系統整體架構

前言

看了Gityuan大神的博客,最近因爲遇到一些工作上的問題踩了坑,決定正式開始閱讀Android framework層源碼,當然後面可能還會經歷一個多月的畢設流程,等畢業回來工作也正式要邁上正軌了,好幾個月沒寫博客了,前段時間因爲感情上的問題消沉了幾個月,好在現在走出來了,其實很早以前就想閱讀framework了,趁着這段時間就開始吧。今天這篇文章主要梳理下Android整體的架構和系統啓動的流程。文章參考Android系統開篇。主要目的是加深自己的記憶。

Android 系統架構

google經典的四層架構從下往上分別爲:Linux內核層、系統庫和Android運行時環境、framework層和應用層這四層架構。按照Gityuan大神的視角,我們也從系統啓動過程爲主線,以進程的視角來剖析Android系統的架構這裏寫圖片描述

Android 啓動架構

這裏先上一張Android 系統啓動的架構圖:
這裏寫圖片描述
可以看到:Android系統啓動是從下往上的一個過程:Loader->Kernel->Native->Framework->App

Loader 層

  • Boot Rom當手機處於關機狀態時,長按開機鍵開機,會引導芯片開始從固化在Rom裏預設的代碼開始執行,然後加載引導程序到Ram.
  • Boot Loader這是啓動Android系統之前的引導程序,主要是檢查Ram、初始化參數等功能。

Kernel 層

kernel層指的就是Android內核層,到這裏纔剛剛進入Android系統

  1. 啓動Kernel層的swapper進程(pid=1),系統初始化過程Kernel創建的第一個進程,用於初始化進程管理、內存管理,加載DisplayCameraBinder等驅動相關工作。
  2. 啓動kthreadd(pid=2),這是Linux系統的內核進程,會創建內核工作線程kworkder、軟中斷線程ksoftirqdthermal等內核守護進程。kthreadd是所有內核進程的鼻祖。

Native 層

這裏的Native層主要包括init孵化來的用戶空間的守護進程、HAL層及開機動畫等。啓動init進程(pid=1),是Linux系統的用戶進程,init進程是所有用戶進程的鼻祖。

  • init進程會孵化出ueventdlogdhealthdinstalldadbdlmkd等用戶守護進程;
  • init進程還會啓動ServiceManager(Binder服務管家)、bootanim(開機動畫)等重要服務。
  • init進程孵化出Zygote進程,Zygote進程是Android系統第一個Java進程(虛擬機進程),zygote進程是所有Java進程的父進程。

Framework 層

framework主要包括Zygote進程SystemServer進程和MediaServer進程`。

Zygote 進程

Zygote進程是由init進程通過解析init.rc文件後fork生成的。Zygote的任務主要包括:

  1. 加載ZygoteInit類,註冊Zygote Socket服務端套接字。
  2. 加載虛擬機
  3. preloadClassses
  4. preloadResources

System Server 進程

System Server進程是由Zygote進程fork而來,System ServerZygote孵化的第一個進程System Server負責啓動和管理整個Java Framework,包含ActivityManagerPowerManager等服務。

Media Server 進程

Media Server 進程由init進程fork而來,負責管理整個C++ Framework,包含AudioFlingerCamera Service等服務。

App 層

Zygote進程孵化出的第一個App進程是Launcher,也就是用戶看到的桌面App。同時Zygote進程還會創建BrowserPhoneEmailApp進程。也就是說所有的App進程都是由Zygote進程fork生成的。

Syscall 和 JNI

Native層和Kernel層有一個系統調用層,也就是SyscallJava層和native層之間的紐帶是JNI

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章