http://hi.baidu.com/study_together/html
段描述符:代碼段描述符、數據段描述符、系統描述符ide
系統描述符:系統段描述符、門描述符post
系統段描述符:局部描述符表(LDT)的段描述符、任務狀態段(TSS)描述符url
門描述符:調用門描述符、中斷門描述符、陷阱門描述符、任務門描述符。spa
部分段限長、基地址被存放在2個或3個位置,將由CPU按照值的高位存放在內存高地址處的規則進行整合。操作系統
1. 段選擇子指針
15...3orm |
2htm |
1...0blog |
索引值 |
TI |
RPL |
(1) 索引值(index):給出了描述符在GDT或LDT中的索引項號;
(2) 表指示標誌TI(Table Index):TI=0 描述符在GDT中,TI=1 描述符在LDT
(3) 請求特權級RPL(Requested Privilege Level):0,1,2,3三個特權級。
2. 段描述符的通常格式(先高32位,後低32位,下同)
31...24 |
23 |
22 |
21 |
20 |
19...16 |
15 |
14...13 |
12 |
11...8 |
7...0 |
基地址 |
G |
D/B |
保留位 |
AVL |
段限長 |
P |
DPL |
S |
TYPE |
基地址 |
31...16 |
15...0 |
基地址 |
段限長 |
3. 數據段描述符
31...24 |
23 |
22 |
21 |
20 |
19...16 |
15 |
14...13 |
12 |
11...8 |
7...0 |
|||
基地址 |
G |
B |
0 |
AVL |
段限長 |
P |
DPL |
1 |
0 |
E |
W |
A |
基地址 |
31...16 |
15...0 |
基地址 |
段限長 |
4. 代碼段描述符:
31...24 |
23 |
22 |
21 |
20 |
19...16 |
15 |
14...13 |
12 |
11...8 |
7...0 |
|||
基地址 |
G |
D |
0 |
AVL |
段限長 |
P |
DPL |
1 |
1 |
C |
R |
A |
基地址 |
31...16 |
15...0 |
基地址 |
段限長 |
5. 系統段描述符
31...24 |
23 |
22 |
21 |
20 |
19...16 |
15 |
14...13 |
12 |
11...8 |
7...0 |
基地址 |
G |
|
0 |
|
段限長 |
P |
DPL |
0 |
TYPE |
基地址 |
31...16 |
15...0 |
基地址 |
段限長 |
6. 任務狀態段TSS描述符
31...24 |
23 |
22 |
21 |
20 |
19...16 |
15 |
14...13 |
12 |
11...8 |
7...0 |
|||
基地址 |
G |
0 |
0(保留) |
AVL |
段限長 |
P |
DPL |
0 |
1 |
0 |
B |
1 |
基地址 |
31...16 |
15...0 |
基地址 |
段限長 |
7. 調用門描述符
31...16 |
15 |
14...13 |
12 |
11...8 |
7...5 |
4...0 |
段中偏移值 |
P |
DPL |
0(S) |
1100(TYPE) |
000 |
參數個數 |
31...16 |
15...0 |
段選擇符 |
段中偏移值 |
8. 中斷門描述符
31...16 |
15 |
14...13 |
12 |
11...8 |
7...5 |
4...0 |
過程入口點偏移值 |
P |
DPL |
|
(TYPE) |
|
|
31...16 |
15...0 |
段選擇符 |
過程入口點偏移值 |
9. 陷阱門描述符
31...16 |
15 |
14...13 |
12 |
11...8 |
7...5 |
4...0 |
過程入口點偏移值 |
P |
DPL |
0(S) |
1111(TYPE) |
000 |
|
10. 任務門描述符
31...16 |
15 |
14...13 |
12 |
11...8 |
7...0 |
|
P |
DPL |
|
|
|
31...16 |
15...0 |
段選擇符 |
(1) G顆粒度標誌(Granularity):肯定段限長字段Limit值的單位,G=0 單位爲B,G=1 單位爲4KB(不影響基地址顆粒度,總爲B);
(2) D/B:對於可執行代碼段,稱爲D標誌,D=0 默認16位地址和16位或8位操做數,D=1 默認32位地址和32位操做數或8位操做數.(指令前綴0x66:選擇非默認值的操做數大小,0x67 選擇非默認值的地址大小);
對於棧段,稱爲B標誌,B=0 使用16位棧指針,B=1 使用32位棧指針.
對於下擴數據段,稱爲B標誌,B=0 堆棧段上界限0xFFFF(64KB),B=1 堆棧段上界限0xFFFFFFFF(4GB)
(32位代碼段和數據段老是設置爲1,16位代碼段和數據段老是設置爲0)
(上擴段:偏移地址 0~段限長
下擴段:偏移地址 段限長~ 最大地址(0xffff或 0xffffffff,根據B標誌決定))
(3) 21保留位:老是設置爲0;
(4) AVL:軟件可利用位。80386對該位的使用未作規定,Intel公司也保證從此開發生產的處理器只要與80386兼容,就不會對該位的使用作任何定義或 規定。
(5) 段限長(Segment limit field):段的長度,有多個段限長字段的由處理器合併;
(6) P段存在標誌(Segment present):p=0 段不在內存中,p=1 段在內存中;
(7) DPL描述符特權級字段(Descriptor privilege level);
(8) S描述符類型標誌(Descriptor type flag):S=0 系統段描述符,S=1 代碼段或數據段描述符
(9) TYPE:段類型字段(Type field)
對於數據段描述符,4bit由高到低,0EWA,E=0 向上擴展 E=1 向下擴展,W=0 只讀W=1 可寫,A=0 未訪問 A=1 已訪問
對於代碼段描述符,4bit由高到低,1CRA,C=0 非一致代碼段C=1 一致代碼段,R=0 只執行R=1執行/可讀,A=0 未訪問 A=1 已訪問
對於TSS描述符,4bit由高到低,10B1 ,B=0 任務處於非活動狀態, B=1 任務正忙
對於系統段描述符和門描述符以下:
十進制 |
二進制 |
說明 |
0 |
0000 |
Reserved,保留 |
1 |
0001 |
16-Bit TSS(Available),16位TSS(可用) |
2 |
0010 |
LDT |
3 |
0011 |
16-Bit TSS(Busy) |
4 |
0100 |
16-Bit Call Gate,16位調用門 |
5 |
0101 |
Task Gate,任務門 |
6 |
0110 |
16-Bit Interrupt Gate,16位中斷門 |
7 |
0111 |
16-Bit Trap Gate,16位陷阱門 |
8 |
1000 |
Reserved |
9 |
1001 |
32-Bit TSS(Available) |
10 |
1010 |
Reserved |
11 |
1011 |
32-Bit TSS(Busy) |
12 |
1100 |
32-Bit Call gate |
13 |
1101 |
Reserved |
14 |
1110 |
32-Bit Interrupt Gate |
15 |
1111 |
32-Bit Trap Gate |