基礎:作業系統是什麼

核心

核心(kernel)是作業系統最內層、最受信任的部分——那個始終在執行、且對硬體擁有完全權力的程式。如果作業系統是旅館員工,核心就是握有萬能鑰匙、能進入任何房間、操作任何機器的經理;其他人都得透過他。它的名字來自「核」這個意象:剝去選單、視窗系統與隨附的應用程式,剩下的核心,就是作業系統真正的心臟。

核心在特權模式(核心模式)下執行,可以執行一般程式不能執行的特殊指令——直接碰觸記憶體、與裝置溝通、切換哪個程式在 CPU 上跑。它在開機時被載入記憶體,並在機器開著的整段時間常駐其中。它的職責正是那些核心的作業系統工作:決定下一個由哪個行程取得 CPU、發放並保護記憶體、居中協調對檔案與裝置的存取、處理來自硬體的中斷,以及回應使用者程式的系統呼叫。一般應用程式絕不會以核心的身分執行;它們透過系統呼叫這道受控的門,去請求核心的服務。

為何要特別點出核心?因為核心與其他一切之間的界線,是整個系統最重要的安全與穩定防線。一般應用程式的程式錯誤只會讓那個程式當掉;核心的程式錯誤卻可能讓整台機器當掉或淪陷,因為核心被託付了完整的硬體權力。這正是為什麼作業系統會努力把核心保持得小巧、謹慎、難以被愚弄——也是為什麼「核心如何結構化」(單核心、微核心、混合核心)是個有真實後果的重大設計問題。

當你的程式呼叫 read() 想從檔案取得資料時,控制權會轉入核心:核心檢查你是否有權讀那個檔案、向磁碟索取位元組、把它們複製進你程式的緩衝區,然後返回。你的程式碼從未親自碰觸磁碟——是核心在特權模式下代你完成。

使用者程式碼提出請求;握有萬能鑰匙的核心,去做特權工作。

核心並非整個作業系統——完整的作業系統還會在核心周圍附帶殼層、函式庫、驅動程式與工具。但核心是那個以特權執行的部分,而使用者與核心之間的界線,是其他一切都必須尊重的防線。