久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

任務(wù)門,,調(diào)用門,中斷門,,陷阱門

 木芙蓉的圖書館 2011-04-18

 任務(wù)門,,調(diào)用門,中斷門,,陷阱門 

每個任務(wù)有一個任務(wù)狀態(tài)段TSS,,用于保存任務(wù)的有關(guān)信息,在任務(wù)內(nèi)變換特權(quán)級和任務(wù)切換時,,要用到這些信息,。為了控制任務(wù)內(nèi)發(fā)生特權(quán)級變換的轉(zhuǎn)移,為了控制任務(wù)切換,一般要通過控制門進(jìn)行這些轉(zhuǎn)移,。本文將介紹任務(wù)狀態(tài)段和控制門,。

<一>系統(tǒng)段描述符

系統(tǒng)段是為了實現(xiàn)存儲管理機制所使用的一種特別的段。在80386中,,有兩種系統(tǒng)段:任務(wù)狀態(tài)段TSS和局部描述符表LDT段,。用于描述系統(tǒng)段的描述符稱為系統(tǒng)段描述符。

1.系統(tǒng)段描述符的格式

系統(tǒng)段描述符的一般格式如下表所示,。

 

系統(tǒng)段
描述符
m+7m+6m+5m+4m+3m+2m+1m+0
Base(31...24)AttributesSegment Base(23...0)Segment Limite(15...0)

 

系統(tǒng)段
描述符
的屬性
Byte m+6Byte m+5
BIT7BIT6BIT5BIT4BIT3BIT2BIT1BIT0BIT7BIT6BIT5BIT4BIT3BIT2BIT1BIT0
GX0AVLLimit(19...16)PDPLDT0TYPE

 

與存儲段描述符相比,,它們很相似,區(qū)分的標(biāo)志是屬性字節(jié)中的描述符類型位DT的值,。DT=1表示存儲段,,DT=0表示系統(tǒng)段。系統(tǒng)段描述符中的段基地址和段界限字段與存儲段描述符中的意義完全相同,;屬性中的G位,、AVL位、P位和DPL字段的作用也完全相同,。存儲段描述符屬性中的D位在系統(tǒng)段描述符中不使用,,現(xiàn)用符號X表示。系統(tǒng)段描述符的類型字段TYPE仍是4位,,其編碼及表示的類型列于下表,,其含義與存儲段描述符的類型卻完全不同。

 

系統(tǒng)段
類   型
類型編碼說       明
0未定義
1可用286TSS
2LDT
3忙的286TSS
4286調(diào)用門
5任務(wù)門
6286中斷門
7286陷阱門
 
系統(tǒng)段
類   型
類型編碼說       明
8未定義
9可用386TSS
A未定義
B忙的386TSS
C386調(diào)用門
D未定義
E386中斷門
F386陷阱門

 

從上表可見,,只有類型編碼為2,、1、3,、9和B的描述符才是真正的系統(tǒng)段描述符,,它們用于描述系統(tǒng)段LDT和任務(wù)狀態(tài)段TSS,其它類型的描述符是門描述符,。
利用前文定義的存儲段描述符結(jié)構(gòu)類型DESC仍能方便地在程序中說明系統(tǒng)段描述符,。需要注意的是,系統(tǒng)段描述符的選擇子不能用來讀寫系統(tǒng)段,,要想讀寫系統(tǒng)段,,必須使用別名技術(shù)。

2.LDT段描述符

LDT段描述符描述任務(wù)的局部描述符表段,。例如:下面的描述符LDTABLE描述一個局部描述符表段,,基地址是654321H,以字節(jié)為單位的界限是1FH,,描述符特權(quán)級是0,。
LDTABLE  DESC  <1FH,4321H,65H,82H,,>
LDT段描述符必須安排在全局描述符表中才有效。在裝載LDTR寄存器時,描述符中的LDT段基地址和段界限等信息被裝入LDT段描述符高速緩沖寄存器中,。

3.任務(wù)狀態(tài)段描述符

