作業系統介面

使用者模式 vs 核心模式(user mode vs kernel mode)

想像一把附有安全護罩的電動工具。正常使用時護罩鎖死,你根本碰不到旋轉的刀片——這是我們多數時候待著的安全設定。另外還有一個維修模式,由受過訓練的技師卸下護罩去做危險的工作。CPU 也有同樣的兩種設定,而且是用硬體強制的:一種給一般程式用的受限設定,以及一種保留給核心、無所不能的設定。

具體而言,CPU 在每一瞬間都處於(至少)兩種模式之一。在使用者模式下——你所有的程式都跑在這裡——硬體禁止某些指令與某些記憶體存取:使用者模式下的程式根本無法執行讓 CPU 停機的那條指令、無法碰別的程式的記憶體、也無法直接和磁碟控制器對話。在核心模式(也叫監督者模式 supervisor mode)下,這些限制被解除;核心在這裡執行,可以做任何事。CPU 本身在每一條指令上都檢查目前的模式,所以一個亂來的使用者程式是被硬體擋下的,而不只是靠規矩自律。

為何重要:這道由硬體強制的牆,正是讓多使用者、多程式的電腦既安全又穩定的關鍵。一個在使用者模式裡有瑕疵或惡意的程式,無法弄垮整台機器、也無法讀你銀行 App 的記憶體,因為 CPU 會拒絕並改為陷入核心。使用者模式程式抵達特權那一側的唯一途徑,是一道受控的門——系統呼叫——它會在一個固定、可信的進入點把 CPU 切換進核心模式。沒有這種雙模式設計,任何程式都能做任何事,而一個錯誤就能拖垮一切。

在使用者模式下試圖執行一條特權指令(例如關閉中斷的那條),CPU 會拒絕:它引發一個錯誤(fault)並把控制權交給核心,核心通常就把你的程式殺掉。同一條指令在核心裡卻能直接執行。

同一條指令、不同模式、相反結果——這道牆是 CPU 在強制執行。

「核心模式」是一種 CPU 特權狀態,不是記憶體裡的某個位置。處於核心模式表示 CPU 現在會執行特權指令;它與「核心空間記憶體」的概念相關但並不相同。

又稱
supervisor modeprivileged mode使用者態 vs 核心態特權模式