Android系統架構和內核及虛擬機

一、Android 體系結構

Android其本質就是在標準的Linux系統上增加了Java虛擬機Dalvik,並在Dalvik虛擬機上搭建了一個JAVA的application framework,所有的應用程序都是基於JAVA的application framework之上。
Android主要應用於ARM平臺,但不僅限於ARM,通過編譯控制,在X86、MAC等體系結構的機器上同樣可以運行。

android分爲四個層,從高層到低層分別是應用程序層、應用程序框架層、系統運行庫層和linux核心層
藍色的代表java程序,黃色的代碼爲運行JAVA程序而實現的虛擬機,綠色部分爲C/C++語言編寫的程序庫,紅色的代碼內核(linux內核+driver)。在Application Framework之下,由C/C++的程序庫組成,通過JNI完成從JAVA到C的調用。

1) 應用程序
所有的應用程序都是使用JAVA語言編寫的,每一個應用程序由一個或者多個活動組成,活動必須以Activity類爲超類,活動類似於操作系統上的進程,但是活動比操作系統的進程要更爲靈活,與進程類似的是,活動在多種狀態之間進行切換。
利用JAVA的跨平臺性質,基於Android框架開發的應用程序可以不用編譯運行於任何一臺安裝有android系統的平臺,這點正是Android的精髓所在。

2) 應用程序框架
應用程序的架構設計簡化了組件的重用;任何一個應用程序都可以發佈它的功能塊並且任何其它的應用程序都可以使用其所發佈的功能塊(不過得遵循框架的安全性限制)。幫助程序員快速的開發程序,並且該應用程序重用機制也使用戶可以方便的替換程序組件。
隱藏在每個應用後面的是一系列的服務和系統, 其中包括;
 a.豐富而又可擴展的視圖(Views),可以用來構建應用程序, 它包括列表(lists),網格(grids),文本框(text boxes),按鈕(buttons), 甚至可嵌入的web瀏覽器。
 b.內容提供器(Content Providers)使得應用程序可以訪問另一個應用程序的數據(如聯繫人數據庫), 或者共享它們自己的數據。
 c.資源管理器(Resource Manager)提供非代碼資源的訪問,如本地字符串,圖形,和佈局文件(layout files)。
 d.通知管理器(Notification Manager)使得應用程序可以在狀態欄中顯示自定義的提示信息。
 e.活動管理器(Activity Manager)用來管理應用程序生命週期並提供常用的導航回退功能。

3) 系統運行庫
 a)程序庫
    Android包含一些C/C++庫,這些庫能被Android系統中不同的組件使用。它們通過Android應用程序框架爲開發者提供服務。
    以下是一些核心庫:
    主要包括基本的C庫、以及多媒體庫以支持各種多媒體格式、位圖和矢量字體、2D和3D圖形引擎、瀏覽器、數據庫支持。
 1.Bionic系統C庫。
 2.媒體庫,基於PacketVideo OpenCORE。
 3.Surface Manager 顧名思義,用於管理Surface。
 4.Webkit,LibWebCore 瀏覽器,基於Webkit引擎。
 5.SGL 底層的2D圖形引擎
 6.3D libraries 基於OpenGL ES 1.0 APIs實現
 7.FreeType 位圖(bitmap)和矢量(vector)字體顯示。
 8.SQLite 一個對於所有應用程序可用,功能強勁的輕型關係型數據庫引擎。
 
   另外這裏還有一個硬件抽象層。其實Android並非所有的設備驅動都放在linux內核裏面,有一部分實現在用戶空間,
   這麼做的主要原因是可以避開Linux所遵循的GPL協議,一般情況下如果要將Android移植到其他硬件去運行,
   只需要實現這部分代碼即可。包括:顯示器驅動,聲音,相機,GPS,GSM等等。
 
  b)Android 運行庫
  Android 包括了一個核心庫,該核心庫提供了JAVA編程語言核心庫的大多數功能。
  每一個 Android應用程序都在它自己的進程中運行,都擁有一個獨立的Dalvik虛擬機實例。
  Dalvik被設計成一個設備可以同時高效地運行多個虛擬系統。    
  Dalvik虛擬機執行(.dex)的Dalvik可執行文件,該格式文件針對小內存使用做了優化。
  同時虛擬機是基於寄存器的,所有的類都經由JAVA編譯器編譯,然後通過SDK中的 "dx" 工具轉化成.dex格式由虛擬機執行。
  Dalvik虛擬機依賴於linux內核的一些功能,比如線程機制和底層內存管理機制。
  
4) Linux 內核
Android 的核心繫統服務依賴於 Linux 2.6 內核 ,如安全性,內存管理,進程管理, 網絡協議棧和驅動模型。 
Linux 內核也同時作爲硬件和軟件棧之間的抽象層。其外還對其做了部分修改,主要涉及兩部分修改:
   a)Binder   
  (IPC):提供有效的進程間通信,雖然linux內核本身已經提供了這些功能,但Android系統很多服務都需要用到該功能,爲了某種原因
  其實現了自己的一套。
   b)電源管理:爲手持設備節省能耗。

 