任務(wù)狀態(tài)段TSS用于保存任務(wù)的各種狀態(tài)信息,。任務(wù)狀態(tài)段描述符描述某個任務(wù)狀態(tài)段TSS描述符分為286TSS和386TSS兩類。TSS描述符規(guī)定了任務(wù)狀態(tài)段的基地址和任務(wù)狀態(tài)段的大小等信息,。例如,,下面的描述符TempTask描述一個可用的386任務(wù)狀態(tài)段,基地址是123456H,,以字節(jié)為單位的界限是104,,描述符特權(quán)級是0。
TempTask  DESC  <104,3456H,12H,89H,,>
在裝載任務(wù)狀態(tài)段寄存器TR時,,描述符中的段基地址和段界限等信息被裝入到TR的高速緩沖寄存器中,。在任務(wù)切換或執(zhí)行LTR指令時,要裝載TR寄存器,。
TSS描述符中的類型規(guī)定:TSS要么為“忙”,,要么為“可用”。如果一個任務(wù)是當(dāng)前正執(zhí)行的任務(wù),,或者是用TSS中的鏈接字段沿掛起任務(wù)鏈接到當(dāng)前任務(wù)上的任務(wù),,那么該任務(wù)是“忙”的任務(wù),;否則該任務(wù)為“可用”任務(wù),。
利用段間轉(zhuǎn)移指令JMP和段間調(diào)用指令CALL,直接通過TSS描述符或通過任務(wù)門可實現(xiàn)任務(wù)切換,。

<二>門描述符

除存儲段描述符和系統(tǒng)段描述符外,,還有一類門描述符。門描述符并不描述某種內(nèi)存段,,而是描述控制轉(zhuǎn)移的入口點,。這種描述符好比一個同向另一代碼段的門。通過這種門,,可實現(xiàn)任務(wù)內(nèi)特權(quán)級的變換和任務(wù)間的切換,。所以,這種門描述符也稱為控制門,。

1.門描述符的一般格式

門描述符的一般格式如下圖所示,。門描述符只有位于描述符內(nèi)偏移5的類型字節(jié)與系統(tǒng)段保持一致,也由該字節(jié)標(biāo)示門描述符和系統(tǒng)段描述符,。該字節(jié)內(nèi)的P和DPL的意義與其它描述符種中的意義相同,。其它字節(jié)主要用于存放一個48位的全指針(16位的選擇子和32位的偏移量)。

 

門描述符m+7m+6m+5m+4m+3m+2m+1m+0
Offset(31...16)AttributesSelectorOffset(15...0)

 

門描述
符屬性
Byte m+5Byte m+4
BIT7BIT6BIT5BIT4BIT3BIT2BIT1BIT0BIT7BIT6BIT5BIT4BIT3BIT2BIT1BIT0
PDPLDT0TYPE000Dword Count

 

根據(jù)上圖給出的門描述符的結(jié)構(gòu),,可定義如下的門描述符結(jié)構(gòu)類型:
GATE     STRUC      ;門結(jié)構(gòu)類型定義
    OFFSETL  DW      0  ;32位偏移的低16位
    SELECTOR DW      0  ;選擇子
    DCOUNT   DB      0  ;雙字計數(shù)字段
    GTYPE    DB      0  ;類型
    OFFSETH  DW      0  ;32位偏移的高16位
    GATE     ENDS
利用門描述符結(jié)構(gòu)類型GATE能方便地在程序中說明門描述符,。
例如,下面的門描述符SUBRG描述一個386調(diào)用門,門內(nèi)的選擇子是10H,,入口偏移是123456H,,門描述符特權(quán)級是3,雙字計數(shù)是0,。
SUBRG    GATE  <3456,10H,,8CH+60H,12H>
從上述描述符類型的列表中可見,,門描述符又可分為:任務(wù)門、調(diào)用門,、中斷門和陷阱門,,并且除任務(wù)門外,其它描述符還各分成286和386兩種,。

2.調(diào)用門

