日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

一个操作系统的实现:关于CPL、RPL、DPL

發(fā)布時間:2023/12/13 综合教程 31 生活家
生活随笔 收集整理的這篇文章主要介紹了 一个操作系统的实现:关于CPL、RPL、DPL 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

保護(hù)模式中最重要的一個思想就是通過分級把代碼隔離了起來,不同的代碼在不同的級別 ,使大多數(shù)情況下都只和同級代碼發(fā)生關(guān)系。 Intel
的80286以上的cpu可以識別4個特權(quán)級(或特權(quán)層)
,0級到3級。數(shù)值越大特權(quán)越小。一般用把系統(tǒng)內(nèi)核放在0級,系統(tǒng)的其他服務(wù)程序位于1、2級,3級則是應(yīng)用軟件。一般情況下代碼都在自己的級別下做自己
的工作,同一級別之間可以相互訪問,而一般是不允許不同級別的代碼間隨意訪問的。但有時候不同級別的程序之間一定要訪問,比如系統(tǒng)的接口函數(shù)等,必須能夠
使得應(yīng)用程序能夠隨意調(diào)用。于是Intel將代碼分為:

1.非一致碼:受到隔離的代碼,只能在同一級別間相互訪問

2.一致碼:不受到隔離的就是,允許被同等級或低等級代碼調(diào)用

至于這部分我們下回再詳細(xì)說,這里主要搞清楚RPL、DPL、CPL之間的關(guān)系。

Intel設(shè)置DPL、RPL、CPL以實現(xiàn)分級和權(quán)限檢查。

DPL:描述符特權(quán)(Descriptor Privilege Level)


儲在描述符中的權(quán)限位,用于描述代碼的所屬的特權(quán)等級,也就是代碼本身真正的特權(quán)級。一個程序可以使用多個段(Data,Code,Stack)也可以只
用一個code段等。正常的情況下,當(dāng)程序的環(huán)境建立好后,段描述符都不需要改變——當(dāng)然DPL也不需要改變,因此每個段的DPL值是固定。

RPL:請求特權(quán)級RPL(Request Privilege Level)

RPL保存在選擇子的最低兩位。 RPL
說明的是進(jìn)程對段訪問的請求權(quán)限,意思是當(dāng)前進(jìn)程想要的請求權(quán)限。
RPL


由程序員自己來自由的設(shè)置,并不一定RPL>=CPL,但是當(dāng)RPL<CPL時,實際起作用的就是CPL了,因為訪問時的特權(quán)檢查是判
斷:EPL=max(RPL,CPL)<=DPL是否成立,所以RPL可以看成是每次訪問時的附加限制,RPL=0時附加限制最小,RPL=3時附
加限制最大。所以你不要想通過來隨便設(shè)置一個rpl來訪問一個比cpl更內(nèi)層的段。

因為你不可能得到比自己更高的權(quán)限,你申請的權(quán)限一定要比你實際權(quán)限低才能通過CPU的審查,才能對你放行。所以實際上RPL的作用是程序員可以把自己的程序降級運行——有些時候為了更好的安全性,程序可以在適當(dāng)?shù)臅r機把自身降低權(quán)限(RPL設(shè)成更大的值)。

網(wǎng)上許多人都說在問rpl的作用,我也很暈。Intel的手冊中對RPL的作用只是這樣做的簡短解釋的:

The
RPL can be used to insure that privileged code does not access a
segment on behalf of an application program unless the program itself
has access privileges for that segment.

后來找到了一些資料對這段話進(jìn)行了擴充和舉例,我才明白一些:

對于特權(quán)級高的進(jìn)程RPL是作用是防止自己不小心訪問到一些資料段。比方說,如果進(jìn)程A的CPL=0,它知道它的委托進(jìn)程B的DPL=3,也知道數(shù)據(jù)段C的DPL=2,而這數(shù)據(jù)段是不能讓CPL>2的進(jìn)程訪問的。


