Android系統全貌 (轉)

來源:互聯網
上載者:User

標籤:核心進程   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系統。

  • 啟動Kernelswapper進程(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 FramewordC++ 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系統全貌 (轉)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.