## 7.1 任務狀態段(Task State Segment)
用來管理任務的所有信息都被保存在一個特別的段中,任務狀態段(TSS)。圖7-1 顯示了80386的TSS的格式(另一種類型用來執行80286任務,參看第13章)
TSS 狀態段由兩部分組成:
1、 動態部分,處理器在每次任務切換時會設置這些字段值:
+ 通用寄存器(EAX, ECX, EDX, EBX, ESP, EBP, ESI, EDI)。
+ 段寄存器(ES,CS,SS,DS,FS,GS)
+ 狀態寄存器(EFLAGS)
+ 指令指針(EIP)
+ 前一個執行的任務的TSS段的選擇子(只有當要返回時才更新)。
2、 靜態字段,處理器讀取,但從不更改。這些字段包括:
+ 任務的LDT選擇子
+ 頁目錄基址寄存器(PDBR)(當啟用分頁時,只讀)
+ 內層堆棧指針,特權級0-2
+ T-位,指示了處理器在任務切換時是否引發一個調試異常。(關于調試信息,參看第12章)
+ I/O 位圖基址(關于I/O位圖的信息,請參看第8章)
任務狀態段可以位于線性地址的任意處。唯一一個要注意的問題是,當TSS跨了一個頁的邊界時,而且第二個頁面又不存在時。在這種情況下,當處理器在任務切換時,讀一個TSS如果發現頁不存在的話,則引發一個異常。這樣的異常可以通過以下兩種方法來避免:
1、? 把TSS只分配到一個頁面中,以使它不跨越頁邊界。
2、? 在任務切換時,保證要么兩個頁都在內存中,要么都不在內存中。如果兩個頁面都不在內存中的話,缺頁中斷處理程序必須在重起用于任務切換的指令前把兩頁都讀入內存中。


7.2? TSS 描述符(TSS Descriptor)
和其它段一樣,任務狀態段也是用一個描述符來定義的。圖7-2顯示了TSS描述符的格式。
類型字段中的B-位指出任務是否忙。類型字段為9指出了一個不忙的任務。類型字段為11指出了忙的任務。任務是不可重入的。B-位可以使處理器檢測到一個向忙的任務切換的操作。
BASE,LIMIT,DPL,字段和G-位、還有P-位,與其它數據段描述符的作用類似。LIMIT字段,必須大于或等于103。如果在任務切換中,發現任務描述符的界限字段小于103字節的話,處理器引發異常。更大的界限是允許的,如果I/O許可位圖存在的話,更大的界限就昌必要的了。如果系統軟件想要在TSS中存放額外的數據的話,更大的界限也是可能的。
一個能訪問TSS描述符的子程序可以引起任務切換。在大多數系統中,TSS的DPL字段應該設置為0,所以只有最受信任的軟件才能做任務切換。
有訪問一個TSS的特權,并不意味著可以讀或更改TSS。讀和更新一個TSS段必須用另一個描述符來重定義成一個數據段。任何想要把TSS描述符加載到一個段寄存器(CS,SS,DS,ES,FS,GS)將產生異常。
TSS描述符只能位于GDT中。如果用一個選擇子而且TI=1(指示在當前的LDT內)來標識一個TSS的話將產生一個異常。

- 第一章 80386介紹
- 1.1 該手冊的組織結構
- 1.2 其他文獻
- 第二章 編程基本模型
- 2.1 存儲器組織和段
- 2.2 數據類型
- 2.3 寄存器
- 2.4 指令格式
- 2.5 操作數選擇
- 2.6 中斷和異常
- 第4章 系統寄存器
- 4.1 系統寄存器 (System Registers)
- 4.2 系統指令 (System Instructions)
- 第五章 內存管理
- 5.1 分段地址轉換(Segment Translation)
- 5.2 分頁地址轉換(Page Translation)
- 5.3 混合分段和分頁地址轉換(Combining Segment and Page Translation)
- 第六章 內存管理
- 6.1 為什么要保護(Why Protection?)
- 6.2 80386保護機制概述(Overview of 80386 Protection Mechnaisms)
- 6.3 段級保護(Segment-Level Protection)
- 6.4 頁級保護(Page-Level Protection)
- 6.5 混合分頁和分段保護(Combining Page and Segment Protection)
- 第7章 多任務(Multitasking)
- 8.1 I/O 尋址(I/O Addressing)
- 7.1 任務狀態段(Task State Segment)
- 7.3 任務寄存器(Task Register)
- 7.4 任務門描述符(Task Gate Descriptor)
- 7.5 任務切換(Task Switching)
- 7.6 任務鏈(Task Linking)
- 7.7 任務尋址空間(Task Address Space)
- 第8章 輸入 輸出
- 8.2 I/O 指令(I/O Instructions)
- 8.3 保護和I/O(Protection and I/O)
- 第9章 異常和中斷(Exceptions and Interrupts)
- 9.1 識別中斷(Identifying Interrupts)
- 9.2 允許和禁止中斷(Enabling and Disabling Interrupts)
- 9.3 同時發生的中斷和異常的優先級(Priority Among Simultaneous Interrupts and Exceptions)
- 9.4 中斷描述符表(Interrupt Descriptor Table)
- 9.5 IDT 描述符(IDT Descriptors)
- 9.6 中斷任務和中斷子程序(Interrupt Tasks and Interrupt Procedures)
- 9.7 出錯碼(Error Code)
- 9.8 異常條件(Exception Conditions)
- 9.9 異常總結(Exception Summary)
- 9.10 出錯碼總結(Error Code Summary)
- 第10章 初始化(Initialization)
- 10.1 復位后處理器狀態(Processor State After Reset)
- 10.2 實模式初始化(Software Initialization for Real-Address Mode)
- 10.3 切換到保護模式(Switching to Protected Mode)
- 10.4 保護模式初始化(Software Initialization for Protected Mode)
- 10.5 初始化示例
- 10.6 TLB測試
- 第十四章 80386實地址模式
- 14.1 物理地址構成
- 14.2 寄存器和指令
- 14.3 中斷和異常處理
- 14.4 進入和離開實地址模式
- 14.6 實地址模式異常
- 14.7 與8086的不同
- 14.8 與80286實地址模式的不同