么如果你是進(jìn)程A的程序員根本不需要RPL的幫助,也不會試圖讓進(jìn)程A訪問數(shù)據(jù)段C的數(shù)據(jù),
因為這樣做只會浪費時間。當(dāng)然如果你一定要訪問數(shù)據(jù)段C的數(shù)據(jù)然后把數(shù)據(jù)傳給委托進(jìn)程B,這就是你的選擇,你真的可以這樣做,但后果自負(fù)。只是有時候要訪
問的數(shù)據(jù)段我們不知道它的DPL是怎么,也不知道能不能讓進(jìn)程B訪問,其中的一個解決方法就是把委托進(jìn)程B的DPL以RPL的方法告訴數(shù)據(jù)段C讓它決定接
受或不接受。(我想應(yīng)該是通過程序把B的DPL裝入到A的選擇子中,然后再由A去訪問數(shù)據(jù)段C)

CPL:當(dāng)前任務(wù)特權(quán)(Current Privilege Level)


示當(dāng)前正在執(zhí)行的代碼所處的特權(quán)級。CPL保存在CS中的最低兩位,是針對CS而言的。當(dāng)選擇子成功裝入CS寄存器后,相應(yīng)的選擇子中的RPL就變成了
CPL。因為它的位置變了,已經(jīng)被裝入到CS寄存器中了,所表達(dá)的意思也發(fā)生了變——原來的要求等級已經(jīng)得到了滿足,就是當(dāng)前自己的等級。

選擇子可以有許多個,因此RPL也就有許多個。而CPL就不同了,正在執(zhí)行的代碼在某一時刻就只有這個值唯一的代表程序的CPL.

另外特別要求CS與SS的特權(quán)級必須保持一致。對于裝入DS、ES、FS、GS的選擇子INTEL沒有給它們起什么特殊的名稱,我也不知道應(yīng)該叫它們什么,也許可以仍然稱它為RPL。

應(yīng)用RPL實現(xiàn)數(shù)據(jù)段的特權(quán)級保護(hù)的實例


算機軟件一般由操作系統(tǒng)程序和應(yīng)用程序組成。為了組建高可靠性的軟件系統(tǒng),要求操作系統(tǒng)的數(shù)據(jù)不允許被應(yīng)用程序改變,否則,應(yīng)用程序會影響系統(tǒng)的安全運
行,嚴(yán)重時導(dǎo)致系統(tǒng)崩潰瓦解。一個由操作系統(tǒng)程序與應(yīng)用程序組成的軟件如圖1所示。在操作系統(tǒng)程序中有一MOVE過程把一個數(shù)據(jù)段中的數(shù)據(jù)塊寫到另一個數(shù)
據(jù)段中,MOVE過程是通過參數(shù)傳入被調(diào)用的,即 MOVE(destination,source,count)。其中:source
源數(shù)據(jù)塊的邏輯地址;destination 目標(biāo)數(shù)據(jù)塊的邏輯地址;count 傳送的字節(jié)數(shù)







數(shù)據(jù)塊的邏輯地址由數(shù)據(jù)段選擇字對應(yīng)的數(shù)據(jù)段描述符和數(shù)據(jù)塊偏移量所描述。


MOVE過程是操作系統(tǒng)的程序,它可以合法地被操作系統(tǒng)中的其它過程調(diào)用,完成操作系統(tǒng)數(shù)據(jù)段中的數(shù)據(jù)塊移動和操作系統(tǒng)數(shù)據(jù)段與應(yīng)用程序數(shù)據(jù)段中的數(shù)據(jù)塊移動。但是,若MOVE過程被應(yīng)用程序調(diào)用,操作系統(tǒng)數(shù)據(jù)段的數(shù)據(jù)有可能失去保護(hù)作用。設(shè)應(yīng)用程序的典型調(diào)用情形為:

①MOVE(數(shù)據(jù)塊A,數(shù)據(jù)塊1,count)

②MOVE(數(shù)據(jù)塊B,數(shù)據(jù)塊A,count)

③MOVE(數(shù)據(jù)塊2,數(shù)據(jù)塊1,count)

④MOVE(數(shù)據(jù)塊1,數(shù)據(jù)塊A,count)

情形①:應(yīng)用程序通過MOVE過程得到操作系統(tǒng)數(shù)據(jù)塊的信息;

情形②:應(yīng)用程序利用MOVE過程完成應(yīng)用程序數(shù)據(jù)塊之間的數(shù)據(jù)移動;

①、②這二種情形是合法的要求。

情形③:應(yīng)用程序控制了操作系統(tǒng)的工作,沒有按操作系統(tǒng)的工作步驟,強行改變了數(shù)據(jù)塊2的內(nèi)容;

