標籤:
Android 核心具有和標準 Linux 核心一樣的功能,主要實現了記憶體管理、進程調度、處理序間通訊等功能。但在檔案系統、處理序間通訊、記憶體管理等方面存在差異。
1、檔案系統。行動裝置採用的大多不是硬碟而是 Flash 作為儲存介質,因此,Android 核心中增加了標準 Linux 專用於 Flash 的檔案系統 YAFFS2(Yet Another Flash File System)。YAFFS2 是基於 NAND flash 日誌結構的檔案系統,提供了損耗平衡和掉電保護,可以有效地避免意外斷電對檔案系統一致性和完整性的影響。YAFFS2 效能比支援 NOR 型快閃記憶體的 JFFS2(Journalling Flash File System Version 2,快閃記憶體日誌型檔案系統第2版)檔案系統更加優秀。
2、處理序間通訊機制。Android 增加了一種進程間的通訊機制 IPC Binder。Binder 通過守護進程 Service Manager 管理系統中的服務,負責進程間的資料交換。各進程通過 Binder 訪問同一塊共用記憶體,以達到資料通訊的機制。從應用程式層的角度看,進程通過訪問資料守護進程擷取用於資料交換的程式架構介面,調用並通過介面共用資料,而其他進程要訪問資料,也只需與程式架構介面進行互動,方便了程式員開發需要互動資料的應用程式。
3、記憶體管理。Android 核心採用了一種不同於標準 Linux 核心的低記憶體管理原則。Android 系統採用的是 LMK(Low Memory Killer) 機制,這種機制將進程按照重要性進行分級、分組,記憶體不足時,將處於最低層級組的進程關閉,保證系統是穩定啟動並執行。同時,Android 新增加了一種記憶體共用的處理方式 Ashmem(Anonymous Shared Memory,匿名共用記憶體)。通過 Ashmem,進程間可以匿名自由共用具名的記憶體塊,這種共用方式在標準 Linux 當中也是不被支援的。
在系統類別庫層(Libraries)的 Surface Manage 模組負責管理顯示與儲存之間的互動,以及對 2D 繪圖和 3D 繪圖進行顯示上的合成。Android 中的圖形系統實際上採用的是C/S 結構,Client 端就是應用程式,而 Service 端是 Surface Flinger,Client 通過 Binder 向 Server 端的 Surface Flinger 傳輸映像資料,最終由 Surface Flinger 合成到Frame Buffer 中,然後再螢幕上顯示出來。
4、電源管理。不同於標準 Linux 核心,Android 採用的是一種較為簡單的電源管理策略,通過開關螢幕、開關螢幕背光、開關鍵盤背光、開關按鈕背光和調整螢幕亮度來實現電源管理,並沒有實現休眠和待機功能。目前通過三種途徑來判斷電源管理策略:RPC 調用、電池狀態改變和電源設定。系統通過廣播 Intent 或直接調用 API 的方式來與其他模組進行聯絡。電源管理策略同時還有自動關機機制,當電力低於最低可接受程度時,系統將自動關機。另外,Android 的電源管理模組還會根據使用者行為自動調整螢幕亮度。
5、驅動及其他。相對於標準核心,Android 核心還添加了字元輸出裝置、映像顯示裝置、鍵盤輸入裝置、RTC 裝置、USB Device 裝置等相關裝置驅動,增加了日誌系統,使應用程式可以訪問日誌訊息,使開發人員獲得更大的自由。
【參考文獻】
《Android 和 PHP 開發最佳實務》 第2版
Android 系統核心層(Linux Kernel)