91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Android系統架構的演變歷程是怎樣的

發布時間:2022-01-11 13:54:05 來源:億速云 閱讀:271 作者:柒染 欄目:編程語言

Android系統架構的演變歷程是怎樣的,相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。

Android是一種以LinuxJAVA為基礎的開放源代碼操作系統。Android分為應用層、應用框架層、系統運行庫層和Linux內核層。今天大家一起來大致回顧一下Android 系統架構的演變歷程。

一、androidlinux內核

 

Android是基于Linux內核的操作系統,但是它與Linux之間還是有很大的差別,比如AndroidLinux內核的基礎上添加了自己所特有的驅動程序。Android為什么會選擇Linux?

 

1、強大的內存管理和進程管理方案

 

2、基于權限的安全模式

 

3、支持共享庫

 

4、經過認證的驅動模型

 

5Linux本身就是開源項目

 

Androidlinux系統的改動主要有

1)它沒有glibc支持

 

由于Android最初用于一些便攜的移動設備上,所以,可能出于效率等方面的考慮,Android并沒有采用glibc作為C庫,而是Google自己開發了一套Bionic Libc來代替glibc

 

2)它并不包括一整套標準的Linux使用程序

 

Android并沒有完全照搬Liunx系統的內核,除了修正部分LiunxBug之外,還增加了不少內容,比如:它基于ARM構架增加的Gold-Fish平臺,以及yaffs2 FLASH文件系統(如果學習了嵌入式的話就會知道yaffs2 FLASH文件系統已經在基于linux的很多嵌入式設備上采用了,技術已經非常成熟)等。它沒有本地基于X服務的窗口系統。什么是本地窗口系統呢?本地窗口系統是指GNU/Linux上的X窗口系統,或者Mac OX XQuartz等。不同的操作系統的窗口系統可能不一樣,Android并沒有使用(也不需要使用)LinuxX窗口系統。

 

3Android專有的驅動程序

 

除了上面這些不同點之外,最重要的是,為了突出android特性,支持android設備,Android還對Linux設備驅動進行了增強,主要如下所示。

 

aAndroid Binder 基于OpenBinder框架的一個驅動,用于提供 Android平臺的進程間通信(InterProcessCommunicationIPC)功能。源代碼位于drivers/staging/android/binder.c

 

bAndroid電源管理(PM) 一個基于標準Linux電源管理系統的輕量級Android電源管理驅動,針對嵌入式設備做了很多優化。源代碼位于:

 

kernel/power/earlysuspend.c

 

kernel/power/consoleearlysuspend.c

 

kernel/power/fbearlysuspend.c

 

kernel/power/wakelock.c

 

kernel/power/userwakelock.c

 

c、低內存管理器(Low Memory Killer) Linux的標準的OOM(Out Of Memory)機制更加靈活,它可以根據需要殺死進程以釋放需要的內存。源代碼位于 drivers/staging/ android/lowmemorykiller.c

 

d、匿名共享內存(Ashmem) 為進程間提供大塊共享內存,同時為內核提供回收和管理這個內存的機制。源代碼位于mm/ashmem.c

 

eAndroid PMEM(Physical) PMEM用于向用戶空間提供連續的物理內存區域,DSP和某些設備只能工作在連續的物理內存上。源代碼位于drivers/misc/pmem.c

 

fAndroid Logger 一個輕量級的日志設備,用于抓取Android系統的各種日志。源代碼位于drivers/staging/android/logger.c

 

gAndroid Alarm 提供了一個定時器,用于把設備從睡眠狀態喚醒,同時它還提供了一個即使在設備睡眠時也會運行的時鐘基準。源代碼位于drivers/rtc/alarm.c

 

hUSB Gadget驅動 一個基于標準 Linux USB gadget驅動框架的設備驅動,AndroidUSB驅動是基于gaeget框架的。源代碼位于drivers/usb/gadget/

 

iAndroid Ram Console 為了提供調試功能,Android允許將調試日志信息寫入一個被稱為RAM Console的設備里,它是一個基于RAMBuffer。源代碼位于drivers/staging/android / ram_console.c

 

jAndroid timed device 提供了對設備進行定時控制的功能,目前支持vibratorLED設備。源代碼位于drivers/staging/android /timed_output.c(timed_gpio.c)

 

kYaffs2 文件系統 Android采用Yaffs2作為MTD nand flash文件系統,源代碼位于fs/yaffs2/目錄下。Yaffs2是一個快速穩定的應用于NANDNOR Flash的跨平臺的嵌入式設備文件系統,同其他Flash文件系統相比,Yaffs2能使用更小的內存來保存其運行狀態,因此它占用內存小。Yaffs2的垃圾回收非常簡單而且快速,因此能表現出更好的性能。Yaffs2在大容量的NAND Flash上的性能表現尤為突出,非常適合大容量的Flash存儲。

 

二、最新的Android系統分為五層六區(域)

 

1Linux內核層(Linux Kernel):Android系統基于Linux2.6內核,這一層為Android設備各種硬件提供了底層驅動,如顯示驅動、音頻驅動、照相機驅動、藍牙驅動、Wi-Fi驅動、電源管理等;

 

