作業系統核心

外核心理念(exokernel,與 unikernel)

/ EK-soh-ker-nel /

大多數核心替你決定一項資源該如何被抽象化:檔案系統決定什麼是「檔案」,核心決定一個「行程」長什麼樣,而你的程式只能接受這些決定。外核心理念誕生於 1990 年代的 MIT 研究,把這件事翻轉過來:讓核心幾乎什麼都不做,只安全地多工分配原始硬體——安全地決定哪個應用程式擁有哪個磁碟區塊、哪個記憶體分頁、哪一片 CPU 時間——然後就讓開。真正的抽象(檔案、虛擬記憶體佈局、網路)被往上移進一個「函式庫作業系統」,直接連結進每個應用程式,於是每個程式都能挑選或打造最適合自己的抽象。

它的座右銘是「把保護與管理分開」。外核心只負責強制誰被允許碰觸哪個實體資源(保護);這些資源該如何被變成有用的抽象(管理),則成為應用程式自己的事,透過它所連結的函式庫作業系統來完成。例如一個資料庫可以實作專為自身存取模式最佳化的磁碟佈局,而不必跟一個一體適用的檔案系統搏鬥。一個關係密切、更務實的後裔是 unikernel:你把恰好一個應用程式,連同它實際需要的那一點作業系統函式庫程式碼,一起編譯成單一、微小、專用的映像,直接在虛擬機上開機——沒有通用核心,沒有用不到的驅動,「應用程式」與「作業系統」之間根本沒有分界。

為何它即使在純粹形態從未成為主流仍然重要:其底層直覺——把核心削成一層薄薄、安全的資源仲裁者,讓應用程式自訂其餘部分——在現代系統中處處可見,從用於輕量雲端工作負載的 unikernel,到讓應用程式幾乎直接驅動網路卡的核心旁路網路,再到普遍移除應用程式與硬體之間層層中介的趨勢。代價是失去通用性與共享的便利:當每個應用程式都帶著自己的作業系統,你就放棄了那些讓一般系統易於撰寫與管理的、統一而可共享的抽象。

外核心:核心只說「應用程式 A 可以碰磁碟區塊 100..199」;應用程式所連結的函式庫作業系統決定那些區塊上的「檔案」是什麼意思。Unikernel:gcc app.c + tiny_os_lib.a -> 一個可開機的映像,沒有通用核心。

外核心只仲裁原始資源;抽象住在每個應用程式各自的函式庫作業系統裡。Unikernel 把這個理念推到單一專用映像。

純粹的外核心大致停留在研究階段,所以別把它想成正在跑你的筆電。它持久的貢獻是那個原則——把保護與管理分開,讓應用程式自訂抽象——它是 unikernel 與核心旁路 I/O 的思想祖先,而非一個你會安裝的產品。

又称
exokernel architecturelibrary operating systemunikernel外核函式庫作業系統