核心內部與作業系統建構

混合核心(hybrid kernel)

單核心對微核心的辯論聽起來像是個乾淨的二選一,但真實系統往往兩者都想要:既要把東西放在核心裡執行的速度,又要微核心所暗示的某些組織方式。混合核心(hybrid kernel)就是務實的中間地帶:它把大多數對效能敏感的服務保留在特權核心內(像單核心那樣),同時借用微核心的結構與想法——有時是一個訊息傳遞的核心,有時只是一個清楚模組化的佈局——卻不必付出把一切都推到使用者空間的完整代價。想像一間辦公室為了速度大多採開放式,卻把幾個敏感的團隊留在獨立房間裡;它既不是嚴格的隔間農場、也不是一個大通間,而是為了實用而選的折衷。

具體來說,著名的例子是 Windows NT(現代 Windows 的基礎)與蘋果的 XNU(用於 macOS 與 iOS)。XNU 實際上把一個 Mach 微核心的核心與大量 BSD Unix 程式碼及驅動程式結合,全在同一個核心空間中執行——因此它有微核心的血統,卻為了速度把大部分作業系統以單核心方式執行。Windows NT 保有子系統與一個以物件為基礎、分層的設計,並含一個硬體抽象層,卻為了效能在核心模式中執行繪圖、檔案系統與驅動程式。實務上,混合核心與一個模組化的單核心之間界線模糊,有人甚至主張「混合」不過是結構良好之單核心的行銷說法。

它之所以重要,是因為你實際在用的大多數桌面與行動作業系統正是建立在它之上——純單核心與純微核心這兩個教條式的兩極,在主流產品中不如這個工程折衷常見。誠實的警告是:這個詞定義鬆散且略有爭議:混合核心仍把它對效能要緊的部分跑在一個特權位址空間裡,因此繼承了單核心的風險——一個有缺陷的核心內元件可能當掉系統;它並未給你真正微核心的故障隔離,只給了更整齊的內部結構與對微核心技術的選擇性運用。

macOS 跑在 XNU 上,它從 Mach 微核心起家,卻為了速度把 BSD 層與大部分驅動程式收進核心空間。因此一次檔案操作不必像純微核心那樣付出完整的訊息傳遞成本,但這個設計底下仍帶著 Mach 的 IPC 與結構——一個日常使用中的具體混合範例。

大多在核心內以求速度,並選用部分微核心結構——主流的折衷之道。

「混合」是個有爭議的標籤:由於對效能要緊的程式碼仍共享一個特權位址空間,混合核心保留了大部分單核心的穩健風險,並未提供微核心真正的故障隔離。有些專家主張它本質上就是一個組織良好、加上行銷名號的單核心。

又称
modular kernelmacrokernel混合式核心