操做系統內核分析【二】 附2.段選擇子與描述符

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):給出了描述符在GDTLDT中的索引項號;

(2) 表指示標誌TI(Table Index)TI=0 描述符在GDT,TI1 描述符在LDT

(3) 請求特權級RPL(Requested Privilege Level)0123三個特權級。

 

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標誌,D0 默認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,E0 向上擴展 E1 向下擴展,W0 只讀W1 可寫,A0 未訪問 A1 已訪問

對於代碼段描述符,4bit由高到低,1CRA,C0 非一致代碼段C1 一致代碼段,R=0 只執行R1執行/可讀,A0 未訪問 A1 已訪問

對於TSS描述符,4bit由高到低,10B1 ,B=0 任務處於非活動狀態, B=1 任務正忙

對於系統段描述符和門描述符以下:

 

 

十進制

二進制

說明

0

0000

Reserved,保留

1

0001

16-Bit TSS(Available),16TSS(可用)

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

相關文章
相關標籤/搜索