特權級保護

特權級

也就是描述符中的DPL(實模式與保護模式

作用:

在進行內存訪問時(保護模式下的內存訪問),用於控制操作或者限制訪問性,其實也就是滿足了特權級的轉換規則,才允許操作,不然就是不合法的內存訪問。

概述:

特權級分爲4級:

特權級級別 通常歸屬的對象
0 操作系統
1 系統服務程序
2 系統服務程序
3 普通用戶程序

P.S.就是因爲分 了4個級,因此描述符中需要2bit來表示
當然這也只是大概的分類,沒有硬性要求,如果不想使用特權級機制,可以把所有段描述符的特權級都設爲0

分類:

DPL:段描述符自身的特權級

CPL:當前特權級(當前執行的代碼所屬的特權級)

RPL:請求特權級,就是發生內存訪問時(保護模式下的內存訪問),訪問之前的代碼段的特權級爲請求特權級

例子:
有兩個段描述符A、B,它們分別都具有自己的DPL,A的DPL是0,B的特權級3,當前正在執行的段爲A,因此CPL爲0,然後A訪問B,訪問之後,現在正在執行的代碼段爲B,因此CPL變爲3,而現在RPL爲0.

特權級檢查規則(保護機制)

1.將控制直接轉移到非依從的代碼段,要求當前特權級(CPL)和請求特權級(RPL)都等於目標代碼段描述符的DPL

在數值上表示爲:
CPL = 目標代碼段描述符的DPL
RPL = 目標代碼段描述符的DPL

2.將控制直接轉移到依從的代碼段,要求CPL和RPL都低於或者等於目標代碼段描述符的DPL

在數值上爲:
CPL >= 目標代碼段描述符的DPL
RPL >= 目標代碼段描述符的DPL

3.高特權級別的程序可以訪問低特權級別的數據段,但低特權級別的不能訪問高特權級別的數據段

在數值上爲:
CPL <= 目標代碼段描述符的DPL
RPL <= 目標代碼段描述符的DPL

4.任何時候,棧段的特權級別必須和CPL相同

在數值上爲:
CPL = 目標代碼段描述符的DPL
RPL = 目標代碼段描述符的DPL

特權級之間的訪問方法

1.同級之間可以相互訪問

直接可以相互訪問

2.低級訪問高級

2.1將高特權級的代碼段定義爲依從的(實模式與保護模式):

要求:CPL必須低於或者等於目標代碼段描述符的DPL。

特點:依從的代碼段不是在它的DPL上運行,而是在調用者的DPL上運行

2.2使用調用門:

使用方法:使用jmp far或者call far

特點:

1.jmp far:不改變CPL
2.call far:CPL會提升到目標代碼段的DPL

要求:當前特權級CPL必須低於或者等於目標代碼段描述符的特權級DPL

3.高級訪問低級(代碼段)

使用調用門:

使用方法:使用jmp far或者call far

特點:

1.jmp far:不改變CPL
2.call far:CPL會提升到目標代碼段的DPL

要求:當前特權級CPL和請求特權級RPL都必須高於或者等於目標代碼段描述符的特權級DPL

在數值上:
CPL >= 目標代碼段描述符的DPL
RPL >= 目標代碼段描述符的DPL

總結

其實,特權級也就和read、write屬性的作用差不多,內存訪問之前,檢測訪問是否合法,然後該怎樣就怎樣做。
本質上,都是用來加強分段機制的安全性。
++++++++++++++++++++++++++++++++++++++++++++++

更新:

看到上面的特權級的介紹就感覺挺麻煩的,對的!是非常非常麻煩,當使用特權級機制後,代碼比沒有用特權級機制,要複雜好多好多。。。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章