第六章
任务管理器
这章描述了IA-32架构任务管理机制。这些机制只在处理器运行于保护模式时有效。
这章关注于32位任务和32位TSS数据结构。对于16位任务和16位TSS数据结构,参照6.6节,16位任务状态段(TSS)。对于64位模式任务管理,参照6.7节,64位模式下的任务管理。
6.1 任务管理器总揽
一个任务是一个处理器可以分派,执行和挂起的工作单元。它可以被用于执行程序,任务或者进程,操作系统服务功能,中断或者异常处理,内核或者执行功能。
IA-32架构提供了保存任务状态的机制,为了分发任务去执行和从一个任务切换到另一个任务。当在保护模式执行时,所有的处理器执行都可以放入一个任务。即便只有一个任务的简单系统。更复杂的系统可以使用处理器任务管理器机制去支持多任务应用。
6.1.1 任务数据结构
一个任务由两部分构成:任务执行空间和任务状态段(TSS)。任务执行空间由一个代码段,一个栈段和一个或者多个数据段构成(参照图6-1)。如果一个操作系统或者执行者使用处理器的特权级保护机制,任务执行空间也给每个特权级提供了一个隔离栈。
TSS规定了组成任务执行空间的段,并且给任务状态信息提供了存储空间。在多任务系统中,TSS也提供了链接任务机制。
一个任务是通过它的TSS段选择子被识别。当一个任务被加载进处理器执行时,段选择子、基址、段限、TSS段描述符属性都会被加载到任务寄存器中(参照2.4.4,任务寄存器(TR))。
如果任务实现了换页,用于任务的页目录基址会被加载进控制寄存器CR3。
[图6-1,任务数据结构]
6.1.2 任务状态
以下项定义了当前正在执行任务的状态
- 任务的当前执行空间,由存于段寄存器(CS、DS、SS、ES、FS和GS)的段选择子定义
- 通用目的寄存器状态
- EFLAGS寄存器状态
- EIP寄存器状态
- 控制寄存器CR3状态
- 任务寄存器状态
- LDTR寄存器状态
- I/O映射基址和I/O映射(保存于TSS)
- 特权级0、1、2栈指针(保存于TSS)
- 上一次执行任务的链接(保存于TSS)
在分发一个任务之前,所有的这些项都会被存于任务TSS,除了任务寄存器的状态。同时,LDTR寄存器的完整内容也不会包含在TSS中,只有LDT段选择子。
6.1.3 执行一个任务
软件或者处理器可以通过以下方式调度任务执行
- 使用CALL指令直接调用任务
- 使用JMP指令直接跳入任务
- 隐式调用(通过处理器)一个中断处理任务
- 隐式调用一个异常处理任务
- 当EFLAGS寄存中的NT标志位被设置时返回(一个IRET指令发起)