跳至內容

任務狀態段

維基百科,自由的百科全書

任務狀態段(Task State Segment, TSS)x86架構電腦上是一個保存任務信息的資料結構,被作業系統內核用於任務管理。以下信息保存在任務狀態段中:

  • 暫存器狀態
  • I/O 埠權限
  • 內層堆疊指針
  • 先前的 TSS 連結

如 IA-32 手冊所指明,以上所有信息應當保存在 TSS 中的指定位置。

資料結構

[編輯]

左圖為 x86 平台下任務狀態段的資料結構。其中的欄位( field )有動態( dynamic field )和靜態(static field )之分。當切換到另一個任務的時候,CPU 會自動更新 TSS 中的動態欄位; 而靜態欄位一般從這個任務被創建開始都不會改變。

動態欄位:

  • 通用暫存器 ( General-purpose registers )
  • 段暫存器 ( Segment selector registers )
  • EFLAGS 暫存器
  • EIP 欄位
  • 指向前一個任務( Previous Task Link )欄位

靜態欄位:

任務切換

[編輯]

以下 4 種情況引起任務切換:

  1. 在當前任務中使用 jmp 或 call 指令使用 GDT 中的 TSS 描述符
  2. 在當前任務中使用 jmp 或 call 指令使用 GDT 中的或者當前任務所屬的 LDT 中的任務門描述符 (任務門中有指向 TSS 的 TSS 選擇符)
  3. 指向當前 LDT 中的任務門描述符的中斷或者異常
  4. 當 EFLAGS 暫存器中的 NT 位被設為 1 時,當前任務執行了 IRET 命令