基礎:作業系統是什麼

核心模式

核心模式(kernel mode)是不受限制、擁有完整特權的模式,作業系統的核心程式碼便在其中執行。如果使用者模式是只有自己公寓鑰匙的住客,核心模式就是握有萬能鑰匙、能進出鍋爐房、配電盤與每一間公寓的大樓管理員。在核心模式中執行的程式碼,受到硬體完全的信任:它可以做機器在物理上能做的任何事。

當 CPU 處於核心模式時,所有指令都被允許,包括特權指令——直接設定裝置控制器、編輯記憶體保護表、切換哪個行程在跑、開啟或關閉中斷、以及讓處理器停機。核心運用這些權力,去執行使用者程式自己無法完成的請求。CPU 只透過受控的事件進入核心模式:系統呼叫(使用者程式刻意提出的請求)、硬體中斷(某裝置需要處理),或陷阱(例如除以零這類錯誤)。進入時,硬體會把模式位元翻成核心,並跳到一個固定、由作業系統定義的處理常式;工作完成後,核心切回使用者模式並恢復該程式。核心模式程式碼與資料的世界,常被稱為核心空間。

權力越大,脆弱性也越大,這就是誠實的提醒。因為核心模式的程式碼能做任何事,那裡的單一錯誤便是災難性的——它可以毀損任何記憶體、讓整個系統當掉(令人聞之色變的核心崩潰或藍白當機畫面),或被利用來完全掌控機器。這正是為什麼核心要極為謹慎地撰寫、為什麼跨入核心模式要被嚴密控制,也是為什麼有一場核心設計辯論在問:究竟有多少程式碼真的需要在核心模式中執行,而非被推到較安全的使用者模式。

一個網路封包抵達。網路卡引發一個中斷;CPU 切換到核心模式並執行作業系統的中斷處理常式,它從裝置的暫存器讀出封包(一項特權動作),並把它排入正確程式的佇列。接著 CPU 返回使用者模式,恢復原本在跑的工作。

核心模式只被短暫進入,去做特權工作,然後離開。

核心模式的程式碼越多,原始速度越快,但受信任(也越曝露於程式錯誤)的範圍也越大。微核心設計為了安全而縮小核心模式;單核心設計為了效能而把更多東西留在其中。兩者都不是放諸四海皆準的。

又稱
supervisor modeprivileged modesystem modekernel space監督者模式特權模式核心空間