L4微內核系列

**L4** 是一種微核心構架的作業系統核心，最初由約亨・李德克（Jochen Liedtke）設計，前身為 L3 微核心。在最開始，L4 隻是一個由約亨・李德克設計並實現的單一的產品，用於 Intel i386 上的一個高度最佳化核心。L4 微核心系統由於其出色的效能和很小的體積而開始被電腦工業所認知。隨後，L4 的系統在多個方面上有了高速的發展，值得提及的是一個更加獨立於硬體平台的版本，被稱為 **Pistachio**，之後又被移植到了許多不同的硬體構架上。現在已經形成一個微核心家族，包括 Pistachio，L4/MIPS，與 Fiasco。

## 歷史

由於意識到 Mach 微核心在設計和效能上的缺陷，許多開發人員在 90 年代中期開始重新審視整個微核心的概念。Mach 為了支援一些除了 Unix 環境以外並不是特別有用的概念，而在行程間通訊（IPC）中增加了大量的額外開銷。IPC 系統本身就是一個分散式開銷的經典案例。在單使用者系統中，比如說手機，許可和權限的檢查就顯得不是那麼重要。雖然 Mach 宣稱自己是一個微核心，但是看起來實際上它包含了遠超過它所必需的東西。

約亨・李德克想要證明更薄的 IPC 層、對效能更關注並與硬體特性相關（和與平台無關相對）的設計，會更貼近現實世界中的效能改進。相對於 Mach 的複雜的 IPC 系統，他的 L3 僅簡單的傳遞訊息，而沒有任何額外的開銷。安全和權限被視為同其它使用者空間所必需的伺服器一樣。L3 也使用了各種硬體的特性來傳遞訊息，讓每個呼叫都最大化的利用硬體特性，像暫存器。相對而言，Mach 則使用的是 one-size-fits-all 的通用機制，以犧牲效能為代價而取得可移植性。這些改變大量減少 IPC 中額外的開銷。在同樣的系統中，Mach 需要 114 毫秒來傳送即使是最短的訊息，而 L3 可以用少於 10 毫秒的時間來傳送同樣的訊息。一次系統呼叫的時間比 Unix 所花費的一半還少，而 Mach 執行同樣的系統呼叫需要 5 倍於 Unix 的時間。通過在 TÜV SÜD 中使用多年，L3 被證明是一個安全的作業系統核心。 
在 L3 之後，約亨・李德克開始意識到其它的一些 Mach 的概念也存在同樣的問題。這導致了更簡單地 L4 的誕生，由於太簡單了，隨後 L4 被證明是具有高可移植性的。

回顧歷史，大多數 Mach 的效能問題似乎只能以重新設計來解決。例如，在 Mach 微核心與單核心的比較中的另一個主要的瓶頸是在一個真實的 "伺服器" 集系統中核心無法知道怎樣有效地進行分頁記憶體。開發者們使用單核心可以，並且已經投入了可觀的時間以試圖了解核心的記憶體使用的精確性質，然後調整他們的系統來利用這些優點。在微核心上開發者無法知道是什麼組成系統，而且除了一些特例之外無法更近地監視記憶體使用。

Liedtke 決定這個問題的解決方案是簡單地從核心中移除全部分頁工作，並允許每個應用程式應用以前只能應用於單核心的調整形式。在 L4 系統下，作業系統（相對於核心）被期望提供分頁服務，潛在地可以以很多種形式，允許開發者選取最適合於他們的工作的方式。核心的角色減少到知道這樣的系統存在並提供一個支援它們的機制。在 L4 下，這總共需要三個函式：Grant，Map 和 Unmap。

結果設計哲學變成了最小化的。就像 L4/MIPS 的作者們所表述的：「一項特性若且唯若安全需要它在特權模式被實現時才應該在微核心里」。Mach 關注於跨平台的可移植性，多處理器支援和其它「下一件大事」的主機。

一個基於 L4 的作業系統必須提供那些上一代單核心內部所內建的服務。例如，為了實現一個類 Unix 的安全系統，伺服器必須提供像 Mach 核心所內建的權限管理。進一步說，訊息在多數情況下必須檢查其有效性。但仍不清楚的是，在 L4 之上執行的真實的作業系統的端對端效能是否會顯著快於一個基於 Mach 建立的系統。在一個移植到 L4 之上執行的 Linux，和另一個移植到 Mach 之上執行的 MkLinux，與基本的 Linux 系統本身之間的測試清楚地表明了 L4 的效能的優勢。即使在最好的情況下 MkLinux 執行得比單核心慢 15%，而同時 L4 隻慢大約 5-10%。更進一步移植 Linux 系統的開發，而不是為測試而實現，有可能提高（效能）到一定程度。

## 當前開發情況

Liedtke 的 L4 原始版本是為速度而建立的。為了榨乾每一滴效能，許多關鍵段落是以組合語言寫成的。他的工作在作業系統設計圈引起了一場小小的革命。很快它被一些大學所研究，然後很快是 IBM，就是 Liedtke 所遷往的地方。在 IBM 一個 L4 的新版本被創造出來，**Lemon Pip**，緊接著是使用 C++ 創造一個跨平台版本的努力，**Lime Pip**。

