一步步编写操作系统 58 门、调用门与RPL序 3
接前文:
并不是任何當(dāng)前特權(quán)級都可以使用門結(jié)構(gòu), 在使用門結(jié)構(gòu)之前,處理器要例行公事做特權(quán)級檢查,參與檢查的不只是CPL和DPL,還有RPL,為了說清楚這個(gè)檢查過程,咱們得先介紹下RPL。
RPL,即請求特權(quán)級,為了解釋清楚,咱們得多花點(diǎn)工夫好好說道說道。
我們本節(jié)始終在說特權(quán)級轉(zhuǎn)移,處理器從一個(gè)特權(quán)級轉(zhuǎn)移到另一個(gè)特權(quán)級,任意時(shí)刻處理器所處的特權(quán)級稱為當(dāng)前特權(quán)級。重復(fù)敘述的目的是強(qiáng)調(diào)當(dāng)前特權(quán)級是對處理器而言的概念,并不是對代碼段而言。當(dāng)前特權(quán)級CPL是指處理器任意時(shí)刻的身份地位,其變化的原因是處理器從某一特權(quán)級的代碼段轉(zhuǎn)移到另一特權(quán)級的代碼段上運(yùn)行,代碼段的特權(quán)級DPL是未來處理器的CPL。
各種門結(jié)構(gòu)存在的目的就是為了讓處理器提升特權(quán)級,這樣處理器才能夠做一些低特權(quán)級下無法完成的工作。比如,當(dāng)用戶程序想讀取硬盤文件時(shí),由于處理器在執(zhí)行用戶程序時(shí)所處的特權(quán)級為3,一般情況下操作系統(tǒng)不允許用戶程序操作硬盤。此時(shí)必須由用戶代碼指揮處理器使用某種門結(jié)構(gòu)(如調(diào)用門)進(jìn)入0特權(quán)級,在提升了處理器的CPL之后才能控制硬盤、讀取文件。是不是說的有些抽象?其實(shí)就是用戶程序進(jìn)行系統(tǒng)調(diào)用使處理器進(jìn)入內(nèi)核態(tài)執(zhí)行內(nèi)核服務(wù)。
當(dāng)處理器提升為0特權(quán)級時(shí),任何事情都能做,是最強(qiáng)大同時(shí)也是最危險(xiǎn)的狀態(tài),如果用戶程序通過某種門結(jié)構(gòu)使處理器進(jìn)入到0特權(quán)級,它很有可能會被3特權(quán)級的用戶程序利用,這樣用戶程序就有機(jī)會訪問0特權(quán)級下的數(shù)據(jù)。
調(diào)用門是一個(gè)描述符,稱為門描述符,其中記錄的是內(nèi)核服務(wù)程序所在代碼段的選擇子及在代碼段中的偏移地址。門描述符是定義在全局描述符表GDT和局部描述符表LDT中,所以,要想使用調(diào)用門,就要通過門描述符的選擇子,這一點(diǎn)和訪問數(shù)據(jù)段類似,總之,保護(hù)模式下離不開描述符,有描述符就離不開選擇子。
我們平時(shí)很少有人直接和調(diào)用門打交道,大多數(shù)程序員甚至都不知道調(diào)用門是怎么回事,所以在接觸調(diào)用門時(shí)通常會感到有些吃力,這是由三方面造成的:
綜上所述,調(diào)用門是在匯編語言中使用,能發(fā)揮其特長的場所是多段模型,若沒有此方面的編程經(jīng)驗(yàn),大家先提前有個(gè)印象,也沒什么復(fù)雜的,僅僅是大家很少接觸而已。
總結(jié)
以上是生活随笔為你收集整理的一步步编写操作系统 58 门、调用门与RPL序 3的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何将C语言翻译成汇编语言,如何把汇编语
- 下一篇: 一步步编写操作系统 62 函数调用约定