情形④:應(yīng)用程序?qū)?yīng)用程序數(shù)據(jù)塊A的內(nèi)容移動到操作系統(tǒng)數(shù)據(jù)塊1中,自行改變了數(shù)據(jù)塊1的內(nèi)容;

在③、④這二種情形使操作系統(tǒng)的數(shù)據(jù)得不到核心保護(hù),操作系統(tǒng)的數(shù)據(jù)受到了應(yīng)用程序的侵犯。

針對上述的侵權(quán)示例,如何防止應(yīng)用程序改變操作系統(tǒng)的數(shù)據(jù),即情形①和②;并且,應(yīng)用程序能通過調(diào)用操作系統(tǒng)程序中的MOVE過程合法地使用,即情形③和④;這是操作系統(tǒng)軟件設(shè)計中必須考慮的問題。

設(shè)調(diào)用MOVE過程的程序段Proc為:

……

LDS EAX,source ;DS:EAX=source源數(shù)據(jù)塊的邏輯地址

PUSH DS ;壓入source源數(shù)據(jù)塊的選擇字

PUSH EAX ;壓入source源數(shù)據(jù)塊的偏移量

LDS EAX,destination ;DS:EAX=destination目標(biāo)數(shù)據(jù)塊的邏輯地址

PUSH DS ;壓入destination目標(biāo)數(shù)據(jù)塊的選擇字

PUSH EAX ;壓入destination目標(biāo)數(shù)據(jù)塊的偏移量

MOV ECX,count ;ECX=傳送的字節(jié)數(shù)count

PUSH ECX ;壓入傳送的字節(jié)數(shù)count

CALL MOVE ;調(diào)用MOVE過程,MOVE由調(diào)用門描述

……

如果Proc在操作系統(tǒng)程序中,無論source源數(shù)據(jù)塊和destination目標(biāo)數(shù)據(jù)塊屬于操作系統(tǒng)或應(yīng)用程序,都能合法的運作。

如果Proc在應(yīng)用程序中,有可能產(chǎn)生情形③和④。例如,應(yīng)用程序傳入的目標(biāo)數(shù)據(jù)塊選擇字的RPL=0,就意味著應(yīng)用程序要對操作系統(tǒng)的數(shù)據(jù)段進(jìn)行非法寫入。為此,必須在MOVE過程中加以判斷,避免情形③和④的產(chǎn)生。



MOVE過程中采用的處理方法是:目標(biāo)數(shù)據(jù)塊選擇子的RPL應(yīng)以主調(diào)程序的CPL為準(zhǔn)。即采用ARPL指令改目標(biāo)數(shù)據(jù)塊選擇子的RPL為主調(diào)程序的
CPL(關(guān)于ARPL指令的使用說明見最后)。依據(jù)應(yīng)用程序調(diào)用MOVE過程的堆棧,如圖2所示,在MOVE過程始部(開始)加入的指令為:

MOV AX,SS:[ESP+4] ;AX=CS主調(diào)程序的代碼段選擇字

;其RPL字段為主調(diào)程序的CPL

ARPL SS:[ESP+10],AX ;改目標(biāo)數(shù)據(jù)塊選擇子的RPL為主調(diào)程序的CPL

MOV ES,SS:[ESP+10] ;ES=目標(biāo)數(shù)據(jù)塊選擇子(其RPL字段為主調(diào)程序 ;的CPL)

……

進(jìn)
行了上述處理以后,如果應(yīng)用程序傳入的目標(biāo)數(shù)據(jù)塊選擇字的RPL=0,ARPL把它修改為RPL=3,再傳送到ES段寄存器中,顯然不能滿足選擇字的裝載
要求,即MAX(CPL,RPL)≤DPL,其中,MOVE過程的CPL=0;目標(biāo)數(shù)據(jù)塊選擇字對應(yīng)的數(shù)據(jù)段描述符中的DPL=0。CPU內(nèi)部立即產(chǎn)生通
用保護(hù)異常中斷進(jìn)行處理。處理的結(jié)果通常為:終止當(dāng)前的MOVE過程操作,返回應(yīng)用程序;或終止應(yīng)用程序的運行,返回操作系統(tǒng)。從而達(dá)到了保護(hù)目的。而情
形①、②,應(yīng)用程序完全可以合法實現(xiàn)。

