1. 程式人生 > >Android與ios對比之系統架構層

Android與ios對比之系統架構層

1.  引言

自iPhone在07年初次登臺將智慧手機直接帶向移動互聯時代後,一方面智慧手機普及率直線上升,另一方面整個市場目前呈現了iPhone與Android手機兩強爭霸的局面。

iOS是由蘋果公司開發的手持裝置作業系統。最初是設計給iPhone使用的,後來陸續套用到iPod touchiPad以及Apple TV等蘋果產品上。它也是以Darwin為基礎的,因此同樣屬於類Unix的商業作業系統。

Android是一種以Linux為基礎的開放原始碼作業系統,主要使用於便攜裝置。。Android作業系統最初由Andy Rubin開發,最初主要支援手機。2005年由Google收購注資,並拉攏多家制造商組成開放手機聯盟開發改良,逐漸擴充套件到到平板電腦及其他領域上。 至目前為止,android躍居全球最受歡迎的智慧手機平臺。

在行動式裝置領域,ios和android分別的優勢和劣勢也日益明顯。

2.   Android與IOS系統架構對比

2.1  Android系統架構

Android系統架構為四層結構,從上層到下層分別是應用程式層、應用程式框架層、系統執行庫層以及Linux核心層,見圖2.1分別介紹如下:

Android與ios對比

1)應用程式層

Android平臺不僅僅是作業系統,也包含了許多應用程式,諸如SMS簡訊客戶端程式、電話撥號程式、圖片瀏覽器、Web瀏覽器等應用程式。這些應用程式都是用Java語言編寫的,並且這些應用程式都是可以被開發人員開發的其他應用程式所替換,這點不同於其他手機作業系統固化在系統內部的系統軟體,更加靈活和個性化。

2)應用程式框架層

         應用程式框架層是我們從事Android開發的基礎,很多核心應用程式也是通過這一層來實現其核心功能的,該層簡化了元件的重用,開發人員可以直接使用其提供的元件來進行快速的應用程式開發,也可以通過繼承而實現個性化的拓展。

a) Activity 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核心的基礎上修改而成。為了適應嵌入式硬體環境和移動應用程式的開發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.

Android與ios對比

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的體系架構相對較為傳統,但執行效率高,對硬體的要求低,成本優勢大,在現有的硬體條件下,應用執行具有最好的順暢感,也更加省電。系統架構樸實無華,但乾淨清晰,是目前最有效率的移動裝置作業系統。