日韩性视频-久久久蜜桃-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)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 精品一区视频 | av优选在线观看 | 国产精品一卡 | 性高潮免费视频 | 欧美专区第二页 | 青草福利 | 日韩小视频在线 | 欧美区在线观看 | 久久精品人妻av一区二区三区 | 绝顶高潮合集videos | 国产色站 | 国产探花在线精品一区二区 | 天堂网在线看 | 伊人网视频在线 | 欧美综合网 | 亚洲欧美另类综合 | 国产精品99久久免费黑人人妻 | 亚洲女同志亚洲女同女播放 | 成人mv在线观看 | 精品一区二区免费视频 | 三级黄色av | 天天摸日日 | 欧美日韩一区二区三区四区 | 四虎影成人精品a片 | 国产美女引诱水电工 | 国产精品美女毛片真酒店 | 国产精品免费一区二区三区 | 手机看片国产1024 | 人妻一区二区三区四区 | 黄色成年视频 | 国产吞精囗交免费视频网站 | 久久福利影视 | 91av片| 成人免费一区二区 | 欧美特黄一级大片 | 久久偷看各类女兵18女厕嘘嘘 | 91av日本| 91porn在线| 男人天堂中文字幕 | 夜夜爽天天干 | 国产精品国产一区二区三区四区 | 俄罗斯精品一区二区三区 | 国产亚洲成人精品 | 日韩成人一区二区三区 | 成人免费午夜视频 | 国产午夜视频在线观看 | 色呦呦免费视频 | 色老头在线观看 | 国产精品宾馆在线 | 日韩极品视频在线观看 | 狂野少女电影在线观看国语版免费 | 永久免费看mv网站入口78 | 日韩欧美在线免费观看 | 日本一区二区在线不卡 | 九九热视频精品在线观看 | 精品久久久久久久久久久久久久久久 | 在线成人中文字幕 | 91视频你懂的 | 国产三级在线观看完整版 | 国产看黄网站 | 天天躁狠狠躁 | 色婷婷av一区二区三区麻豆综合 | 911美女片黄在线观看游戏 | 天天干夜夜夜 | 精品久久久久久久久久久aⅴ | 色资源av | 久久婷综合 | 国产一区二区三区成人 | 熟女精品一区二区三区 | 久久综合成人网 | 一炮成瘾1v1高h | 国产良妇出轨视频在线观看 | 蜜桃av成人| 向日葵视频在线播放 | 免费av黄色 | 日韩视频在线观看视频 | 欧美日韩亚洲另类 | 日日躁夜夜躁白天躁晚上躁91 | 五月婷婷亚洲综合 | 高清国产一区二区 | 日本啪啪动态图 | 妺妺窝人体色WWW精品 | 国产成人精品123区免费视频 | 日本一级三级三级三级 | 久久噜噜噜精品国产亚洲综合 | 中文字幕精品一区 | 在线尤物 | 精品久久久久久久久久久久久久 | 玖玖在线免费视频 | 男人的天堂视频在线观看 | 性欧美ⅴideo另类hd | www.国产.com | 玖玖爱国产 | 调教撅屁股啪调教打臀缝av | 一级黄色网址 | 1级av | 奇米影视在线视频 | 在线视频免费观看一区 | 3d动漫精品啪啪一区二区竹菊 |