Linux kernel 学习笔记(1) --分段分页保护机制
使用80x86處理器進(jìn)行尋址時牽涉到三種不同的地址,其關(guān)系如下所示
?
邏輯地址------------------->線性地址-------------------------->物理地址
???????????????? (分段)???????????????????????????? (分頁)
分段的保護(hù)機(jī)制:
?
一個邏輯地址由兩部分組成:段標(biāo)識符和偏移量。其中偏移量是一個32位長的字段,段標(biāo)識符是一個16位長的字段,稱為段選擇符,含有一個13位的段描述符索引,一個1位的GDT和LDT指示位和一個兩位的請求者特權(quán)級。
請求者特權(quán)級(RPL)是用來指示當(dāng)前CPU的特權(quán)級。0代表最高優(yōu)先級,3代表最低優(yōu)先級,Linux只用0和3,分別稱之為內(nèi)核態(tài)和用戶態(tài)。
?
為了快速方便的找到段選擇符,處理器提供了段寄存器,段寄存器的唯一目的是存放段選擇符,其中CS寄存器中包含一個兩位的字段,用來指明CPU的當(dāng)前優(yōu)先級(CPL)。
?
段描述符是由8個字節(jié)來表示段的特性,它被保存在全局描述符表(GDT)和局部描述符表(LDT)中,由于段描述符的內(nèi)容較多,在此不一一介紹。關(guān)鍵的有一個兩位表示的描述符特權(quán)級(DPL),主要用于限制對這個段的存取,它表示可以訪問這個段的最小CPU優(yōu)先級。
?
以上三段共提到3個特權(quán)級,分別是RPL、CPL和DPL。是不是有點(diǎn)暈了,不著急,下面說明三個的關(guā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值是固定。
CPL:當(dāng)前特權(quán)級(Current Privilege Level)
是CS?register?里bit?0和bit?1?位組合所得的值.在某一時刻就只有這個值唯一的代表程序的CPL。在Linux系統(tǒng)中代表當(dāng)前處于內(nèi)核態(tài)還是用戶態(tài)。
?
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的作用是程序員可以把自己的程序降級運(yùn)行——有些時候為了更好的安全性,程序可以在適當(dāng)?shù)臅r機(jī)把自身降低權(quán)限(RPL設(shè)成更大的值)。
?
段機(jī)制中使用特權(quán)級實現(xiàn)自己的保護(hù)機(jī)制
?
分頁的保護(hù)機(jī)制:
?
分頁機(jī)制中將32位的線性地址分成3個域
目錄項 (高10位)
頁表項(中10位)
偏移量(低12位)
?
頁目錄項和頁表項具有相同的結(jié)構(gòu)其中與權(quán)限有關(guān)的有:
Read/Write標(biāo)志
讀寫特權(quán),如果為0,表示相應(yīng)頁表或者頁是只讀的,如果為1,則表示可讀寫。
User/Supervisor標(biāo)志
和頁表相關(guān)的特權(quán)級只用兩個,如果該標(biāo)志為0,處于內(nèi)核態(tài)時才能尋址,如果標(biāo)志為1,總能對頁尋址。
總結(jié)
以上是生活随笔為你收集整理的Linux kernel 学习笔记(1) --分段分页保护机制的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 在麻省理工读计算机专业,看美国的计算机教
- 下一篇: linux设备驱动——andriod平台