任务:任务执行空间与任务状态段(TSS)
任务执行空间包括代码段数据段堆栈和特权信息,任务状态段保存任务的完整信息,如寄存器状态,段寄存器,标志和 IP 等等,为每个特权级保存独立的栈指针,分页的信息和任务链接信息(指向父任务和嵌套任务的指针)
任务切换相比简单的过程调用,它需要保存所有寄存器状态,完全切换到新任务的环境,同时不依赖堆栈
一个实例是时钟中断触发任务调度:(硬件切换)
- 中断产生,CPU 保存当前状态到 TSS
- 调度器选择下一个任务,加载其 TSS 到 TR 和 CR3
- 新任务开始执行,恢复其寄存器状态和内存空间
可以使用下面的方法调度执行一个任务:
- 使用 CALL 命令明确调用一个任务
- 使用 JMP 明确的跳转到一个任务(Linux 使用的)
- 处理器隐含地跳转到一个中断/异常句柄处理任务
任务链
EFLAGS 中的 NT 标志表示当前执行任务是否嵌套在另一个任务中执行,并且当前任务连接字段中存放前一个任务的 TSS
JMP 不会产生嵌套