二、Dalvik VM 和 JVM 的比較

Dalvik VM 和 JVM 的比較

Dalvik VM 和 JVM 的比較

Dalvik虛擬機是Google等廠商合作開發的Android移動設備平臺的核心組成部分之一。它可以支持已轉換爲.dex(即Dalvik Executable)格式的Java應用程序的運行,.dex格式是專爲Dalvik設計的一種壓縮格式,適合內存和處理器速度有限的系統。(dx 是一套工具,可以將 Java .class 轉換成 .dex 格式. 一個dex檔通常會有多個.class。由於dex有時必須進行最佳化,會使檔案大小增加1-4倍,以ODEX結尾。)   

1、Dalvik 和標準 Java 虛擬機(JVM)首要差別 

Dalvik 基於寄存器,而 JVM 基於棧。基於寄存器的虛擬機對於更大的程序來說,在它們編譯的時候,花費的時間更短。   

2、Dalvik 和 Java 字節碼的區別 

Dalvik執行.dex格式的字節碼,而JVM執行.class格式的字節碼;

3、Dalvik 和 Java SDK的SDK不同;

4、Dalvik 和 Java 運行環境的區別    

Dalvik 經過優化,允許在有限的內存中同時運行多個虛擬機的實例,並且每一個Dalvik 應用作爲一個獨立的Linux 進程執行。獨立的進程可以防止在虛擬機崩潰的時候所有程序都被關閉。

Dalvik虛擬機在android2.2之後使用JIT (Just-In-Time)技術,與傳統JVM的JIT並不完全相同, 

Dalvik虛擬機有自己的 bytecode, 並非使用 Java bytecode.

 

還有以下幾點 

1:Dalvik主要是完成對象生命週期管理,堆棧管理,線程管理,安全和異常管理,以及垃圾回收等等重要功能。   

2:Dalvik負責進程隔離和線程管理,每一個Android應用在底層都會對應一個獨立的Dalvik虛擬機實例,其代碼在虛擬機的解釋下得以執行。   

3:不同於Java虛擬機運行java字節碼,Dalvik虛擬機運行的是其專有的文件格式Dex   

4:dex文件格式可以減少整體文件尺寸,提高I/o操作的類查找速度。   

5:odex是爲了在運行過程中進一步提高性能,對dex文件的進一步優化。   

6:所有的Android應用的線程都對應一個Linux線程,虛擬機因而可以更多的依賴操作系統的線程調度和管理機制   

7:有一個特殊的虛擬機進程Zygote,他是虛擬機實例的孵化器。它在系統啓動的時候就會產生,它會完成虛擬機的初始化,庫的加載,預製類庫和初 始化的操作。如果系統需要一個新的虛擬機實例,它會迅速複製自身,以最快的訴據提供給系統。對於一些只讀的系統庫,所有虛擬機實例都和Zygote共享一 塊內存區域

三、Dalvik VM 和ART的比較

   什麼是Dalvik:
    Dalvik是Google公司自己設計用於Android平臺的Java虛擬機。Dalvik虛擬機是Google等廠商合作開發的Android移動設備平臺的核心組成部分之一。它可以支持已轉換爲 .dex(即Dalvik Executable)格式的Java應用程序的運行,.dex格式是專爲Dalvik設計的一種壓縮格式,適合內存和處理器速度有限的系統。Dalvik 經過優化,允許在有限的內存中同時運行多個虛擬機的實例,並且每一個Dalvik 應用作爲一個獨立的Linux 進程執行。獨立的進程可以防止在虛擬機崩潰的時候所有程序都被關閉。

   什麼是ART:
    Android操作系統已經成熟,Google的Android團隊開始將注意力轉向一些底層組件,其中之一是負責應用程序運行的Dalvik運行時。Google開發者已經花了兩年時間開發更快執行效率更高更省電的替代ART運行時。 ART代表Android Runtime,其處理應用程序執行的方式完全不同於Dalvik,Dalvik是依靠一個Just-In-Time (JIT)編譯器去解釋字節碼。開發者編譯後的應用代碼需要通過一個解釋器在用戶的設備上運行,這一機制並不高效,但讓應用能更容易在不同硬件和架構上運 行。ART則完全改變了這套做法,在應用安裝時就預編譯字節碼到機器語言,這一機制叫Ahead-Of-Time (AOT)編譯。在移除解釋代碼這一過程後,應用程序執行將更有效率,啓動更快。

 

ART優點:
1、系統性能的顯著提升。
2、應用啓動更快、運行更快、體驗更流暢、觸感反饋更及時。
3、更長的電池續航能力。

4、支持更低的硬件。

ART缺點:
1、更大的存儲空間佔用,可能會增加10%-20%。
2、更長的應用安裝時間。

總的來說ART的功效就是“空間換時間”。


發佈了20 篇原創文章 · 獲贊 6 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章