核心內部與作業系統建構

外核心(exokernel)

/ EX-oh-ker-nel /

單核心與微核心的設計都在決定「如何組織作業系統的抽象」,但有一個更激進的想法質疑核心是否該強加那些抽象。外核心(exokernel)主張核心的工作只是安全地多工分配裸硬體——安全地把磁碟區塊、記憶體頁與 CPU 時間在程式之間切分、並執行誰擁有什麼——其餘則閃到一邊。真正的抽象(檔案系統、位址空間、網路協定)則由直接連結進每個應用程式的函式庫作業系統(library OS)提供。想像一家連鎖五金行只賣你原木、並執行誰付錢買了哪一堆;你要怎麼蓋房子完全由你決定,用你喜歡的任何藍圖(函式庫)。

具體來說,外核心不提供固定的檔案抽象,而是授予應用程式對特定磁碟區塊的安全存取,讓該應用程式的函式庫作業系統去實作它想要的任何檔案系統;它不提供固定的虛擬記憶體策略,而是發出實體頁、讓函式庫作業系統去管理它們。核心的角色縮減為保護與資源仲裁:追蹤所有權、防止某程式碰觸另一程式的資源、並在需要時收回資源。由於抽象住在編進程式裡的函式庫中,應用程式可以挑選、甚至量身打造最適合自己的策略,而不必將就傳統核心裡寫死的那套一體適用的選擇。

它之所以重要,主要是作為一個有影響力的研究想法(1990 年代出自 MIT),推進了「抽象該住在哪裡」這個問題,並預示了今日的函式庫作業系統與單核映像(unikernel),在那裡應用程式與其作業系統服務被捆在一起。誠實的現實是:純粹的外核心從未成為主流的通用系統——在保有良好保護的同時安全地多工分配裸硬體很困難,而大多數使用者要的是現成的抽象,而非自己打造。但其核心洞見——把保護與抽象分開——至今仍在現代的專用與雲原生設計中迴響。

一個了解自身存取模式的資料庫,在外核心之下,可以取得原始磁碟區塊、執行自己那套恰好為資料庫 I/O 調校的函式庫檔案系統,而不必與通用檔案系統的快取與配置方式抗衡。外核心只檢查該資料庫確實擁有那些區塊;策略由應用程式自己選。

核心只保護並切分裸硬體;抽象則住在各應用程式自己的函式庫裡。

外核心大致上是一條研究脈絡,而非驅動你手機或筆電的核心——但它不只是奇談。它「抽象即函式庫」的想法存續於單核映像與函式庫作業系統中,在那裡一個應用程式加上它最小化的作業系統被編成單一映像,供雲端使用。

又称
exokernel designlibrary OS approach外核