7.6.1 特權(quán)級(jí)保護(hù)鏈的使用方法
如前所述,Pentium具有用0~3個(gè)序號(hào)所表示的4個(gè)特權(quán)級(jí)組成的保護(hù)鏈結(jié)構(gòu)。這個(gè)結(jié)構(gòu)如圖79所示,每個(gè)任務(wù)都是分離的。其中特權(quán)級(jí)0是最高可靠性的特權(quán)級(jí);
3級(jí)是最低特權(quán)級(jí)。
DPL(Descriptor Privilege Level:描述符特權(quán)級(jí)),如前說明,存放在DPL域中。
CPL(Current PrivilegeLevel:現(xiàn)行特權(quán)級(jí)),用以表示現(xiàn)行程序代碼段的特權(quán)級(jí)別(但除一致段以外),存放在CS及SS段寄存器的選擇器域。
RPL(Requested PrivilegeLevel:請(qǐng)求特權(quán)級(jí)),用選擇器的RPL域表示。
7.6.2 保護(hù)機(jī)構(gòu)的分類
1.段屬性和界限保護(hù)
2.特權(quán)級(jí)之間的保護(hù)
3.任務(wù)間的保護(hù)
7.6.3 段存取時(shí)的保護(hù)
1.裝載段寄存器時(shí)的檢查
在用JMP/CALL/RET及IRET指令向段外轉(zhuǎn)移而要更新CS寄存器內(nèi)容時(shí),或者用傳送指令裝入寄存器FS,GS,SS,DS,ES時(shí),都要進(jìn)行保護(hù)檢查。
“MOVDS,AX”指令執(zhí)行時(shí)的檢查過程如圖7.24所示。

2. 實(shí)地址計(jì)算時(shí)的檢查 所謂實(shí)地址計(jì)算檢查,就是對(duì)段寄存器描述符寄存器所指定的段進(jìn)行存取操作時(shí)所作的檢查。



7.6.4 用軟件強(qiáng)化保護(hù)功能
1. ARPL指令
ARPL指令具有兩個(gè)操作數(shù),第一個(gè)操作數(shù)為16位的存貯器變量或字寄存器;第二個(gè)操作數(shù)為字寄存器。這兩個(gè)操作數(shù)分別表示兩個(gè)選擇符。執(zhí)行本指令時(shí),
將兩選擇符的RPL進(jìn)行比較。若第一個(gè)選擇符的RPL小于第二個(gè)選擇符的RPL,則第一個(gè)選擇符的RPL值增為第二個(gè)選擇符的RPL值且標(biāo)志位ZF=1,否則,第一個(gè)選
擇符的RPL保持不變且ZF=0。利用ARPL指令功能,可以對(duì)操作系統(tǒng)數(shù)據(jù)進(jìn)行保護(hù)。請(qǐng)看下面的程序:
DELETE PROC FAR WC()
ENTEP 0,0
MOV AX,[BP+4];取調(diào)用者的CS選擇器(AX寄存器低2位為3)
ARPL[BP+6],AX; 將處于[BP+6]單元的選擇器參數(shù)RPL域的低2位值調(diào)整為3
MOVDS,[BP+6]; 將調(diào)整后的選擇器裝入DS寄存器發(fā)生一般保護(hù)異常中斷
…
2. 用VERR及VERW指令檢查段地址屬性
VERR和VERW指令都帶有用來指定選擇器的操作數(shù)(寄存器或存貯器),用以對(duì)選擇器指定的描述符所確定的段屬性進(jìn)行檢查。
當(dāng)DPL≥max(CPL,RPL),且操作數(shù)的選擇器所指定的描述符是數(shù)據(jù)段或可讀段的描述符時(shí),用VERR指令可使零標(biāo)志位(ZF位)置位;若不滿足上述條件,零標(biāo)志位就清零。
當(dāng)DPL≥max(CPL,RPL)時(shí),且操作數(shù)的選擇器所指定的描述符是可寫數(shù)據(jù)段的描述符時(shí),使用VERW指令就可使零標(biāo)志位置位;若不是可寫數(shù)據(jù)段則零標(biāo)志位就清零。
3. 用LSL及LAR指令確認(rèn)段的有效范圍
LSL及LAR指令都帶兩個(gè)操作數(shù)。第一個(gè)操作數(shù)是寄存器;第二個(gè)操作數(shù)是存貯器或寄存器。
