Linux 操作系統:一個現代工程奇跡
Linux 已經有些年頭了。到 2012 年,Linux 已經 21 周歲了,它是一個支持多種使用模型的成熟操作系統。很難將 Linux 僅當成一個操作系統,它更像是個變色龍。它靈活的模塊化內核可支持多種使用模型(從最大的超級計算機到最小的嵌入式設備),因此很難將它劃分為具體的某一類,只能是當成一項使能技術。事實上,Linux 是一個平臺。它是創建新產品的一項關鍵技術。其中有些產品才剛剛出現不久。
我們快速瀏覽一下 Linux 的基本架構及一些基本原則。然后,看看 Linux 如何將這些原則應用于多種使用模型,以及為什么它是一個平臺,而不僅僅是一個操作系統。
Linux 是什么?
從表面上看,Linux 是一個操作系統。如 圖 1 所示,Linux 包含一個內核(管理硬件和軟件資源的核心代碼)和一組用戶應用程序(例如庫、窗口管理器和應用程序)。
圖 1. Linux 表面
這個簡單的圖表顯示了一些容易被忽視的重要原則。Linux 棧的底部是一組依賴于架構的代碼,它能讓 Linux 在多種硬件平臺(ARM、PowerPC、Tilera TILE 等)上運行。當然,這一項功能是由 GNU 工具鏈所賦予的,它能實現 Linux 可移植性。
在可移植性 方面,Linux 是它自身的類。驅動程序子系統(功能多樣)支持動態加載模塊,而不會對性能產生任何影響,它支持模塊化(除了更加動態 的平臺外)。Linux 還包含內核級安全性(多種方案),可支持安全的 平臺。在外部文件系統方面,Linux 可最大限度支持所有操作系統的文件系統,例如,通過設計模塊化提供靈活性。Linux 不僅實現了標準調度特性,而且實現了實時 調度(包括對中斷延遲的保證)。
最后,Linux 是開放式的,這意味著幾乎任何人都能查看或改進其源代碼。這種開放性也將產生漏洞的可能性降到最低,從而形成一個更加安全的 平臺。許多公司都對 Linux 作出貢獻,使它能不斷支持各種使用模型,同時保持其核心屬性。
這七項重要原則不是 Linux 的全部原則,但這些讓 Linux 成為了支持多種使用模型的通用平臺。而且,Linux 在這些使用模型中是一致的,這不僅體現在設計原則,還有內核本身。而其他操作系統則不是這樣(例如 Windows®臺式版、服務器版,或嵌入式,以及 Mac OS X 或 Apple iOS),它們將產品拆分以支持其他使用模型。
Linux 在哪?
也許回答哪里有 Linux 比回答哪里沒有 Linux 要難。Linux 其變形和擴展能力在所有計算領域都能找到(甚至一些還未完全定義的領域)。本節將探索一些主要的計算領域,包括桌面/筆記本、服務器、集群、大型機、超級計算機、掌上電腦/平板電腦、嵌入式、虛擬化和試驗機(見 圖 2)。
圖 2. Linux 屬性和支持領域
桌面和筆記本
在桌面和筆記本領域,很多用戶使用 Linux,這也是 Linux 競爭最激烈的領域。最新的市場占有率調查數據顯示,Linux 占有 1.5% 的臺式電腦市場,32% 的筆記本市場。這個數字可能有點低,但在開發人員中,我看到使用 Linux 多于其他操作系統。
Linux 一開始是一個簡單的實驗性的操作系統,于 1994 年推出 XFree86,這是一個窗口管理器,標志著一個新的桌面操作系統的產生。目前,Linux 上有幾種窗口管理器可用(既是賜福又是禍害),讓用戶能夠根據需要進行定制。而且,Linux 能根據處理器功能自動擴展(如多核和對稱多線程),從而高效安排進程并兼顧性能。
服務器
在服務器市場(包括 Web 服務器、郵件服務器、Domain Name System 服務器及其他后端設備),Linux 占主導地位。最近的調查發現,60% 的服務器使用 Linux。除了傳統的 Web 服務,Linux 還支撐了一些最大的 Internet 產業(Facebook、eBay、Twitter、Amazon 等),并滿足不同的使用模型和需求。除了傳統的選擇之外(例如 Web 或郵件),Linux 還提供了大量的 Web 服務(以及這些服務的多種選項)。
集群和分布式計算
Linux 不僅是集群和分布式計算模型中的重要組成部分,它還對很多新使用模型核心起著驅動作用。目前快速發展的兩個重要模型是云計算和大數據。
云計算就是將 IT 作為服務交付,它依賴于共享資源集群,可以根據給定應用程序的需要進行調整。云也依賴于虛擬化以支持大規模基礎架構中節點的自動管理。在云環境中,66% 使用 Linux 作為主要平臺。
Linux 也在推動自身成為數據科學的平臺。Internet 會擴展可收集到的數據量,在處理這些數據的過程中會產生新問題以識別有價值的模式。現在所謂的大數據 是在 Linux 上開發的,可以用可擴展方式操作數據,這超越了以前傳統方法。Hadoop 及其生態環境就是 Linux 開放性的成果,有眾多的開發人員精通此平臺。
大型機
1991 年,一位著名的編輯預測大型機將在 1996 年就被取代。20 多年過去了,大型機仍然在生產和出售中,并且很多都運行 Linux。IBM 從 2000 年開始在大型機上支持 Linux(例如流行的 IBM® System z®)并提供各個環境下相同的用戶體驗。Michael Vizard 最近的一篇文章指出約 25% 的新大型機負載依賴于 Linux。
超級計算機
超級計算機領域一直是標榜速度最快的軍備競賽,從 Oak Ridge 國家實驗室的 Jaguar 超級計算機(2009 年)到中國的 Tianhe-I(2010 年),再到當前領先者日本 RIKEN Kei 計算機(2011 年)。在 2012 年,IBM 將推出 Sequoia 超級計算機,預計性能超過 RIKEN 一倍。這些超級計算機的共同之處就是都運行 Linux。Linux 不僅高效,而且還適用于各種硬件平臺,有助于提高性能。這一點也不奇怪,有 90% 的超級計算機都運行 Linux。
移動設備和平板電腦
在更有限的消費設備領域,移動設備和平板電腦展現出強勁的增長勢頭。這些設備一般都配有 Linux 內核和用戶界面圖形 (GUI)。該領域的一個重要案例就是 Google Android 操作系統,它可用于智能手機和平板電腦中。今天,超過 25% 的智能手機運行某一版本的 Linux (主要是 Android),大約 40% 的平板電腦運行 Android。
這些設備依賴于基于 ARM 的處理器(系統在芯片上),實現高性能、低能耗。無論底層平臺是什么,它們都是 Linux 設備,而不是內核和應用程序的交叉。
Microsoft® 最近確認,Windows on ARM (WOA) 平板電腦只支持針對該平臺開發的應用程序(換句話說,無法在平板電腦上運行老的應用程序)。相比之下, Linux 支持高度可移植的應用程序,而不是受限制的、封閉式的應用程序生態系統。
嵌入式設備
最后是嵌入式設備,它有著各種限制(處理器性能、資源如內存等)。Linux 是大多數設備的理想選擇,因為它能向下調整并可以使用市面上大多數嵌入式處理器。這樣的靈活性使得 Linux 廣泛用于電視、車載娛樂、導航系統及多種其他設備中。
Linux 具有高度可定制特性,并以低能耗為重心。為了確保低能耗,Less Watts 啟動了一個追蹤 Linux 內核版本的能源消耗項目。該項目主要關注 Intel 平臺,但對其他處理器也有用。
Linux 是一個相當標準的嵌入式設備平臺,能決定設備的成功或失敗(以支持快速啟動和開發)。最近出現了一個很有趣的設備,稱為 Raspberry Pi,它是基于 ARM 的信用卡大小的計算機,運行 Linux 并被用作教授編程的教學設備。該設備預計售價在 35 美元,但尚未零售。
虛擬化平臺
Linux 推動創新的最有趣領域之一就是虛擬化。Linux 是各種虛擬化方法的操作系統來源,無論是平臺或半虛擬化 (para-virtualization)、操作系統虛擬化,或是更模糊的概念如合作虛擬化。Linux 作為一個操作系統,能將自身轉換成管理程序(例如內核虛擬機 [KVM])并托管很多研究管理程序。為了提高虛擬化的效率,Linux 實現了 Kernel SamePage Merging 技術以便能高效去除重復內存頁。
Linux 還推動虛擬化技術更進一步,稱為嵌套虛擬化。嵌套,顧名思意,可以讓管理程序托管客戶管理程序,它反過來又托管一組客戶虛擬機。雖然乍一看此用例有點奇怪,但嵌套虛擬化將改變云計算并擴展可托管的應用程序類型。目前,Linux KVM 支持嵌套虛擬化。
實驗平臺
最后也是相當重要的是,Linux 本身的基礎,它是一個實驗平臺,通過它來探索許多新想法。在 1991 年 UNIX® 推出 20 年以后,Linux 作為一個玩具式操作系統出現。今天,Linux 已經在文件系統研究、集群計算、云和虛擬化改進中作為實驗平臺,拓展了單一操作系統內核的極限,可應用到許多使用模型中。Linux 作為平臺,可以通過同時使用 Linux 和大量開源部件來加快實驗。這些成果中包含大量使用 Linux 構建的相關技術,其中包括 HP webOS、Google Chrome OS 和 Android。
Linux 引入的一個有趣變化是,增加了與底層硬件平臺的無關性。Linux 能夠展現相同的用戶體驗,而不管底層硬件架構是什么。因此無論云使用的是 AMD x86 服務器還是低能耗的基于 ARM 的產品,在 Linux 上運行的應用程序都可以從物理架構中抽象出來。這種抽象化可讓用戶在根據需求的平臺上做決定,而不是被綁定到通用但又過時和低效的架構中。Linux 就等于選擇。
Linux 還是自包含的集成開發環境 (IDE)。除了托管世界級的編譯器工具鏈 (GNC Compiler Collection),它還托管很多工具,如調試器、編輯器、版本控制系統、文件工具,以及 Shell 和解釋器,以幫助自動完成開發任務。Linux 的這些功能使它成為理想的軟件開發和軟件研究環境。
Linux 多樣性
支持此處定義的各種使用模型只是 Linux 的一個附帶選項。Linux 發行版可滿足桌面和服務器市場,而專門的發行版專注于嵌入式(例如 uClinux,如果您的嵌入式設備缺乏內存管理單元)。任何人都可以取得 Linux 內核并將用戶應用程序打包,用于特定的使用模型,并利用 Linux 的各種優勢(網絡協議和文件系統、可配置和動態內核和標準應用程序編程接口)。這就是快速發展的智能手機平臺運行 Linux 的原因(可定制 UI 實現個性化)。
更進一步
如果將 Linux 比作橋,那么它將是一個現代工程奇跡。其分布式開發模型給現狀帶來挑戰,其結果是產生了最靈活的軟件成品,擴展了從微型嵌入式設備到大規模的超級計算機的使用模型。Linux 影響了整個產業,并引領導了有關集群計算、文件系統、云和虛擬化方面的前沿研究。無論計算環境如何發展,Linux 總是緊密相隨。