## 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、 在任务切换时,保证要么两个页都在内存中,要么都不在内存中。如果两个页面都不在内存中的话,缺页中断处理程序必须在重起用于任务切换的指令前把两页都读入内存中。
![](https://box.kancloud.cn/2016-03-06_56dbfdae027fd.gif)
![](https://box.kancloud.cn/2016-03-06_56dbfdae13033.gif)
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的话将产生一个异常。
![](https://box.kancloud.cn/2016-03-06_56dbfdae027fd.gif)
- 第一章 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实地址模式的不同