<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    瘋狂

    STANDING ON THE SHOULDERS OF GIANTS
    posts - 481, comments - 486, trackbacks - 0, articles - 1
      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

    Android 系統架構

    Posted on 2009-11-04 16:21 瘋狂 閱讀(653) 評論(0)  編輯  收藏 所屬分類: android
    首先來一張現在大概已經很有名的圖片:

    由下到上,可以看到紅色的 kernel 層,綠色的系統函式庫,黃色的虛擬機器,以及藍色的 Java 程序代碼。以下將一一介紹。

    Linux kernel

    必也正名乎:一般所稱 Linux,其實是統稱,指根基在 Linux kernel 以及其它許多跟 kernel 不見得有關的軟件所組成的操作系統。最早,Linux 一詞其實是專指 kernel,它提供了系統底層與硬件間的基本平臺,讓其它程序可以在上頭執行。其最早作者是 Linus Torvalds,他用自己的名字,加上采用了與 Unix 系統兼容的接口,將自己的作品命名為 Linux

    如前所述,在 Linux kernel 上頭執行的程序,跟 kernel 本身不見得有關系。可以是自由軟件,也可以完全不是。把它加上一些自由軟件,例如基本的函式庫、工具、圖形接口,應用程序等等,所組成的一套完整操作系統,才是一般所稱的 Linux。為了避免誤解,而且也為了正確傳達自身的貢獻,自由軟件基金會建議大家稱呼這樣的一套操作系統為 GNU/Linux。其中的原因是,kernel 提供底層機制,但系統中重要的組件幾乎都是來自于 GNU,也就是自由軟件基金會。

    希望大家還沒被這些名詞搞混。要弄清這些不同的原因是,Android 是在 Linux kernel 上頭運作的,但他并不是 GNU/Linux。因為在一般 GNU/Linux 里面會有的東西,Android 很多都沒有。

    Linux kernel 的版權是 GNU General Public License version 2 (GPLv2),這又是什么玩意呢?GPLv2 是所謂的 Copyleft 版權,簡單來說,就是為了確保智慧財產能夠繼續公開流傳,所以任何基于此創作的延伸創作,都自動采用了相同版權。GPL本身還有個特色,就是「共同運作」也算是延伸的一部分,意思是說你的程序沒直接改GPL的程序代碼,但是連結了GPL的東西跟你的程序共同運作,那你的程序也必須采用GPL版權。

    舉例來講,假定今天某公司覺得某GPL軟件不錯,拿來改了改,放在自己的產品里頭拿出去賣,那某公司就一定要明確的一起散布修改后的程序代碼。如果沒有,那就是觸犯版權了。有個組織叫 GPL Violations,專門抓這種案例,國內公司如 D-Link 以及 ASUS 都上過榜。這下問題來了:如果你是硬件廠商,希望你的硬件能在 Linux kernel 下運作,那么就必須要有驅動程序。驅動程序就是按照硬件的規格寫的程序,用來告訴 kernel 怎么操作這個硬件。如果驅動程序的程序代碼公開,等于硬件規格也公開的差不多了。許多廠商不愿意這么做,所以就提供編好的驅動程序,但不提供原始碼。版權所有者,也就是 Linus Torvalds 以及其它許許多多的 kernel 作者們,為了支持盡可能多的硬件,對這種行為是采取睜一只眼閉一只眼的態度,也就是目前這種編譯好的驅動程序,算是處在灰色地帶。

    既然 Android 采用了 Linux kernel,當然得照游戲規矩來。但我們從前文可知,Android 的重點就是商業應用,他們可不愿意系統里有什么「灰色地帶」,于是采用了一些手法來繞過這問題。他們把驅動程序移到“userspace”,也就是說,把驅動程序變成在 Linux kernel 上頭跑,而不是一起跑的東西,這樣就可以避過GPL。然后,在 kernel 這邊開個小門,讓本來不能直接控制到硬件的“userspace”程序也可以碰得到,這樣只要把「開個小門」的程序代碼公布就行啦。事實上,目前因為 Android 已經發行,所以依法他們已經公開了對 kernel 的修改,其原始碼在 http://git.android.com/

    走筆至此,可以看出 Google 的原則之一“Do no evil”是很有意思的。他們自己的確承諾,而且也愿意公開 Android 的程序代碼,但是他們給了其它人“Do evil”的選擇。這樣還算不算是 Do no evil 呢?當作哲學問題吧。

    關于 Android kernel 的修改,Google 的簡報還提供了兩個重點:

    Binder (IPC):提供有效率的程序間溝通管道(Inter-Process Communication)Android 系統中有很多服務,而上層的應用程序經常要取用這些服務,一般的 Linux 系統已經提供了不少 IPC 的方式,不過 Android 還是搞了套自己的。雖說文件中解釋原因為「一般 IPC 會造成額外資源花費,以及安全問題」,但其實這些都是可以基于原有架構在 kernel 外頭解決的,為何要改在 kernel 里頭,筆者對此存疑,也只能等找時間去研究程序代碼才知了。
    Power Management:與桌上型計算機或筆記型計算機不同,手持裝置的電源一向相當有限,必須無所不用其極的去想辦法省電,但又不損及順暢的使用經驗。Android 在此采取了頗為積極的作法:「沒有人說要用,就關掉」。例如某程序在放 MP3 音樂,于是此程序會需要 CPU 的計算能力,那就得開口要。如果與此同時沒其它程序在執行,那么 LCD 顯示器就可能被關掉,藉以省電。另一特別處,是在于 Linux kernel 一般考慮的都是在計算機上的作法,所以多半只有進入暫停、休眠等等的選擇,而不會如此細致的去控制到各個小裝置的電源供應。
    系統函式庫

    這里說的系統函式庫是指“native libraries”,是跑在系統里頭的函式庫,采用的語言不是 Java,提供一些基礎建設。里頭有幾個值得一提的組件:

    Bionic:這是 Android 版的 libclibc GNU/Linux 以及其它類似 Unix 系統上最基礎的函式庫,一般最常用的是 glibc,就是 GNU 做的 libc。不然在比較小型的裝置上也可以用 uclibc。不論是 glibc or uclibc,版權都是LGPL (GPL 的略為弱化版)。看到這大概可以猜到了吧,又是 Copyleft 問題。官方的說法是,除了版權問題以外,還考慮必須輕量以及快速,所以才做了自己的 libc。不過輕量、快速,本來就是小型裝置用的 uclibc 一開始的目標,因此,最主要的恐怕還是版權問題。
    Webkit:鼎鼎大名的 Apple Safari 瀏覽器背后的引擎就是 WebkitAndroid 也包含進去了。離線使用的 html 配上 html 5 的一些新發展,產生了各種有趣的可能,這部分值得另文介紹,這里就不再贅述。
    Surface Flinger:提供把各種”surface”組合在一起的能力。在這里 surface 解釋為程序想要顯示在屏幕的東西,可能同一屏幕上有來自不同程序的內容,而這些內容有可能是 2D 顯示或是 3D 顯示等等之類。Surface flinger 就是把這些東西結合起來,一起送到屏幕上。目前程序代碼還沒公布,不過 2D 3D 的混合顯示一直都是問題,根本原因是我們通常告訴 3D 顯示卡的東西都是一些「我要在哪里哪里畫上什么形狀,貼上某某材質然后旋轉多少度」之類的事情,也就是說,我們并不知道最后顯示出來會長什么樣子,那是顯示卡上頭的 GPU 去算出來的。一般這些東西是顯示在一個有裝飾的窗口里頭,這裝飾通常是 2D 效果。接下來假定我們想要旋轉這整個窗口,而且里頭的東西還要繼續動,那等于要隨時把握 3D 窗口里的東西長什么樣子,然后把它跟 2D 的窗口框框結合,然后再開始轉動。目前在一般 GNU/Linux 上這件事情還沒有處理的非常好,Android 怎么做,值得在程序代碼公布之后注意。
    硬件抽象層 (Hardware Abstraction Libraries):這就是前文所述的 userspace 驅動程序,如果想要將 Android 在某硬件平臺上執行,基本上完成這些驅動程序就行了。其內定義了 Android 對各硬件裝置例如顯示芯片、聲音、數字相機、GPSGSM 等等的需求。
    Android Runtime 前文已有涉及,這里不再重復。另外藍色部分的“Application Framework”主要是跟如何在 Android 上寫程序有關系,之后將另文介紹


    轉載自:http://hi.baidu.com/weiyousheng/blog/item/43ef7f2e5a457e574fc226a0.html
    主站蜘蛛池模板: 五月婷婷免费视频| 亚洲国产成人久久综合一区| 国产精品亚洲精品爽爽| 国产免费女女脚奴视频网| 亚洲天堂男人天堂| 精品一区二区三区免费毛片爱| 亚洲永久永久永久永久永久精品| 97国免费在线视频| 亚洲AV无码一区二区三区系列| 久久国产精品免费看| 亚洲精彩视频在线观看| 国产成人yy免费视频| 亚洲一级特黄特黄的大片| 午夜视频免费观看| 日本激情猛烈在线看免费观看| 中文亚洲成a人片在线观看| 热久久这里是精品6免费观看| 无码久久精品国产亚洲Av影片| 84pao强力永久免费高清| 久久狠狠爱亚洲综合影院| 性色av无码免费一区二区三区| 国产精品亚洲专区无码唯爱网| www亚洲一级视频com| 国产又黄又爽又大的免费视频| 激情内射亚洲一区二区三区| 91精品免费久久久久久久久| 亚洲码和欧洲码一码二码三码 | 亚洲色偷精品一区二区三区| 国产三级免费观看| 中文字幕在线免费视频| 亚洲视频手机在线| 国产精品国产免费无码专区不卡 | 好爽…又高潮了毛片免费看| 黄色网页免费观看| 亚洲国产高清在线| 蜜臀91精品国产免费观看 | 亚洲国产最大av| 亚洲精品动漫人成3d在线| 十八禁无码免费网站| 国产精品亚洲专区无码WEB| 亚洲VA中文字幕无码一二三区|