基礎:作業系統是什麼

模式位元

模式位元(mode bit)是 CPU 內部一小塊狀態——概念上是單一個位元——它記錄處理器此刻處於哪種模式:使用者(常寫成 1)或核心(常寫成 0)。它是硬體對一個看似簡單卻必須每秒鐘以即時且可信的方式回答數百萬次的問題的解答:目前執行的程式碼,是否被允許做特權的事?就像活動中寫著「工作人員」或「來賓」的手環,它在每個受限動作的門口都被查驗。

這個位元存在於一個特殊的處理器暫存器中,每當有人嘗試執行特權指令時,硬體都會查看它。如果位元顯示核心,指令就放行;如果顯示使用者,硬體就拒絕並陷入作業系統。關鍵在於:一般使用者程式碼不能直接把位元設成核心——那會徹底瓦解整個保護機制。位元只透過受控的硬體事件改變:當陷阱、中斷或系統呼叫進入作業系統時,它會自動翻成核心;當核心把控制權交還給程式時,核心再把它翻回使用者(藉由執行一條特殊的「從陷阱返回」指令)。某些架構追蹤的層級超過兩個,因此同樣的想法會以一個小小的「目前特權級」欄位呈現,而非字面上的單一位元。

正是這個不起眼的位元,讓雙模式運作真正得以實現——若沒有一個受硬體保護、指示目前特權的指標,使用者與核心的分隔就無從執行。它是關鍵樞紐:每一次特權檢查、每一個陷阱、每一個系統呼叫,最終都會查看它。而且因為它只能在受控地進入核心時由硬體更改,使用者程式永遠無法自行把自己提升到完整權力——這正是一個安全的作業系統所仰賴的性質。

在一次系統呼叫中,陷阱指令跳進核心時,會不可分割地把模式位元從使用者切換成核心。當核心完成工作、執行它的返回指令時,位元再翻回使用者——於是程式恢復時,所受的限制與先前一模一樣。

一個位元,只在受控的進出時被改變,把守著所有特權。

模式位元必須只能由硬體在陷阱、中斷或系統呼叫時更改,絕不能由一般使用者指令更改。如果使用者程式能直接寫入它,整個保護模型就會崩潰。

又稱
privilege bitsupervisor bitcurrent privilege level特權位元