調(diào)用門描述某個子程序的入口,。調(diào)用門內(nèi)的選擇子必須實現(xiàn)代碼段描述符,調(diào)用門內(nèi)的偏移是對應(yīng)代碼段內(nèi)的偏移,。利用段間調(diào)用指令CALL,,通過調(diào)用門可實現(xiàn)任務(wù)內(nèi)從外層特權(quán)級變換到內(nèi)層特權(quán)級。
在上圖所示的門描述符內(nèi)偏移4字節(jié)的位0至位4是雙字計數(shù)字段,,該字段只在調(diào)用門描述符中有效,,在其它門描述符中無效。主程序通過堆棧把入口參數(shù)傳遞給子程序,,如果在利用調(diào)用門調(diào)用子程序時引起特權(quán)級的轉(zhuǎn)換和堆棧的改變,,那么就需要將外層堆棧中的參數(shù)復(fù)制到內(nèi)層堆棧。該雙字計數(shù)字段就是用于說明這種情況發(fā)生時,,要復(fù)制的雙字參數(shù)的數(shù)量,。

3.任務(wù)門

任務(wù)門指示任務(wù)。任務(wù)門內(nèi)的選擇子必須指示GDT中的任務(wù)狀態(tài)段TSS描述符,,門中的偏移無意義,。任務(wù)的入口點保存在TSS中。利用段間轉(zhuǎn)移指令JMP和段間調(diào)用指令CALL,,通過任務(wù)門可實現(xiàn)任務(wù)切換,。

4.中斷門和陷阱門

中斷門和陷阱門描述中斷/異常處理程序的人口點。中斷門和陷阱門內(nèi)的選擇子必須指向代碼段描述符,,門內(nèi)的偏移就是對應(yīng)代碼段的人口點的偏移,。中斷門和陷阱門只有在中斷描述符表IDT中才有效。關(guān)于中斷門和陷阱門的區(qū)別將在以后的文章中論述,。

<三>任務(wù)狀態(tài)段

任務(wù)狀態(tài)段(Task State Segment)是保存一個任務(wù)重要信息的特殊段,。任務(wù)狀態(tài)段描述符用于描述這樣的系統(tǒng)段。任務(wù)狀態(tài)段寄存器TR的可見部分含有當(dāng)前任務(wù)的任務(wù)狀態(tài)段描述符的選擇子,,TR的不可見的高速緩沖寄存器部分含有當(dāng)前任務(wù)狀態(tài)段的段基地址和段界限等信息,。
TSS在任務(wù)切換過程中起著重要作用,,通過它實現(xiàn)任務(wù)的掛起和恢復(fù)。所謂任務(wù)切換是指,,掛起當(dāng)前正在執(zhí)行的任務(wù),,恢復(fù)或啟動另一任務(wù)的執(zhí)行。在任務(wù)切換過程中,,首先,,處理器中各寄存器的當(dāng)前值被自動保存到TR所指定的TSS中;然后,,下一任務(wù)的TSS的選擇子被裝入TR,;最后,從TR所指定的TSS中取出各寄存器的值送到處理器的各寄存器中,。由此可見,,通過在TSS中保存任務(wù)現(xiàn)場各寄存器狀態(tài)的完整映象,實現(xiàn)任務(wù)的切換,。
任務(wù)狀態(tài)段TSS的基本格式如下圖所示,。

 



務(wù)



態(tài)















BIT31—BIT16BIT15—BIT1BIT0Offset
0000000000000000鏈接字段0
ESP04
0000000000000000SS08
ESP10CH
0000000000000000SS110H
ESP214H
0000000000000000SS218H
CR31CH
EIP20H
EFLAGS24H
EAX28H
ECX2CH
EDX30H
EBX34H
ESP38H
EBP3CH
ESI40H
EDI44H
0000000000000000ES48H
0000000000000000CS4CH
0000000000000000SS50H
0000000000000000DS54H
0000000000000000FS58H
0000000000000000GS5CH
0000000000000000LDTR60H
I/O許可位圖偏移000000000000000T64H

 

從圖中可見,TSS的基本格式由104字節(jié)組成,。這104字節(jié)的基本格式是不可改變的,,但在此之外系統(tǒng)軟件還可定義若干附加信息?;镜?04字節(jié)可分為鏈接字段區(qū)域,、內(nèi)層堆棧指針區(qū)域、地址映射寄存器區(qū)域,、寄存器保存區(qū)域和其它字段等五個區(qū)域,。

1.寄存器保存區(qū)域

