作業系統核心

微核心(microkernel)

/ MY-kroh-ker-nel /

如果單體核心是一間大家共用工作檯的工坊,那麼微核心的設計理念是:只把最基本的必需品留在受信任的核心裡,其餘一切都推出去,成為普通的、不具特權的程式,稱為伺服器(server)。微核心本身做得越少越好——通常只負責管理定址空間、排程執行緒,以及在它們之間傳遞訊息。檔案系統、網路堆疊,甚至大多數裝置驅動,都變成各自獨立的使用者模式伺服器行程,透過那個極小的核心彼此溝通、並與你的應用程式溝通。

看看在這個世界裡一次檔案讀取如何進行。你的程式不直接呼叫檔案系統程式碼;它改為送出一則訊息(「讀取這個檔案的這些位元組」),由微核心把它路由到檔案系統伺服器——一個跑在使用者模式的普通行程。那個伺服器可能再傳訊息給磁碟驅動伺服器,後者再傳回來,直到答案一路回到你手上。每一個箭頭都是一則訊息、一次經由核心的受控交接,而非普通的函式呼叫。Mach(讀作 mock)是一個有影響力的早期研究型微核心;L4 是著名的核心家族,設計目標就是讓訊息傳遞極快;seL4 微核心甚至經過形式化驗證,意即它的核心擁有一份正確性的數學證明。

其吸引力在於把隔離當作信任邊界:若網路驅動當掉了,那只是一個使用者行程死去,可以重啟,而核心與系統其餘部分照常運作——某個伺服器裡的臭蟲無法隨意塗寫另一個伺服器的記憶體。經典的代價是效能:把一個直接函式呼叫換成一則跨越使用者/核心邊界(且往往伴隨上下文切換)的訊息,會增加負擔,這在歷史上使微核心較慢。L4 之類的現代設計大幅縮小了這個差距,而即使純微核心並未全面勝出,這個理念仍存活在許多系統之中。

應用程式 --訊息--> [微核心路由] --> 檔案系統伺服器(使用者模式) --訊息--> 磁碟驅動伺服器(使用者模式) ——每一跳都是一則經由核心的訊息,而非直接呼叫;當掉的伺服器可以被重啟。

在微核心裡,檔案系統與驅動是普通的使用者模式伺服器;工作透過訊息傳遞完成,因此當機被隔離。

一個常見迷思是微核心「總是太慢、不切實際」。早期設計確實如此(Mach 帶來沉重的行程間通訊負擔),但 L4 家族的核心證明了訊息傳遞可以做得很快,而 seL4 既快又經過形式化驗證——所以真正的取捨更多在於工程投入與你把信任邊界畫在哪裡,而非根本上的不可能。

又称
microkernel architecturemessage-passing kernel微內核訊息傳遞核心