## 7.6 任務鏈(Task Linking)
TSS的返回鏈(back-link)字段和標志字中的NT(nested task)位允許80386自動返回到一個先前調用任務或被中斷的任務中去。當一條CALL指令,或中斷指令,或內部中斷,或一個異常引起了任務切換,到了一個新任務中。80386處理器自動使用當前任務的選擇子來填充新作任務的返回鏈字段,同時設置新任務標志寄存器的NT位。NT位指示出返回字段是否有效。新的任務通過IRET指令放棄當前控制。當解析IRET指令時,386檢查NT標志。如果NT位設置,80386切換到由返回字段指示的任務。表7-2總結這些字段的用處。

### 7.6.1 忙位防止了環(Busy Bit Prevents Loops)
TSS描述符的B-位(busy bit)保證了返回字段的完整性。返回鏈可能會很深,這種情況發生在一個中斷任又被別的任務中斷時,或一個被調用的任務又調用別的任務時。忙位可以讓CPU檢測到這樣發生一個環的情況。環的形成是指試圖進入一個已忙的任務。但是TSS是不可重入的。
處理器照以下方法使用忙位:
1、? 當任務切換時,處理器自動設置新任務的忙位。
2、? 當任務切換時,如果舊任務沒有位于返回鏈上的話(也就是說引起任務切換的是一條JMP或IRET指令)處理器自動清除舊任務的忙位。如果任務位于返回鏈上,忙位被保留。
3、? 當向一個任務切換時,如果處理器發現新任務的忙位設置,則引發一個異常。
通過這些操作,處理器防止了任務切換到自已或是到一個已在任務鏈上的任務,所以防止了非法的任務重入。
忙位對于多處理器環境也是有效的,因為處理器在清除或設置忙位時會自動鎖定總線。這樣的操作可以防止2個處理器同時喚醒同一個任務(關于多處理器,請參看第11章)。
### 7.6.2 修改任務鏈(Modifying Task Linkages)
所有對返回鏈和忙位的修改都應是由最受信任的代碼來操作的。這樣的修改可能會使一個被中斷的任務比一個中斷它的任務先恢復執行。受信任代碼必須在以下兩種方針下將一個任務從返回鏈中移去:
1、? 首先修改中斷任務的返回鏈字段,然后清楚被移除的任務的描述符的忙位。
2、? 保證在修改返回鏈和忙位時,沒有中斷發生。
- 第一章 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實地址模式的不同