作業系統介面

特權層級(rings)

想像一座有數道同心城牆的城堡。王座大廳位於正中央,外面層層圍著城牆;你站得越外面,被信任的程度越低,能為你開的門也越少。CPU 的特權層級運作方式相同:跑在越靠中心的程式碼被賦予越多權力,而外圈的程式碼則被圍住。

在常見的 x86 CPU 上,硬體定義了四個編號的特權層級,從 ring 0 到 ring 3,數字越小代表特權越高。核心跑在 ring 0(王座大廳),可執行任何指令;一般使用者程式跑在 ring 3(最外圈城牆),被擋在特權指令之外、也碰不到彼此的記憶體。ring 1 與 ring 2 介於中間,但主流系統很少使用。CPU 在每條指令與每次記憶體存取上都標記目前的 ring,並拒絕該 ring 不被允許的任何動作。實務上多數作業系統只用其中兩個層級——ring 0 給核心、ring 3 給其他一切——這正是從硬體編號角度看到的使用者模式/核心模式之分。

為何重要:環(rings)是「使用者 vs 核心」那道牆背後具體的硬體機制。它也說明了為什麼某些軟體(例如虛擬機的監督程式 hypervisor)需要額外的把戲或新的 CPU 功能,才能把自己插到 ring 0「下面」。身為初學者,你主要只需記住它的樣貌:幾個編號的層級、數字越小越強、核心在中心、你的程式在外圍。

在 x86 上,核心位於 ring 0,而你的命令殼層、瀏覽器與編輯器全都在 ring 3。系統呼叫就是從 ring 3 到 ring 0 再返回的那一次受控跳躍,在核心事先設好的固定進入點上進行。

x86 上有四個環,但多數系統實際只用 ring 0 和 ring 3。

環的編號是 x86 特有的。其他 CPU(ARM、RISC-V)也有特權層級,但命名與數量不同。可移植的概念是「有幾個有序的特權層級、核心特權最高」——而不是 0 到 3 這些特定數字。

又稱
protection ringsring 0ring 3保護環權限環