1. 程式人生 > >Intel CPU的保護模式

Intel CPU的保護模式

2)保護機制

為了支援多工,對各任務實施保護是必需的。從80286開始,處理器就具備了保護機制。保護機制能有效地實現不同任務之間的保護和同一任務內的保護。

1.不同任務之間的保護

保護的一個重要方面是應用程式之間的保護。虛擬地址到實體地址的對映函式在每個任務中進行定義,隨著任務切換,對映函式也切換。任務A的虛擬地址空間對映到實體地址空間的某個區域,而任務B的虛擬地址空間對映到實體地址空間的另外區域,彼此獨立,互不相干。因此,兩個不同的任務,儘管虛擬儲存單元地址相同,但實際的物理儲存單元地址可以不同。

每個任務各有一組獨立的對映表,即具有不同的地址轉換函式。在x86上, 每個任務都有自己的段表及頁表。當處理器進行切換並執行新的任務時,這種任務切換的一個重要部分,就是為新任務切換任務的轉換表。為了使作業系統與所有的 應用程式相隔離,可以把作業系統儲存在一個單一的任務中。然而,我們即將看到,在一個任務內操作的保護機制,更適合於保護作業系統,使其不被應用程式破 壞。這種機制,使作業系統由所有任務共享,並且可在每一任務中對其進行訪問,而且仍然保護了作業系統,使其不被應用程式破壞。這種保護作業系統的方法,是 把作業系統儲存在虛擬地址空間的一個公共區域,然後,再使每一任務按此區域分配一個同樣的虛擬地址空間,並進行同樣的虛擬

--實體地址對映。各個任務公用的這部分虛擬地址空間,被稱為全域性地址空間。

僅由一個任務佔有的虛擬地址空間部分,即不被任何其它任務共享的虛擬地址部分,稱為區域性地址空間。區域性地址空間包含的程式碼和資料,是任務私有的,需要與系統中的其它任務相隔離。

每個任務中有不同的區域性地址空間。因此,兩個不同的任務中,對同一虛擬地址的訪問,實際上轉換為不同的實體地址。這就使作業系統對每個任務的儲存器,可以賦予相同的虛擬地址,仍然保證任務的隔離。另一方面,對全域性地址空間中同一虛擬地址的訪問,在所有任務中都轉換為同樣的實體地址,從而支援公共的程式碼及資料的共享,例如對作業系統的共享。

2.同一任務內的保護

在一個任務之內,定義有四種執行特權級別,用於限制對任務中的段進行訪問。按照包含在段中的資料的重要性和程式碼的可信程度,給段指定特權級別。把最高的特 權級別分配給最重要的資料段和最可信任的程式碼段。具有最高特權級別的資料,只能由最可信任的程式碼訪問。給不重要的資料段和一般程式碼段分配較低的特權級別。 具有最低特權級別的資料,可被具有任何特權級別的程式碼訪問。

特權級別用數字0123表示,數字0表示最高特權級別,而數字3表示最低特權級別,即數字較大的級別具有較低的特權。為了避免模糊和混淆,在比較特權級別時,不使用大於小於這樣的術語,而使用裡面內層這樣的術語表示較高特權級,級別的數字較小;使用

外面外層這樣的術語表示較低特權級別,級別的數字較大。0級為最內層的特權級別,3級為最外層的特權級別

每一特權級都有各自獨立的程式堆疊,以避免與共享棧區有關的保護問題。當一個程式從一個特權級切換到另一個特權級執行時,程式使用的堆疊,從原特權級的棧段改變為新特權級的棧段。對於堆疊段暫存器 SS來說,描述符特權級(DPL)必須等於當前程式碼段的特權級(CPL)。從一個特權級切換到另一特權級的方法將在控制轉移方法一文中描述。

每個儲存器段都與一個特權級別相聯絡。特權級別限制是指,只有足夠級別的程式,才可對相應的段進行訪問。在任何時候,一個任務總是在四個特權級之一下執行,任務在特定時刻的特權級稱為當前特權級 (Current Privilege level),標記為CPL,即當前執行程式的特權級。每當一個程式試圖訪問一個段時,就把CPL與要訪問的段的特權級進行比較,以決定是否允許這一訪問。對給定CPL執行的程式,允許訪問同一級別或外層級別的資料段。

雖然應用程式都在最外層,但由於各個不同的應用程式儲存在不同的虛擬地址空間中,所以各應用程式被隔離保護。