1. 引言
自iPhone在07年初次登台將智能手機直接帶向移動互聯時代後,一方面智能手機普及率直線上升,另一方面整個市場目前呈現了iPhone與Android手機兩強爭霸的局面。
iOS是由蘋果公司開發的手持功能作業系統。最初是設計給iPhone使用的,後來陸續套用到iPod touch、iPad以及Apple TV等蘋果產品上。它也是以Darwin為基礎的,因此同樣屬於類Unix的商業作業系統。
Android是一種以Linux為基礎的開放源碼作業系統,主要使用於可攜式裝置。。Android作業系統最初由Andy Rubin開發,最初主要支援手機。2005年由Google收購注資,並拉攏多家製造商組成開放手機聯盟開發改良,逐漸擴充到到平板電腦及其他領域上。 至目前為止,android躍居全球最受歡迎的智能手機平台。
在攜帶型裝置領域,ios和android分別的優勢和劣勢也日益明顯。 2. Android與IOS系統架構對比 2.1 Android系統架構
Android系統架構為四層結構,從上層到下層分別是應用程式層、應用程式架構層、系統運行庫層以及Linux核心層,見圖2.1分別介紹如下:
1)應用程式層
Android平台不僅僅是作業系統,也包含了許多應用程式,諸如SMS簡訊用戶端程式、電話撥號程式、圖片瀏覽器、Web瀏覽器等應用程式。這些應用程式都是用Java語言編寫的,並且這些應用程式都是可以被開發人員開發的其他應用程式所替換,這點不同於其他手機作業系統固化在系統內部的系統軟體,更加靈活和個人化。
2)應用程式架構層
應用程式架構層是我們從事Android開發的基礎,很多核心應用程式也是通過這一層來實現其核心功能的,該層簡化了組件的重用,開發人員可以直接使用其提供的組件來進行快速的應用程式開發,也可以通過繼承而實現個人化的拓展。
a) Activity Manager(Active Manager)
管理各個應用程式生命週期以及通常的導航回退功能
b) Window Manager(視窗管理器)
管理所有的視窗程序
c) Content Provider(內容提供器)
使得不同應用程式之間存取或者分享資料
d) View System(視圖系統)
構建應用程式的基本組件
e) Notification Manager(通告管理器)
使得應用程式可以在狀態列中顯示自訂的提示資訊
f) Package Manager(包管理器)
Android系統內的程式管理
g)Telephony Manager(電話管理器)
管理所有的行動裝置功能
h)Resource Manager(資源管理員)
提供應用程式使用的各種非代碼資源,如本地化字串、圖片、布局檔案、顏色檔案等
i)Location Manager(位置管理器)
提供位置服務
j)XMPP Service(XMPP服務)
提供Google Talk服務
3)系統運行庫層
從圖中可以看出,系統運行庫層可以分成兩部分,分別是系統庫和Android運行時,分別介紹如下:
a)系統庫
系統庫是應用程式架構的支撐,是串連應用程式架構層與Linux核心層的重要紐帶。其主要分為如下幾個:
Surface Manager:
執行多個應用程式時候,負責管理顯示與存取操作間的互動,另外也負責2D繪圖與3D繪圖進行顯示合成。
Media Framework:
多媒體庫,基於PacketVideo OpenCore;支援多種常用的音頻、視頻格式錄製和回放,編碼格式包括MPEG4、MP3、H.264、AAC、ARM。
SQLite:
小型的關係型資料庫引擎
OpenGL|ES:
根據OpenGL ES 1.0API標準實現的3D繪圖函數庫
FreeType:
提供點陣字與向量字的描繪與顯示
WebKit:
一套網頁瀏覽器的軟體引擎
SGL:
底層的2D圖形渲染引擎
SSL:
在Andorid上通訊過程中實現握手
Libc:
從BSD繼承來的標準C系統函數庫,專門為基於embedded linux的裝置定製
b)Android運行時
Android應用程式時採用Java語言編寫,程式在Android運行時中執行,其運行時分為核心庫和Dalvik虛擬機器兩部分。
核心庫:
核心庫提供了Java語言API中的大多數功能,同時也包含了Android的一些核心API,如android.os、android.net、android.media等等。
Dalvik虛擬機器:
Android程式不同於J2me程式,每個Android應用程式都有一個專有的進程,並且不是多個程式運行在一個虛擬機器中,而是每個Android程式都有一個Dalivik虛擬機器的執行個體,並在該執行個體中執行。Dalvik虛擬機器是一種基於寄存器的Java虛擬機器,而不是傳統的基於棧的虛擬機器,並進行了記憶體資源使用的最佳化以及支援多個虛擬機器的特點。需要注意的是,Android程式在虛擬機器中執行的並非編譯後的位元組碼,而是通過轉換工具dx將Java位元組碼轉成dex格式的中間碼。
4)Linux核心層
Android是基於Linux2.6核心,其核心系統服務如安全性、記憶體管理、進程管理、網路協議以及驅動模型都依賴於Linux核心。
Android核心分析
一、 核心在作業系統中的地位Android基於Linux作業系統由硬體、系統核心、系統服務和應用程式等四大部分組成。其中核心是核心的部分,其主要作用在於與電腦硬體進行互動實現對硬體的編程式控制制和介面操作調度訪問硬體資源同時嚮應用程式提供一個進階的執行環境和對硬體的虛擬介面。主要功能包括中斷服務程式、進程發送器、進程地址空間的記憶體管理、處理序間通訊。核心與普通應用程式不同,其擁有所有硬體裝置的存取權限以及啟動時即劃分的受保護的記憶體空間。
二、Android核心和標準的Linux核心一樣,Android核心主要實現記憶體管理、進程調度、處理序間通訊等功能。Android核心是在標準Linux核心的基礎上修改而成。為了適應嵌入式硬體環境和行動裝置 App程式的開發Android對標準Linux核心進行了一定的修改。經過與標準Linux核心原始碼進行詳細對比可以發現Android核心與標準Linux核心在檔案系統、處理序間通訊機制、記憶體管理等方面存在不同。
檔案系統不同於案頭系統與伺服器行動裝置大多採用的不是硬碟而是採用Flash作為儲存介質,因此Android核心中增加了標準Linux核心中沒有採納的YAFFS2檔案系統。YAFFS2按階層設計分為檔案管理介面、內部實現層和NAND簡化了其本身與系統的介面設計能更方便地整合到系統當中。
處理序間通訊機制Android增加了一種進程間的通訊機制IPCBinder,Binder通過守護進程ServiceManager管理系統中的服務,負責進程間的資料交換。各進程通過Binder訪問同一塊共用記憶體以達到資料通訊的機制。從應用程式層的角度看進程通過訪問資料守護進程擷取用於資料交換的程式架構介面,調用並通過介面共用資料,而其他進程要訪問資料也只需與程式架構介面進行互動方便了程式員開發需要互動資料的應用程式。
記憶體管理在記憶體管理模組Android核心採用了一種不用於標準Linux核心的低記憶體管理原則。在標準Linux核心當中使用一種叫做OOM(OutofMemory)的低記憶體管理原則,當記憶體不足時系統檢查所有的進程並對進程進行限制評分獲得最高分的進程將被關閉。Android新增加了一種記憶體共用的處理方式Ashmem。通過Ashmem進程間可以匿名自由共用具名的記憶體塊這種共用方式在標準Linux當中不被支援。經過分析Android核心由標準Linux核心修改而來,因此繼承了Linux核心的各種優點保留了標準Linux核心的主體架構。同時Android按照行動裝置的需求在檔案系統、記憶體管理、處理序間通訊機制、電源管理等方面進行了修改添加相關的驅動程式和一些必要的新功能,但是與大多數精簡的嵌入式Linux作業系統相比Android很大程度上保留了標準Linux的基本架構,因此Android系統應用範圍更加廣泛拓展性更強。
2.2 IOS系統架構
ios的系統架構分為四個層次:核心作業系統層(core OS layer)、核心服務層(Core Service layer)、媒體層(Media layer)和可觸摸層(Cocoa Touch layer),見圖2.2.
1. Core OS:
是用FreeBSD和Mach所改寫的Darwin, 是開源、符合POSIX標準的一個Unix核心。這一層包含或者說是提供了整個iPhone OS的一些基礎功能,比如:硬體驅動, 記憶體管理,程式管理,線程管理(POSIX),檔案系統,網路(BSD Socket),以及標準輸入輸出等等,所有這些功能都會通過C語言的API來提供。另外,值得一題的是,這一層最具有UNIX色彩,如果你需要把 UNIX上所開發的程式移植到iPhone上,多半都會使用到Core OS的API.
核心OS層的驅動也提供了硬體和系統架構之間的介面。然而,由於安全的考慮,只有有限的系統架構類能訪問核心和驅動。
2. Core Services:
Core Services在Core OS基礎上提供了更為豐富的功能, 它包含了Foundation.Framework和Core Foundation.Framework, 之所以叫Foundation ,就是因為它提供了一系列處理字串,排列,組合,日曆,時間等等的準系統。Foundation是屬於Objective-C的API,Core Fundation是屬於C的API。另外Core servieces還提供了其他的功能,比如:
Security, Core Location, SQLite, 和Address Book. 其中Security是用來處理認證,密碼管理,按安全性管理的; Core Location是用來處理GPS定位的;SQLLite是輕量級的資料庫,而AddressBook則用來處理電話薄資料的。
3. Media
Media層提供了圖片,音樂,影片等多媒體功能。映像分為2D映像和3D映像, 前者由Quartz2D來支援,後者則是用OpenglES.與音樂對應的模組是Core Audio和OpenAL, Media Player 實現了影片的播放, 而最後還提供了Core Animation來對強大動畫的支援。
4. Cocoa Touch
最上面一層是Cocoa Touch,它是Objective-C的API, 其中最核心的部分是UIKit.Framework,應用程式介面上的各種組件,全是由它來提供呈現的,除此之外它還負責處理螢幕上的多點觸摸事件,文字的輸出,圖片,網頁的顯示,相機或檔案的存取,以及加速感應的部分等。 2.3 Android與ios在系統架構上的對比:
Android採用的是Java技術,所有應用在Dalvik虛擬機器中運行,Dalvik是google專門為行動裝置最佳化的Java虛擬機器。因此Android具有成熟,存在大量可重用代碼的優點,也有占記憶體大,運行速度略低的缺點。 而Apple IOS的體系架構相對較為傳統,但運行效率高,對硬體的要求低,成本優勢大,在現有的硬體條件下,應用運行具有最好的順暢感,也更加省電。系統架構樸實無華,但乾淨清晰,是目前最有效率的行動裝置作業系統。