寄存器保存區(qū)域位于TSS內(nèi)偏移20H至5FH處,,用于保存通用寄存器,、段寄存器、指令指針和標(biāo)志寄存器,。當(dāng)TSS對應(yīng)的任務(wù)正在執(zhí)行時,,保存區(qū)域是未定義的;在當(dāng)前任務(wù)被切換出時,,這些寄存器的當(dāng)前值就保存在該區(qū)域,。當(dāng)下次切換回原任務(wù)時,再從保存區(qū)域恢復(fù)出這些寄存器的值,,從而,,使處理器恢復(fù)成該任務(wù)換出前的狀態(tài),最終使任務(wù)能夠恢復(fù)執(zhí)行,。
從上圖可見,,各通用寄存器對應(yīng)一個32位的雙字,,指令指針和標(biāo)志寄存器各對應(yīng)一個32位的雙字;各段寄存器也對應(yīng)一個32位的雙字,,段寄存器中的選擇子只有16位,,安排再雙字的低16位,高16位未用,,一般應(yīng)填為0,。

2.內(nèi)層堆棧指針區(qū)域

為了有效地實現(xiàn)保護(hù),同一個任務(wù)在不同的特權(quán)級下使用不同的堆棧,。例如,,當(dāng)從外層特權(quán)級3變換到內(nèi)層特權(quán)級0時,任務(wù)使用的堆棧也同時從3級變換到0級堆棧,;當(dāng)從內(nèi)層特權(quán)級0變換到外層特權(quán)級3時,,任務(wù)使用的堆棧也同時從0級堆棧變換到3級堆棧。所以,,一個任務(wù)可能具有四個堆棧,,對應(yīng)四個特權(quán)級。四個堆棧需要四個堆棧指針,。
TSS的內(nèi)層堆棧指針區(qū)域中有三個堆棧指針,,它們都是48位的全指針(16位的選擇子和32位的偏移),分別指向0級,、1級和2級堆棧的棧頂,,依次存放在TSS中偏移為4、12及20開始的位置,。當(dāng)發(fā)生向內(nèi)層轉(zhuǎn)移時,,把適當(dāng)?shù)亩褩V羔樠b入SS及ESP寄存器以變換到內(nèi)層堆棧,外層堆棧的指針保存在內(nèi)層堆棧中,。沒有指向3級堆棧的指針,,因為3級是最外層,所以任何一個向內(nèi)層的轉(zhuǎn)移都不可能轉(zhuǎn)移到3級,。
但是,,當(dāng)特權(quán)級由內(nèi)層向外層變換時,并不把內(nèi)層堆棧的指針保存到TSS的內(nèi)層堆棧指針區(qū)域,。實際上,,處理器從不向該區(qū)域進(jìn)行寫入,除非程序設(shè)計者認(rèn)為改變該區(qū)域的值,。這表明向內(nèi)層轉(zhuǎn)移時,,總是把內(nèi)層堆棧認(rèn)為是一個空棧。因此,,不允許發(fā)生同級內(nèi)層轉(zhuǎn)移的遞歸,,一旦發(fā)生向某級內(nèi)層的轉(zhuǎn)移,,那么返回到外層的正常途徑是相匹配的向外層返回。

3.地址映射寄存器區(qū)域

從虛擬地址空間到線性地址空間的映射由GDT和LDT確定,,與特定任務(wù)相關(guān)的部分由LDT確定,,而LDT又由LDTR確定。如果采用分頁機制,,那么由線性地址空間到物理地址空間的映射由包含頁目錄表起始物理地址的控制寄存器CR3確定,。所以,與特定任務(wù)相關(guān)的虛擬地址空間到物理地址空間的映射由LDTR和CR3確定,。顯然,,隨著任務(wù)的切換,地址映射關(guān)系也要切換,。
TSS的地址映射寄存器區(qū)域由位于偏移1CH處的雙字字段(CR3)和位于偏移60H處的字字段(LDTR)組成,。在任務(wù)切換時,處理器自動從要執(zhí)行任務(wù)的TSS中取出這兩個字段,,分別裝入到寄存器CR3和LDTR,。這樣就改變了虛擬地址空間到物理地址空間的映射。
但是,,在任務(wù)切換時,,處理器并不把換出任務(wù)但是的寄存器CR3和LDTR的內(nèi)容保存到TSS中的地址映射寄存器區(qū)域。事實上,,處理器也從來不向該區(qū)域自動寫入,。因此,如果程序改變了LDTR或CR3,,那么必須把新值人為地保存到TSS中的地址映射寄存器區(qū)域相應(yīng)字段中,。可以通過別名技術(shù)實現(xiàn)此功能,。

