关于一致/非一致代码段与TSS 关系的个人看法
【0】概念定義
0.1)一致代碼段:
簡單理解,就是操作系統拿出來被共享的代碼段,可以被低特權級的用戶直接調用訪問的代碼, 但是特權級高的程序不允許訪問特權級低的數據.
通常這些共享代碼,是”不訪問”受保護的資源和某些類型異常處理。比如一些數學計算函數庫,為純粹的數學運算計算,
被作為一致代碼段.
一致代碼段的限制作用
1.特權級高的程序不允許訪問特權級低的數據:核心態不允許調用用戶態的數據.
2.特權級低的程序可以訪問到特權級高的數據.但是特權級不會改變:用戶態還是用戶態.0.2)非一致代碼段:
為了避免低特權級的訪問而被操作系統保護起來的系統代碼.
非一致代碼段的限制作用
1.只允許同級間訪問.
2.絕對禁止不同級訪問:核心態不用用戶態.用戶態也不使用核心態. (調用門除外)
[problem] 那低特權級段如何對高特權級的非一致代碼段進行訪問呢?
通常低特權代碼必須通過 “門” 來實現對高特權代碼的訪問和調用.0.3)門
為了對具有不同特權級的代碼段提供受控的訪問,處理器提供了稱為門描述符的特殊描述符集,有4種門描述符:- 1. 調用門(call gate), 類型TYPE=12: 用于在不同特權級間實現受控的程序控制轉移;
- 2. 陷阱門(trap gate),類型TYPE=15:用于調用異常和中斷的處理程序;
- 3. 中斷門(interrupt gate),類型TYPE=14:用于調用異常和中斷的處理程序;
- 4. 任務門(task gate),類型TYPE=5:用于任務切換;
Example-看個荔枝:
E1)問題:代碼A調用代碼B,運用調用門G,而調用門G相當于一個選擇子的角色(看它的數據結構,你就知道);
當然,要知道,代碼A調用代碼B,實際上是通過jmp selector:0 跳轉到代碼B的, 而selector存儲在調用門G中;
E2)調用過程如下:
- (1)而代碼A 訪問 G時,相當于訪問一個數據段,要求代碼A的CPL和RPL都小于或等于DPL_G,即CPL和RPL需要更高的特權級上。(數值上而言)
- (2)接著,還要比較CPL和DPL_B;
- (2.1)若B是一致代碼段的話,要求DPL_B <= CPL;
- (2.2)如果是非一致代碼段的話,call指令和jmp指令又有不同;
- (2.2.1)call調用,要求DPL_B <= CPL
- (2.2.2)jmp調用,要求DPL_B = CPL
in a word: 通過調用門和call指令,可以實現從low level 到 high level 的轉移, 無論目標代碼是一致還是非一致。(干貨)
- 0.4)TSS描述符
1)使用調用或跳轉指令,任何可以訪問TSS 描述符的程序都可以進行任務切換。
2)可以訪問TSS 描述符的程序其 CPL 必須小于或等于 TSS描述符的 DPL, 要知道, 大多數系統中, TSS描述符的DPL字段 設置成小于 3, 這樣一來,只有具有特權級的軟件可以執行任務切換操作;
軟件或處理器可以使用如下方法來調度一個任務的執行:
(1)使用CALL 指令明確調用一個任務;
(2)使用JMP 指令明確跳轉到一個任務(Linux 內核使用的方式);
(3)(由處理器)隱含地調用一個中斷句柄處理任務;
(4)隱含地調用一個異常句柄處理任務;
任務門描述符
- 0)定義:任務門描述符中的TSS 選擇子字段指向 GDT 中的一個TSS 段描述符, 這個TSS選擇子中的RPL不用;
- 1)任務門描述符中的 DPL 用于在任務切換時控制對 TSS 段的訪問:
- 1.1)當程序通過任務門調用或跳轉到一個任務時,程序的CPL 以及 指向任務門的門選擇子的RPL值 必須小于等于任務門描述符的DPL;
- 1.2)程序可以通過任務門描述符或TSS段描述符來訪問一個任務;
【2】關聯關系
Attention(感覺os的 程序(被調用者), 和程序(調用者)是關聯數據庫中的多對多的關系)(干貨)
- A1)首先, 要知道 操作系統的程序有些是共享的,有些是非共享的;而程序的調用者,有些調用者是可以訪問非共享程序,有些調用者是不可以訪問非共享程序的;而所有調用者都可以訪問共享程序。(一致代碼段就是共享的, 非一致代碼段就是非共享的)
- A2)顯然,os 通過設置高特權級來保護某些程序,以防被不使用TSS機制的低特權級程序調用, 而通過設置低特權級來共享某些程序;
A3)通過TSS 實現任務切換,給低特權級的調用者和高特權級的被調用者搭建起了一個橋梁;
那 os 如何實現允許某些調用者訪問非共享的程序呢?
那就引入了TSS機制來允許低特權級的調用者訪問高特權級的被調用者;
程序員創建TSS描述符, TSS選擇子, TSS所占的內存空間,然后調用者通過調用TSS選擇子(裝有TSS選擇子的任務門描述符的選擇子) 實現低特權級轉移到高特權級;
因為-Reason:
- R1)未引入門或TSS機制前, CPU的 特權級檢查規則是:調用者的CPL 和 被調用者選擇子的RPL 去和 被調用者的DPL 進行比較,檢驗;(具體規則,這里略去)
- R2)引入TSS 機制后, CPU的特權級檢查規則是:
- R2.1)若使用 TSS選擇子 實現任務切換:調用者的CPL 必須小于或等于TSS描述符的DPL;
- R2.2)若使用 裝有調用TSS選擇子的任務門描述符 實現任務切換:調用者的CPL和指向任務門的門選擇子的RPL 必須小于等于任務門描述符的DPL,注意,當使用任務門時,目標TSS段描述符的DPL忽略不用;
- R3)總結:如果使用TSS機制實現任何切換的話, 調用者的特權級和被調用者的特權級完全是隔開的, 沒有任何比較或檢驗的規則在里面;
總結
以上是生活随笔為你收集整理的关于一致/非一致代码段与TSS 关系的个人看法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ddos工具手机(指尖ddos工具)
- 下一篇: 万网空间怎么续费(万网空间怎么续费会员)