Karlsruhe 大學也選擇 L4 進行開發，在那裡他們開發了 **L4Ka::Hazelnut**，一個計劃執行於所有 32 位元機器上 C++ 的版本。他們試圖判斷像 C++ 這種高階語言的額外開銷是否會抹殺掉其所提供的編程便利性。這份努力很成功，效能仍然是極好的，在它發布時 IBM 的 Lime Pip 專案終止了。Hazelnut 最終為了可移植性、64 位元支援和更好的效能被全部重寫，由此而產生了 **L4Ka::Pistachio**。

新南威爾斯大學也同樣進行著開發，在那裡開發者在多種 64 位元平台上實現了 L4。他們開發了 **L4/MIPS** 和 **L4/Alpha**，而 Liedtke 的原始版本被追認為 **L4/x86**。像 Liedtke 的最初的核心那樣，UNSW 核心是不可移植的並且是分別從頭重寫的。在高度可移植的 Pistachio 發行時，UNSW 研究組放棄了他們自己的核心轉而支援產生高度最佳化的 Pistachio 移植。

最近 UNSW 研究組在他們的新家 National ICT Australia (NICTA)，創造了一個新的 L4 版本稱為 L4-embedded。就像名稱所暗示的那樣，這是著眼於在商業嵌入式環境中的使用，因此這個實現在較小的記憶體印記與減少複雜度的目標之間的進行了權衡。還有正在進行中的如下工作，L4 API 的正式化，正規的證明一個實現的正確性，以及為了在 L4 之上開發良好結構化的系統的框架。

Fiasco 是對最初的 L4 的進一步的開發，包含了硬即時支援，並且被作為 DROPS 作業系統的基礎。對於即時系統使用 "快" 是不夠的，所以 Fiasco 核心是完全重入的，允許在任何時間被中斷。就像其它由最初的 L4 的發展出來的版本一樣，為了可讀性和可移植性的原因，Fiasco 也是使用 C++ 寫成的。

今天幾乎所有的開發者出現在 Pistachio 核心上。新南威爾斯大學現在使用 Pistachio 繼續他們的可移植性實驗，並且 Pistachio 核心現在在廣泛的硬體上都有提供。其它的研究組在探索即時支援，對像 Fiasco 那樣的概念繼續深入研究。基本核心的開發也在 Karlsruhe 大學繼續，朝向新的 "Version 4" API 而工作（Pistachio 當前只實現了 beta 版）.

GNU Hurd 專案在考慮採用 L4 微核心以取代 Mach (**GNU Hurd／L4**). 當前存在一個目標為致力於在 L4 框架下最小的實現 Mach 的設計，開發者們正在它的實現上工作。

2009 年，Data61/CSIRO 實現了對於其 L4 核心的形式化證明，並創造出世界上第一個此類的實用作業系統 seL4。他們在 2013 年進一步證明了核心的資訊流安全性，使得該系統成為最安全的作業系統之一。

## 參見

* Haiku – 開源桌面作業系統
* FreeRTOS – 微核心，即時作業系統（RTOS）
* Redox - Rust 實現的微核心作業系統
* QNX – 符合 POSIX，微核心即時作業系統（RTOS）
* INTEGRITY – 微核心即時作業系統（RTOS）
* 貝爾實驗室九號計畫 – 為了接替 UNIX 的分散式作業系統
* MINIX 3 – 類 Unix 微核心作業系統

## 來源

## 外部連結

* L4Hq – L4 總部，L4 專案的社群站點。
* The L4 microkernel family （頁面存檔備份，存於網際網路檔案館） – L4 實現的簡介、文件和專案
* L4Ka（頁面存檔備份，存於網際網路檔案館） – L4Ka::Pistachio 和 L4Ka::Hazelnut 的實現
* The Performance of µ-Kernel-Based Systems （頁面存檔備份，存於網際網路檔案館） – 一個出色的關於微核心和單一核心的效能分析比較，比較了 Linux 單核心情況，還有 Linux 執行在 Mach3 上和 L4 上。本文中的很多資料都取自這個來源。
* Fiasco （頁面存檔備份，存於網際網路檔案館） – 一個自由的 C++ 實現 x86 和 ARM 處理器。
* UNSW （頁面存檔備份，存於網際網路檔案館） – DEC Alpha 和 MIPS architecture 的實現
* NICTA（頁面存檔備份，存於網際網路檔案館） – 移植到 ARM，MIPS，Alpha，PowerPC-64 and L4 - 嵌入式核心
* Wombat – Linux 移植到上 L4/Iguana 作業系統
* L4Linux （頁面存檔備份，存於網際網路檔案館） – Linux 在 L4 的微核心上執行
* DROPS （頁面存檔備份，存於網際網路檔案館） – The Dresden 即時作業系統專案
* GNU Hurd/L4（頁面存檔備份，存於網際網路檔案館） – 移植 GNU Hurd/Mach 到 L4 上
* L3 的資訊 （頁面存檔備份，存於網際網路檔案館），L4 的前身
* seL4 （頁面存檔備份，存於網際網路檔案館），第一個完成全核心形式化證明的實用作業系統