[關(guān)于ARPL指令的使用說明]


調(diào)整申請?zhí)貦?quán)級指令: ARPL OPRD1,OPRD2


中,操作數(shù)OPRD1可以是16位通用寄存器或存儲單元,操作數(shù)OPRD2是16位通用寄存器。該指令把操作數(shù)OPRD1和OPRD2視為兩個選擇子,用
OPRD2的RPL去檢查OPRD1的RPL。(選擇子OPRD1和OPRD2的RPL分別由它們的最低2個位規(guī)定。)


果OPRD1的RPL值小于OPRD2的RPL值(OPRD1的特權(quán)級高于OPRD2),那么零標(biāo)志ZF被置1,并把OPRD2的RPL值賦予OPRD1
的RPL(使兩個操作數(shù)的最低2位相等);否則,零標(biāo)志ZF被清0。OPRD1和OPRD2都可為空選擇子。該指令只影響ZF標(biāo)志。

總結(jié)

以上是生活随笔為你收集整理的一个操作系统的实现:关于CPL、RPL、DPL的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 黄色大片91 | 日韩视频一区二区在线观看 | 日韩欧美国产精品综合嫩v 国产小毛片 | xxxxwww一片 | 国产精品69久久久久孕妇欧美 | 成人h动漫在线 | 亚洲春色一区二区三区 | 日韩欧美有码 | 天天射日日操 | 丰满人妻一区二区三区免费视频棣 | 91青青青| 中文字幕一区二区三区人妻电影 | 日本午夜精品 | 又粗又大又硬毛片免费看 | 亚洲30p | 久久久蜜桃一区二区 | 视频在线看 | 一区二区三区啪啪啪 | 国产9区| 青青草视频在线免费观看 | 中文字幕网站在线观看 | 福利片av | 成人在线激情视频 | 日韩天堂在线 | 五月综合久久 | 不卡视频在线观看免费 | 黄色录像网址 | 女仆乖h调教跪趴1v1 | 午夜激情久久 | 素人一区二区三区 | 日本视频一区二区三区 | 中文字幕第六页 | 久久综合影院 | 日韩欧美国产高清 | 国产靠逼视频 | 岛国午夜视频 | 一起操在线观看 | 久艹在线 | 日本久久中文字幕 | 日韩欧美国产成人精品免费 | 少妇毛片一区二区三区粉嫩av | 快播久久| 在线精品视频免费观看 | 国产人妻精品久久久久野外 | 日韩视频一区二区三区四区 | 国产精欧美一区二区三区蓝颜男同 | 午夜色大片 | 玩日本老头很兴奋xxxx | 黄色三级视频网站 | 欧美aⅴ在线 | 一级福利视频 | 窝窝午夜视频 | 亚洲精品久久久乳夜夜欧美 | 国产视频一区二区在线观看 | 中文免费av | 丁香视频在线观看 | 毛片无遮挡高清免费观看 | 老头av | 在线观看中文字幕第一页 | 成人看片网站 | 女大学生的家政保姆初体验 | 日韩逼| 日韩欧美视频二区 | 吸咬奶头狂揉60分钟视频 | 欧美www| 向日葵视频在线播放 | 一级特毛片| 色人阁五月 | 日韩在线1| 97在线观看视频 | 日韩国产欧美一区 | 一极毛片 | 50部乳奶水在线播放 | 自拍超碰 | www.香蕉视频 | 超碰在线亚洲 | 秋霞成人av| h片在线观看网站 | 国产农村妇女精品一区 | 91精品婷婷国产综合久久蝌蚪 | 91另类| 国精产品99永久一区一区 | 免费看裸体网站视频 | 日韩国产欧美在线观看 | 日韩精品第三页 | 精品国产乱码久久久久久郑州公司 | 高潮又黄又刺激 | 欧美日韩国产三级 | 韩国19主播内部福利vip | 麻豆天天躁天天揉揉av | 亚洲精品一区二区三区蜜桃 | av丝袜在线| 毛片视频网站在线观看 | 精品九九九九九 | 欧美丝袜脚交 | 亚洲免费视频网 | 我和单位漂亮少妇激情 | 亚洲欧美少妇 | 欧美草b |