華為的濛鴻作業系統自發布以來受到了廣泛的關注,其一大特點就是採用「微內核」架構。
我們學習作業系統課程的時候,講到微內核由來已久,有眾多天然優勢,是未來系統的發展方向。可是事實上,真正進入工業級應用的微內核作業系統並不多。這個分歧主要是學術界和工業屆的分歧,學術界認為,微內核是作業系統發展的主流方向,但一直以來工業界不這麼認為。
當年 Linus 推出 Linux 以後,和他的老師 Andrew Tanenbaum(寫 Minix 系統的牛人)就宏內核和微內核進行了激烈的辯論,即著名的「Tanenbaum – Torvalds debate」。
什麼是「微內核」架構
微內核是指作業系統的最底層是一個包含最基本功能的 Kernel(內核),這個內核通常只負責最基本的最底層的任務,如上下文切換、中斷處理、進程間通信(IPC)和時鐘處理等,而其他的系統任務,如硬體驅動,文件系統和內存管理都以用戶態進程(即ring3)的形式運行,並且相互之間通過IPC進行通信。
宏內核則與之相反,所有的系統任務均在內核態(ring0)處理,系統模塊之間通過函數調用方式進行交互。這兩個不同架構模式的作業系統概念自提出已經過去了三十年(最早的微內核系統是由卡內基梅隆大學開發的 Mach,於1985年被提出,之前的作業系統都是宏內核,如Unix 等。
「微內核」優缺點
工業界和學界普遍認為微內核的優勢在於內核很輕(通常C代碼在 10000 行左右),因此攻擊面和代碼出錯的可能性更低。微內核比宏內核依賴更為簡單,而且大部分任務是以進程的方式運行,一旦出錯只會影響到這個進程本身,穩定性更強。
另一方面,由於內核的精簡化,所以這樣的作業系統內核可以很方便的進行移植,由於這種內核是小型的,不包括其他功能性模塊,可以讓我們隨意的拼湊,這樣就是可以得到不同組合。如華為鴻蒙系統那樣:
鴻蒙OS實現模塊化耦合,對應不同設備可彈性部署,鴻蒙OS有三層架構,第一層是內核,第二層是基礎服務,第三層是程序框架 。可用於大屏、PC、汽車等各種不同的設備上。還可以隨時用在手機上,但暫時華為手機端依然優先使用安卓。
不過微內核的整體性能不如宏內核,這對於追求性能的廠商而言,採用宏內核無可非議。我們平常接觸到的作業系統,大多數都是宏內核,包括 Windows 系統和類 Unix 系統,微內核一度僅局限於研究目的。
但隨著硬體和處理器性能的快速發展,摩爾定律和多核技術使得計算機基本處於過剩狀態,而現在大部分性能問題可以說是軟體造成的。而且 L4 在微內核本身的 IPC 性能方面已經有了長足的發展,性能不再是限制微內核發展的主要原因。
Windows、macOS、Linux 三大作業系統是微內核嗎?
Linux 由於是開源系統,採用宏內核這點沒有任何疑問。在編譯 Linux 內核的時候,會接觸到 module 概念,但這些 module 共享同一個 address space(地址空間)。而在微內核作業系統中,module 彼此之間通常是隔離的,具有不同的 address space。
Windows 和 macOS,都宣稱採用微內核架構。為了追求效能,他們將需要具備特權的服務組件放進核心空間,違反了微內核的基本設計原則,更為接近整塊性核心的設計方式,可稱為混合內核。
「微內核」的歷史
微內核家族
第一代為內核系統 Match 由於 IPC 性能令人失望, 德國的 Jochen Liedtke 提出了 L3 和後續的 L4 結構,對IPC的性能改進很大,甚至相比較 Unix 都有很大的性能優勢。為了追求效率,L4 用彙編語言實現,但也導致第一代 L4 只能運行在 486 和奔騰處理器上面。目前 L4 已經變成微內核的一個設計標準,圍繞這個標準,有很多的 L4 的實現。
最初的由 Jochen 設計的 L4 目前稱之為 L4/X86,現在最活躍的兩個分別是 Pistachio 和 Fiasco。前者是普通的微內核,後者是專門為實時系統設計的為內核,實現了L4V2(L4 API Version 2)。由於 Fiasco 跟 L4 關係,所以平時 Fiasco 也被稱做 L4/Fiasco,以強調它是L4的一個實現。
Fiasco 的意思是「失敗「,是 Dresden Real-Time Operating Systems Project(德累斯敦大學實時作業系統項目)的核心子項目,它是一個具備實時功能的微內核。在一個實時系統裡面,通常有兩種任務,一種是 real-time 的,另一種是 time-sharing 的。real-time 部分由Fiasco 提供,在 time-sharing 部分,開發者們利用了Linux。開發者對 Linux 進行了修改,使得 Linux 能夠運行在 L4/Fiasco,這便是 L4Linux 項目。
進來年來,有兩個為內核系統特別受到關注,一個是谷歌的 Fuchsia,另一個是用 Rust 語言實現的 Redox OS。
Fuchsia 是谷歌在 2016 年公開的一個項目,儘管谷歌一直沒有對外公布它的目的和計劃,但是它普遍被認為將用於取代安卓系統,以求徹底解決安卓及其底層的 Linux 內核的歷史問題。Fuchsia 的底層 Zircon 本身是基於lk,而lk原本是一個嵌入式微控制器系統,最具有最基本的任務調度,同步原語等功能。但是 Zircon 在 lk 基礎上構建各種系統服務,而 Fuchsia又在Zircon 上構建了圖像化服務和其他應用程式。
Redox OS 是一個從2015年開始的開源通用作業系統項目,其遵循微內核架構,最大的特點在於完全使用Rust(和少量必需的彙編)作為開發語言編寫作業系統及周圍生態(例如文件系統、顯示伺服器及 Rust 版本的 libc)。Redox 是編寫一個完整、功能齊全的通用作業系統的嘗試,關注於安全性、自由性、可靠性、正確性和實用性。該項目團隊希望能夠在沒有障礙的情況下使用它作為 Linux 的替代品。它一定程度上兼容於 POSIX,因而應該能夠在無需大量修改的情況下運行大多數 Linux 程序。
歷史的車輪在前進,新的需求場景不斷向現有作業系統提出挑戰。如部署於自動駕駛中樞位置的作業系統,對安全性和穩定性的要求將大於兼容性和靈活性,也是微內核發揮長處的地方。鴻蒙採用微內核架構,較傳統作業系統,有很多新的優勢: