基礎:作業系統是什麼

雙模式運作

電腦如何讓眾多不受信任的程式在同一硬體上執行,卻不讓其中某個搶走磁碟、抹除記憶體或讓機器停擺?答案是給 CPU 兩種運作模式,並讓硬體本身來執行規則。想像一間有兩套工具的工坊:一套安全工具人人可用,一個上鎖的櫃子裝著危險的電動工具,只有主管能打開。一般程式使用安全的那套;只有受信任、處於特權模式的程式碼,才能打開那個櫃子。

具體來說,CPU 在兩種模式之一中執行。在使用者模式下,程式可以做一般運算並呼叫系統功能,但若它嘗試執行特權指令——直接存取裝置、更改記憶體映射、或關閉中斷——硬體會拒絕,並改為陷入(trap)到作業系統。在核心模式(又稱監督者模式或特權模式)下,程式碼可以執行任何指令,包括特權指令。核心在核心模式中執行;你的應用程式在使用者模式中執行。一個單一的硬體旗標,也就是模式位元,記錄 CPU 目前處於哪種模式,硬體在每次特權操作時都會查看它。

這單一機制是保護的根基。因為硬體在使用者模式下封鎖特權動作,一個行為失常或惡意的程式根本無法直接伸手破壞機器或其他程式——它只能請求核心,而核心可以拒絕。代價是:從使用者模式跨到核心模式(透過系統呼叫或中斷)會花一點時間,所以頻繁的跨越是真實的效能考量。而且保護的強度只等同於核心本身:已在核心模式中執行的程式碼是完全受信任的,因此那裡的瑕疵會繞過整個機制。

某個使用者程式執行一條關閉所有中斷的指令(一條特權指令)。由於模式位元顯示處於使用者模式,CPU 不予服從——它引發一個陷阱,跳進核心,而核心通常會終止這個違規的程式。機器因此保持安全。

執行使用者與核心界線的是硬體本身,而非守規矩的禮貌。

某些 CPU 提供超過兩個特權級(環),但本質的想法仍是同樣的兩層劃分:下面是受信任的核心,上面是不受信任的程式。沒有硬體的模式支援,真正的作業系統保護就不可能實現。

又稱
dual-mode protectiontwo execution modes雙模式保護