## 7.6 任务链(Task Linking)
TSS的返回链(back-link)字段和标志字中的NT(nested task)位允许80386自动返回到一个先前调用任务或被中断的任务中去。当一条CALL指令,或中断指令,或内部中断,或一个异常引起了任务切换,到了一个新任务中。80386处理器自动使用当前任务的选择子来填充新作任务的返回链字段,同时设置新任务标志寄存器的NT位。NT位指示出返回字段是否有效。新的任务通过IRET指令放弃当前控制。当解析IRET指令时,386检查NT标志。如果NT位设置,80386切换到由返回字段指示的任务。表7-2总结这些字段的用处。
![](https://box.kancloud.cn/2016-03-06_56dbfdaf51be8.jpg)
### 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实地址模式的不同