任务:任务执行空间与任务状态段(TSS)

任务执行空间包括代码段数据段堆栈和特权信息,任务状态段保存任务的完整信息,如寄存器状态,段寄存器,标志和 IP 等等,为每个特权级保存独立的栈指针,分页的信息和任务链接信息(指向父任务和嵌套任务的指针)

任务切换相比简单的过程调用,它需要保存所有寄存器状态,完全切换到新任务的环境,同时不依赖堆栈

一个实例是时钟中断触发任务调度:(硬件切换)

  1. 中断产生,CPU 保存当前状态到 TSS
  2. 调度器选择下一个任务,加载其 TSS 到 TR 和 CR3
  3. 新任务开始执行,恢复其寄存器状态和内存空间

可以使用下面的方法调度执行一个任务:

  • 使用 CALL 命令明确调用一个任务
  • 使用 JMP 明确的跳转到一个任务(Linux 使用的)
  • 处理器隐含地跳转到一个中断/异常句柄处理任务

任务链

EFLAGS 中的 NT 标志表示当前执行任务是否嵌套在另一个任务中执行,并且当前任务连接字段中存放前一个任务的 TSS

JMP 不会产生嵌套