保護機制

簡介


概觀

由保護模式的名稱,就可以看出保護機制的重要性。保護機制可以減少系統當機,加強作業系統的穩定性,還可以幫忙找出程式的問題。IA-32 的保護機制,基本上是架構在「特權等級」上(在 segment 有四個等級,而在 page 有兩個等級)。因此,作業系統可以把重要的核心、系統程式、服務等等部分,放在具較高的特權等級的 segment 中;而把一般的應用程式放在特權等級最低的 segment 中。處理器會阻止等級較低的 segment 任意對等級較高的 segment 進行存取。這樣一來,就可以避免一個不正常的應用程式,破壞了整個系統。
在存取一記憶體位址之前,就會開始進行檢查。如果有任何違反保護規則的情形,就會發出例外(exception)。保護的規則包括:邊界檢查、型態檢查、特權等級檢查、可定址空間限制、程序進入點限制、和指令集限制。這些檢查和位址轉換是同時進行的,所以對執行效能不會有影響。
要進入保謢模式,只要把 CR0 的 PE(protection enable,第 0 bit)設為 1 就可以開啟 segment 保護。在保護模式中,並沒有什麼方法可以把保護機制暫時開啟或關閉。如果不想使用任何保護功能,可以把所有的 segment 的特權等級都設定為 0(最高的等級),這樣會取消 segment 和 segment 之間的檢查動作。不過,邊界檢查和型態檢查還是會有作用。
分頁的保謢,也是在開啟分頁功能之後,就會自動作用。同樣的,也沒有特別的方法可以暫時關閉或開啟分頁的保護機制。不過,就像 segment 一樣,可以把 CR0 的 WP(write protect,第 16 bit)設為 0,再把所有的分頁的 U/S 和 R/W 旗標都設為 1(參考「記憶體管理」的「分頁機制」)。這樣會把所有的分頁設定成可寫入、且在 user level 中,如此一來,分頁的保護機制就等於沒有作用了。