2、硬件抽象層(android hardware abstraction layer):安卓驅動硬件的方式與Linux不盡相同。傳統Linux的驅動完全存活于內核空間。Android則在內核外部增加了硬件抽象層(HAL, Hardware Abstraction Layer) ,把一部分驅動功能放到HAL層中。安卓為什么費盡麻煩增加一個HAL呢?為了保護源代碼。Linux內核采用了GPL協議,所以硬件生產商想要支持Linux系統,必須遵照GPL協議公開硬件驅動的源代碼。但這些源代碼中包含有許多硬件的設計信息,牽涉到硬件生產商的核心利益。而增加了HAL層之后,硬件廠商就不需要開放所有的驅動代碼了。

 

3、系統運行庫層(libraries):這一層通過一些C/C++庫(so庫)來為Android系統提供了主要的特性支持。如SQLite庫提供了數據庫支持,OpenGL ES庫提供了3D繪圖支持,Webkit庫提供了瀏覽器內核支持等;

 

4、應用框架層(application framework):這一層主要提供構建應用程序時可能用到的各種APIAndroid自帶的一些核心應用就是使用這些API完成的,開發者也可通過使用API來構建自己的應用程序;應用層(applications):這一層主要用于手機應用的安裝,如系統自帶聯系人、短信等程序,或是第三方應用程序。

 

以上為五層五區,還有一個區域是存在于libraries層的Android運行時庫(Android Runtime),它主要提供一些核心庫,能夠允許開發者使用Java語言來編寫Android應用。另外Android運行時庫中還包含了Dalvik虛擬機,它使得每一個Android應用都能運行在獨立的進程中,且擁有一個自己的Dalvik虛擬機實例。相較于Java虛擬機,Dalvik是專門為移動設備定制的,它針對手機內存、CPU性能有限等情況作了優化處理。 每個Android應用都運行在自己的進程上,享有Dalvik虛擬機為它分配的專有實例。為了支持多個虛擬機在同一設備上高效運行,dalvik被改寫過。Dalvik虛擬機執行的是Dalvik格式的可執行文件(.dex-該格式經過優化,以將內存好用降到最低。

 

三、Dalvik虛擬機 和代碼編譯

 

安卓的應用是由Java編寫的,而包括HAL在內的Linux的庫都是由C/C++編寫的,這個落差由Dalvik虛擬機銜接的。當一個應用運行時,進程空間內將包含一個Dalvik虛擬機。Java程序編譯為字節碼文件,運行在Dalvik虛擬機中。根據Java代碼中的要求,Dalvik通過JNI(Java Native Interface)調用底層的C/C++編寫的功能。JNI是從Java中調用C/C++模塊的接口。由于上層接口的標準化,字節碼可以暢通無阻的跨平臺運行。

 

Dalvik虛擬機內部是一個“虛擬”進程空間,有自己的棧和堆,管理代碼的運行流程。如果這以“虛擬”進程空間不足,Dalvik內建的垃圾回收(garbage collection)機制會自動清空堆上不再使用的對象。自動的垃圾回收簡化了程序員的工作,但速度較慢。手動內存管理效率高,但需要更多的編程,且容易犯錯。

 

Android4種文件類型Java,class,dex,apk

 

Class文件------Java編譯后的目標文件不像J2sejava編譯成class就可以直接運行,android平臺上class文件不能直接在android上運行。 由于Google使用了自己的Dalvik來運行應用, 所以這里的class也肯定不能在AndroidDalvikjava環境中運行, androidclass文件實際上只是編譯過程中的中間目標文件,需要鏈接成dex文件后才能在dalvik上運行

 

Dex文件-----Android平臺上的可執行文件Android虛擬機Dalvik支持的字節碼文件格式Google在新發布的Android平臺上使用了自己的Dalvik虛擬機來定義, 這種虛擬機執行的并非Java字節碼, 而是另一種字節碼: dex格式的字節碼。在編譯Java代碼之后,通過Android平臺上的工具可以將Java字節碼轉換成Dex字節碼。雖然GoogleDalvik是為了移動設備定做的,但是業界很多人認為這是為了規避向sun申請Javalicense。這個DalvikVM針對手機程式/CPU做過最佳化,可以同時執行許多VM而不會占用太多Resource

 

Apk文件-------Android上的安裝文件ApkAndroid安裝包的擴展名,一個Android安裝包包含了與某個Android應用程序相關的所有文件。apk文件將AndroidManifest.xml文件、應用程序代碼(.dex文件)、資源文件和其他文件打成一個壓縮包。一個工程只能打進一個.apk文件。

看完上述內容,你們掌握Android系統架構的演變歷程是怎樣的的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

信宜市| 米脂县| 黔西县| 江陵县| 姚安县| 安丘市| 西吉县| 江川县| 乐山市| 屯昌县| 松滋市| 吴江市| 饶阳县| 巴东县| 宝山区| 泸西县| 肇东市| 龙川县| 陆良县| 平乡县| 永济市| 灌南县| 东海县| 扬州市| 连江县| 汉沽区| 西吉县| 遂溪县| 江山市| 琼结县| 龙岩市| 灯塔市| 萨迦县| 绍兴市| 中西区| 淅川县| 神木县| 晋中市| 惠安县| 德钦县| 湾仔区|