標籤:
iOS是基於UNIX核心,Android是基於Linux核心,iOS和android作為兩款優秀的手機作業系統,他們有共性有區別。
iOS的系統架構
分為四個層次:
核心作業系統層(Core OS layer)
核心服務層(Core Services layer)
媒體層(Media layer)
可觸摸層(Cocoa Touch layer)
如下如所示:
iOS系統架構解析:
1、Core OS是位於iOS系統架構最下面的一層是核心作業系統層,它包括記憶體管理、檔案系統、電源管理以及一些其他的作業系統任務。它可以直接和硬體裝置進行互動。作為app開發人員不需要與這一層打交道。
2、Core Services是核心服務層,可以通過它來訪問iOS的一些服務。
3、Media是媒體層,通過它我們可以在應用程式中使用各種媒體檔案,進行音頻與視頻的錄製,圖形的繪製,以及製作基礎的動畫效果。
4、Cocoa Touch是可觸摸層,這一層為我們的應用程式開發提供了各種有用的架構,並且大部分與使用者介面有關,本質上來說它負責使用者在iOS裝置上的觸摸互動操作。
Android的系統架構
android的系統架構和其作業系統一樣,採用了分層的架構。
從架構圖看,android分為四個層,從高層到低層分別是
應用程式層(Applications)
應用程式架構層(Application Framework)
系統運行庫層 (Libraries and Android runtime)
linux核心層 (Linux Kernel)
如所示:
Android系統架構解析:
1> Linux核心層
Android以Linux作業系統核心為基礎,藉助Linux核心服務實現硬體裝置驅動,進程和記憶體管理,網路通訊協定棧,電源管理,無線通訊等核心功能。Android4.0版本之前基於Linux2.6系列核心,4.0及之後的版本使用更新的Linux3.X核心,並且兩個開源項目開始有了互連。Linux3.3核心中正式包括一些Android代碼,可以直接引導進入Android。Linux3.4將會增添電源管理等更多功能,以增加與Android的硬體相容性,使Android在更多裝置上得到支援。
Android核心 對Linux核心進行了增強,增加了一些面向移動計算的特有功能。例如,低記憶體管理器LMK(Low Memory Keller),匿名共用記憶體(Ashmem),以及輕量級的處理序間通訊Binder機制等。這些核心的增強使Android在繼承Linux核心安全機制的同時,進一步提升了記憶體管理,處理序間通訊等方面的安全性。下表列舉了Android核心的主要驅動模組:
驅動名稱說明
Android電源管理(Power Ma nagement)
針對嵌入式裝置的,基於標準Linux電源管理系統的,輕量級的電源管理驅動
低記憶體管理器(Low Memory Keller)
可以根據需要殺死進程來釋放需要的記憶體。擴充了Linux的OOM機制,形成獨特的LMK機制
匿名共用記憶體(Ashmem)
為進程之間提供共用記憶體資源,同時為核心提供回收和管理記憶體的機制
日誌(Android Logger)
一個輕量級的日誌裝置
定時器(Anroid Alarm)
提供了一個定時器用於把裝置從睡眠狀態喚醒
實體記憶體映射管理(Android PMEM)
DSP及其他裝置只能工作在連續的實體記憶體上,PMEM用於向使用者空間提供 連續的實體記憶體區域對應
Android定時裝置(Android Timed device)
可以執行對裝置的定時控制功能
Yaffs2檔案系統
Android採用大容量的NAND快閃記憶體作為存放裝置,使用Yaffs2作為檔案系統管理大容量MTD NAND Flash;Yaffs2佔用記憶體小,記憶體回收簡潔迅速。
Android Paranoid網路
對Linux核心的網路代碼進行了改動,增加了網路認證機制。可在IPV4,IPV6和藍芽中設定,由ANDROID_PARANOID_NETWORK宏來啟用此特性。
2> 系統運行庫層
官方的系統架構圖中,位於Linux核心層之上的系統運行庫層是應用程式架構的支撐,為Android系統中的各個組件提供服務。系統運行庫層由系統類別庫和Android運行時構成。
- 系統類別庫
系統類別庫大部分由C/C++編寫,所提供的功能通過Android應用程式架構為開發人員所使用。主要的系統類別庫及說明如下表:
系統類別庫名稱說明
Surface Manager
執行多個應用程式時,管理子系統的顯示,另外也對2D和3D圖形提供支援
Media Framework
基於PacketVideoOpenCore的多媒體庫,支援多種常用的音頻和視頻格式的錄製和回放,所支援的編碼格式包括MPEG4,MP3,H264,AAC,ARM
SQLite
本地小型關聯式資料庫,Android提供了一些新的SQLite資料庫API,以替代傳統的耗費資源的JDBC API
OpenGL|ES
基於OpenGL ES 1.0API標準實現的3D跨平台圖形庫
FreeType
用於顯示位元影像和向量字型
WebKit
Web瀏覽器的軟體引擎
SGL
底層的2D圖形引擎
Libc(bionic l ibc)
繼承自BSD的C函數庫bionic libc,更適合基於嵌入式Linux的行動裝置
SSL
安全套接層,是為網路通訊提供安全及資料完整性的一種安全性通訊協定
除上表列舉的主要系統類別庫之外,Android NDK(Native Development Kit),即Android原生庫,也十分重要。NDK為開發人員提供了直接使用Android系統資源,並採用C或C++語言編寫程式的介面。因此,第三方應用程式可以不依賴於Dalvik虛擬機器進行開發。實際上,NDK提供了一系列從C或C++產生原生代碼所需要的工具,為開發人員快速開發C或C++的動態庫提供方便,並能自動將產生的動態庫和java應用程式一起打包成應用程式套件組合檔案,即.apk檔案。
注意,使用原生庫無法訪問應用程式框架層API,相容性可能無法保障。而且從安全性角度考慮,Android原生庫用非型別安全的程式語言C,C++編寫,更容易產生安全性漏洞,原生庫的缺陷(bug)也可能更容易直接影響應用程式的安全性。
- 運行時
Android運行時包含核心庫和Dalvik虛擬機器兩部分。
核心庫:核心庫提供了Java5 se API的多數功能,並提供Android的核心API,如android.os,android.net,android.media等。
Dalvik虛擬機器:Dalvik虛擬機器是基於apache的java虛擬機器,並被改進以適應低記憶體,低處理器速度的行動裝置環境。Dalvik虛擬機器依賴於Linux核心,實現進程隔離與線程調試管理,安全和異常管理,記憶體回收等重要功能。
本質而言,Dalvik虛擬機器並非傳統意義上的java虛擬機器(JVM)。Dalvik虛擬機器不僅不按照Java虛擬機器的規範來實現,而且兩者不相容。
Dalvik和標準Java虛擬機器有以下主要區別:
Dalvik基於寄存器,而JVM基於棧。一般認為,基於寄存器的實現雖然更多依賴於具體的CPU結構,硬體通用性稍差,但其使用等長指令,在效率速度上較傳統JVM更有優勢。
Dalvik經過最佳化,允許在有限的記憶體中同時高效地運行多個虛擬機器的執行個體,並且每一個Dalvik應用作為一個獨立的Linux進程執行,都擁有一個獨立的Dalvik虛擬機器執行個體。Android這種基於Linux的進程“沙箱”機制,是整個安全設計的基礎之一。
Dalvik虛擬機器從DEX(Dalvik Executable)格式的檔案中讀取指令與資料,進行解釋運行。DEX檔案由傳統的,編譯產生的CLASS檔案,經dx工具軟體處理後產生。
Dalvik的DEX檔案還可以進一步最佳化,提高運行效能。通常,OEM的應用程式可以在系統編譯後,直接產生最佳化檔案(.ODEX); 第三方的應用程式則可在運行時在緩衝中最佳化與儲存,最佳化後的格式為DEY(.dey檔案)。
3> 應用程式架構層
應用程式架構層提供開發Android應用程式所需的一系列類庫,使開發人員可以進行快速的應用程式開發,方便重用組件,也可以通過繼承實現個人化的擴充。具體包括的模組如表:
應用程式架構層類庫名稱功能如下:
Active Manager(Activity Mananger)
管理各個應用程式生命週期並提供常用的導航回退功能,為所有程式的視窗提供互動的介面
視窗管理器(Window Manager)
對所有開啟的視窗程序進行管理
內容提供器(Content Provider)
提供一個應用程式訪問另一個應用程式資料的功能,或者實現應用程式之間的資料共用
視圖系統(View System)
建立應用程式的基本組件,包括列表(lists),網格(grids),文字框(text boxes),按鈕(buttons),還有可嵌入的web瀏覽器。
通知管理器(Notification Manager)
使應用程式可以在狀態列中顯示自訂的客戶提示資訊
包管理器(Package Manager)
對應用程式進行管理,提供的功能諸如安裝應用程式,卸載應用程式,查詢相關許可權資訊等。
資源管理員(Resource Manager)
提供各種非代碼資源供應用程式使用,如本地化字串,圖片,音頻等
位置管理器(Location Manager)
提供位置服務
電話管理器(Telephony Manager)
管理所有的行動裝置功能
XMPP服務
是Google線上即時交流軟體中一個通用的進程,提供後台推送服務
4>應用程式層
Android平台的應用程式層上包括各類與使用者直接互動的應用程式,或由java語言編寫的運行於背景服務程式。例如,智能手機上實現的常見準系統 程式,諸如SMS簡訊,電話撥號,圖片瀏覽器,日曆,遊戲,地圖,web瀏覽器等程式,以及開發人員開發的其他應用程式。
iOS vs Android 系統架構