基礎:作業系統是什麼

特權指令

特權指令(privileged instruction)是一條強大或危險到只有當 CPU 處於核心模式時,硬體才肯執行的機器指令。它們是指令集裡的電動工具——落入不對的人手中,可能損壞機器、破壞保護或奪取控制權。為了維持安全,硬體把它們鎖在模式位元之後:在使用者模式下被禁止,在核心模式下被允許。

典型的特權指令,是那些在最深層次碰觸機器的指令:直接與裝置控制器溝通的指令(原始的輸入輸出)、更改記憶體管理設定的指令(這些設定控制每個程式能看見什麼)、開啟或關閉中斷的指令、載入計時器的指令,以及讓處理器停機的指令。如果一個在使用者模式中執行的程式嘗試執行其中任何一條,CPU 不會照做——它會引發一個陷阱,跳進核心,而核心通常把這次嘗試視為非法操作,終止這個違規的程式。這是自動的、由矽晶片執行的,而非靠信任。

特權指令正是一般程式不能直接驅動硬體的具體原因——也是系統呼叫必須存在的具體原因。一個需要特權動作(讀磁碟、送封包、配置實體記憶體)的使用者程式無法自己動手;它必須透過系統呼叫請求核心,而在核心模式中執行的核心,在檢查請求之後,代它執行特權指令。所以使用者模式與核心模式之間的界線,實際上正是「你可以自己執行哪些指令、不可以執行哪些指令」的界線。

關閉中斷的指令是特權指令。核心用它幾微秒來保護一次細緻的更新。如果一個使用者程式嘗試同一條指令,硬體會引發陷阱而非服從——否則任何應用程式都能悄悄凍住計時器,永遠霸佔 CPU。

同一條指令,對核心是允許的,對應用程式則是禁止的。

一條指令是否為特權指令,是由 CPU 的架構決定,而非作業系統。一個設計正確的指令集,必須讓所有危險操作都成為特權指令——只要有一條漏掉而成為非特權,保護就有了破洞。

又称
protected instructionsupervisor instruction受保護指令