Android 系統內核層與 Linux Kernel 的比較

Android 內核具備和標準 Linux 內核同樣的功能,主要實現了內存管理、進程調度、進程間通訊等功能。但在文件系統、進程間通訊、內存管理等方面存在差別。程序員

一、文件系統。移動設備採用的大多不是硬盤而是 Flash 做爲存儲介質,所以,Android 內核中增長了標準 Linux 專用於 Flash 的文件系統 YAFFS2(Yet Another Flash File System 2)。YAFFS2 是基於 NAND flash 日誌結構的文件系統,提供了損耗平衡掉電保護,能夠有效地避免意外斷電對文件系統一致性和完整性的影響。YAFFS2 性能比支持 NOR 型閃存的 JFFS2(Journalling Flash File System Version 2, 閃存日誌型文件系統第2版)文件系統更加優秀。框架

二、進程間通訊機制。Android 增長了一種進程間的通訊機制 IPC Binder。Binder 經過守護進程 Service Manager 管理系統中的服務,負責進程間的數據交換。各進程經過 Binder 訪問同一塊共享內存,以達到數據通訊的機制。從應用層的角度看,進程經過訪問數據守護進程獲取用於數據交換的程序框架接口,調用並經過接口共享數據,而其餘進程要訪問數據,也只需與程序框架接口進行交互,方便了程序員開發須要交互數據的應用程序。性能

三、內存管理。Android 內核採用了一種不一樣於標準 Linux 內核的低內存管理策略。Android 系統採用的是 LMK(Low Memory Killer) 機制,這種機制將進程按照重要性進行分級、分組,內存不足時,將處於最低級別組的進程關閉,保證系統是穩定運行的。同時,Android 新增長了一種內存共享的處理方式 Ashmem(Anonymous Shared Memory,匿名共享內存)。經過 Ashmem,進程間能夠匿名自由共享具名的內存塊,這種共享方式在標準 Linux 當中也是不被支持的。spa

   在系統類庫層(Libraries)的 Surface Manage 模塊負責管理顯示與存儲之間的互動,以及對 2D 繪圖和 3D 繪圖進行顯示上的合成。Android 中的圖形系統實際上採用的是C/S 結構,Client 端就是應用程序,而 Service 端是 Surface Flinger,Client 經過 Binder 向 Server 端的 Surface Flinger 傳輸圖像數據,最終由 Surface Flinger 合成到Frame Buffer 中,而後再屏幕上顯示出來。日誌

四、電源管理。不一樣於標準 Linux 內核,Android 採用的是一種較爲簡單的電源管理策略,經過開關屏幕、開關屏幕背光、開關鍵盤背光、開關按鈕背光和調整屏幕亮度來實現電源管理,並無實現休眠待機功能。目前經過三種途徑來判斷電源管理策略:RPC 調用電池狀態改變電源設置。系統經過廣播 Intent 或直接調用 API 的方式來與其餘模塊進行聯繫。電源管理策略同時還有自動關機機制,當電力低於最低可接受程度時,系統將自動關機。另外,Android 的電源管理模塊還會根據用戶行爲自動調整屏幕亮度。接口

五、驅動及其餘。相對於標準內核,Android 內核還添加了字符輸出設備圖像顯示設備鍵盤輸入設備RTC 設備USB Device 設備等相關設備驅動,增長了日誌系統,使應用程序能夠訪問日誌消息,使開發人員得到更大的自由。進程

 

【參考文獻】內存

《Android 和 PHP 開發最佳實踐》 第2版開發

相關文章
相關標籤/搜索