4.鏈接字段

鏈接字段安排在TSS內(nèi)偏移0開始的雙字中,,其高16位未用。在起鏈接作用時,,地16位保存前一任務(wù)的TSS描述符的選擇子,。
如果當(dāng)前的任務(wù)由段間調(diào)用指令CALL或中斷/異常而激活,那么鏈接字段保存被掛起任務(wù)的 TSS的選擇子,,并且標(biāo)志寄存器EFLAGS中的NT位被置1,使鏈接字段有效,。在返回時,,由于NT標(biāo)志位為1,返回指令RET或中斷返回指令I(lǐng)RET將使得控制沿鏈接字段所指恢復(fù)到鏈上的前一個任務(wù),。

5.其它字段

為了實現(xiàn)輸入/輸出保護(hù),,要使用I/O許可位圖,。任務(wù)使用的I/O許可位圖也存放在TSS中,作為TSS的擴展部分,。在TSS內(nèi)偏移66H處的字用于存放I/O許可位圖在TSS內(nèi)的偏移(從TSS開頭開始計算),。關(guān)于I/O許可位圖的作用,以后的文章中將會詳細(xì)介紹,。
在TSS內(nèi)偏移64H處的字是為任務(wù)提供的特別屬性,。在80386中,只定義了一種屬性,,即調(diào)試陷阱,。該屬性是字的最低位,用T表示,。該字的其它位置被保留,,必須被置為0。在發(fā)生任務(wù)切換時,,如果進(jìn)入任務(wù)的T位為1,,那么在任務(wù)切換完成之后,新任務(wù)的第一條指令執(zhí)行之前產(chǎn)生調(diào)試陷阱,。

6.用結(jié)構(gòu)類型定義TSS

根據(jù)上圖給出的任務(wù)狀態(tài)段TSS的結(jié)構(gòu),,可定義如下的TSS結(jié)構(gòu)類型:
;----------------------------------------------------------------------------
;任務(wù)狀態(tài)段結(jié)構(gòu)類型定義
;----------------------------------------------------------------------------
TSS             STRUC
TRLink          DW      0      ;鏈接字段
                DW      0      ;不使用,置為0
TRESP0          DD      0      ;0級堆棧指針
TRSS0           DW      0      ;0級堆棧段寄存器
                DW      0      ;不使用,置為0
TRESP1          DD      0      ;1級堆棧指針
TRSS1           DW      0      ;1級堆棧段寄存器
                DW      0      ;不使用,置為0
TRESP2          DD      0      ;2級堆棧指針
TRSS2           DW      0      ;2級堆棧段寄存器
                DW      0      ;不使用,置為0
TRCR3           DD      0      ;CR3
TREIP           DD      0      ;EIP
TREFlag         DD      0      ;EFLAGS
TREAX           DD      0      ;EAX
TRECX           DD      0      ;ECX
TREDX           DD      0      ;EDX
TREBX           DD      0      ;EBX
TRESP           DD      0      ;ESP
TREBP           DD      0      ;EBP
TRESI           DD      0      ;ESI
TREDI           DD      0      ;EDI
TRES            DW      0      ;ES
                DW      0      ;不使用,置為0
TRCS            DW      0      ;CS
                DW      0      ;不使用,置為0
TRSS            DW      0      ;SS
                DW      0      ;不使用,置為0
TRDS            DW      0      ;DS
                DW      0      ;不使用,置為0
TRFS            DW      0      ;FS
                DW      0      ;不使用,置為0
TRGS            DW      0      ;GS
                DW      0      ;不使用,置為0
TRLDTR          DW      0      ;LDTR
                DW      0      ;不使用,置為0
TRTrip          DW      0      ;調(diào)試陷阱標(biāo)志(只用位0)
TRIOMap         DW      $+2    ;指向I/O許可位圖區(qū)的段內(nèi)偏移
TSS             ENDS

 

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點,。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報,。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多