基礎:作業系統是什麼

核心結構化的取向

一旦你接受核心有許多工作——排程、記憶體、檔案、裝置、網路——一個自然的問題是:在內部該如何組織這一切程式碼?這就是核心結構的問題,主要的答案有單核心、分層、微核心、模組化與混合。貫穿它們的取捨是同一種張力:把更多程式碼放在特權核心裡,以換取速度與溝通的簡單;或者把程式碼拆成各自受保護的片段,以換取穩健與安全。沒有單一贏家;每種設計都以付出一種優點來買到另一種。

以下是入門層級的巡禮。單核心(monolithic kernel)把所有作業系統服務放進一個跑在核心模式的大程式裡;各部分之間的呼叫是快速的一般函式呼叫,但任何地方的程式錯誤都可能讓一切當掉,而且程式庫龐大(經典的 Unix,以及 Linux 的核心,都是單核心)。分層(layered)設計把核心組織成有順序的層,每一層只使用它下面那一層——推理起來乾淨,但僵硬,有時也慢。微核心(microkernel)只在核心模式裡保留最起碼的東西(基本的排程、記憶體與訊息傳遞),把檔案系統、驅動程式等服務移出去,成為各自獨立、靠送訊息溝通的使用者空間程式;某個使用者空間驅動程式當掉,不再會拖垮核心,而那小巧的核心甚至能被形式化驗證,但所有那些訊息傳遞會增添額外負擔。模組化(modular)核心保留一個核心主體,但在執行時依需求載入可選的片段(模組,例如你剛插上的某個裝置的驅動程式)。混合(hybrid)核心則混用各種風格——保留類似微核心的組織,卻仍把對效能關鍵的服務跑在核心模式裡(Windows 與 macOS 大致採取混合取向)。

初學者為什麼需要這張地圖?因為它能解釋你會聽到的真實差異——為什麼某個系統因速度受讚、另一個因可靠受讚,為什麼一個有問題的繪圖驅動程式會讓某個作業系統藍白當機,在另一個上卻只是重啟一項服務。值得帶走的誠實重點是:微核心並非自動就比較好——它以原始效能(更多跨越與訊息傳遞)換取更強的隔離與更容易的驗證,而單核心下的賭注恰恰相反。多數真實系統是務實的混合體,正是因為沒有任何一種純粹的結構,能在每個面向上同時勝出。

一個繪圖驅動程式有個錯。在驅動程式跑在核心模式的單核心裡,這個當機可能拖垮整個系統。在那個驅動程式以隔離的使用者空間伺服器身分執行的微核心裡,作業系統能偵測到故障,只重啟那一個伺服器,而你幾乎察覺不到。

你把驅動程式放在哪裡,決定了它的錯誤是拖垮全世界,還是只拖垮一個伺服器。

微核心並非自動就比較好——它以額外的行程間通訊負擔買到隔離與可驗證性,而單核心則以一個更大、受信任且曝露於當機的核心主體買到速度。多數出貨的系統是務實的混合體。

又稱
kernel architecturesOS structurekernel design styles核心架構作業系統結構