TSS (任務狀態段)的作用及結構


1.什么是TSS

  TSS全稱Task State Segment ,是操作系統在進行進程切換時保存進程現場信息的段

2.TSS什么時候用,有什么用

  TSS在任務(進程)切換時起着重要的作用,通過它保存CPU中各寄存器的值,實現任務的掛起和恢復。

  比如說,當CPU執行A進程的時間片用完,要切換到B進程時,CPU會先把當前寄存器里的值保存到A進程的TSS里(任務寄存器TR指向當前進程的TSS),比如CS,EIP,ESP,標志寄存器等等,然后掛起A進程。執行B進程。這樣,在CPU下次執行A進程的時候,就可以從其TSS中取出,CPU就知道上一次A進程執行到了什么位置,執行狀態等等,這樣就恢復了上次A進程的執行現場。

3.TSS的結構

TSS的基本格式由104字節組成。這104字節的基本格式是不可改變的,但在此之外系統軟件還可定義若干附加信息。基本的104字節可分為鏈接字段區域、內層堆棧指針區域、地址映射寄存器區域、寄存器保存區域和其它字段等五個區域。   
(1). 寄存器保存區域 寄存器保存區域位於TSS內偏移20H至5FH處,用於保存通用寄存器、段寄存器、指令指針和標志寄存器。當TSS對應的任務正在執行時,保存區域是未定義的;在當前任務被切換出時,這些寄存器的當前值就保存在該區域。當下次切換回原任務時,再從保存區域恢復出這些寄存器的值,從而,使處理器恢復成該任務換出前的狀態,最終使任務能夠恢復執行。 從上圖可見,各通用寄存器對應一個32位的雙字,指令指針和標志寄存器各對應一個32位的雙字;各段寄存器也對應一個32位的雙字,段寄存器中的選擇子只有16位,安排再雙字的低16位,高16位未用,一般應填為0。
(2). 內層堆棧指針區域 為了有效地實現保護,同一個任務在不同的特權級下使用不同的堆棧。例如,當從外層特權級3變換到內層特權級0時,任務使用的堆棧也同時從3級變換到0級堆棧;當從內層特權級0變換到外層特權級3時,任務使用的堆棧也同時從0級堆棧變換到3級堆棧。所以,一個任務可能具有四個堆棧,對應四個特權級。四個堆棧需要四個堆棧指針。 TSS的內層堆棧指針區域中有三個堆棧指針,它們都是48位的全指針(16位的選擇子和32位的偏移),分別指向0級、1級和2級堆棧的棧頂,依次存放在TSS中偏移為4、12及20開始的位置。當發生向內層轉移時,把適當的堆棧指針裝入SS及ESP寄存器以變換到內層堆棧,外層堆棧的指針保存在內層堆棧中。沒有指向3級堆棧的指針,因為3級是最外層,所以任何一個向內層的轉移都不可能轉移到3級。 但是,當特權級由內層向外層變換時,並不把內層堆棧的指針保存到TSS的內層堆棧指針區域。實際上,處理器從不向該區域進行寫入,除非程序設計者認為改變該區域的值。這表明向內層轉移時,總是把內層堆棧認為是一個空棧。因此,不允許發生同級內層轉移的遞歸,一旦發生向某級內層的轉移,那么返回到外層的正常途徑是相匹配的向外層返回。
(3). 地址映射寄存器區域 從虛擬地址空間到線性地址空間的映射由GDT和LDT確定,與特定任務相關的部分由LDT確定,而LDT又由LDTR確定。如果采用分頁機制,那么由線性地址空間到物理地址空間的映射由包含頁目錄表起始物理地址的控制寄存器CR3確定。所以,與特定任務相關的虛擬地址空間到物理地址空間的映射由LDTR和CR3確定。顯然,隨着任務的切換,地址映射關系也要切換。 [Page] TSS的地址映射寄存器區域由位於偏移1CH處的雙字字段(CR3)和位於偏移60H處的字字段(LDTR)組成。在任務切換時,處理器自動從要執行任務的TSS中取出這兩個字段,分別裝入到寄存器CR3和LDTR。這樣就改變了虛擬地址空間到物理地址空間的映射。 但是,在任務切換時,處理器並不把換出任務但是的寄存器CR3和LDTR的內容保存到TSS中的地址映射寄存器區域。事實上,處理器也從來不向該區域自動寫入。因此,如果程序改變了LDTR或CR3,那么必須把新值人為地保存到TSS中的地址映射寄存器區域相應字段中。可以通過別名技術實現此功能。
(4). 鏈接字段 鏈接字段安排在TSS內偏移0開始的雙字中,其高16位未用。在起鏈接作用時,地16位保存前一任務的TSS描述符的選擇子。 如果當前的任務由段間調用指令CALL或中斷/異常而激活,那么鏈接字段保存被掛起任務的 TSS的選擇子,並且標志寄存器EFLAGS中的NT位被置1,使鏈接字段有效。在返回時,由於NT標志位為1,返回指令RET或中斷返回指令IRET將使得控制沿鏈接字段所指恢復到鏈上的前一個任務。
(5). 其它字段 為了實現輸入/輸出保護,要使用I/O許可位圖。任務使用的I/O許可位圖也存放在TSS中,作為TSS的擴展部分。在TSS內偏移66H處的字用於存放I/O許可位圖在TSS內的偏移(從TSS開頭開始計算)。關於I/O許可位圖的作用,以后的文章中將會詳細介紹。 在TSS內偏移64H處的字是為任務提供的特別屬性。在80386中,只定義了一種屬性,即調試陷阱。該屬性是字的最低位,用T表示。該字的其它位置被保留,必須被置為0。在發生任務切換時,如果進入任務的T位為1,那么在任務切換完成之后,新任務的第一條指令執行之前產生調試陷阱。
 
       


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM