任务的调度
软件或处理器可以用以下方式中的任何一种来调度任务执行:
用 CALL 指令显式地调用任务。
用 JMP 指令显式地跳转到任务。
(由处理器)隐式地调用中断处理程序任务。
隐式地调用异常处理程序任务。
EFLAGS 寄存器的NT 标志置位时的任务返回(由IRET 指令发出)。
所有这些调度方法都是用指向任务门或任务TSS 的段选择子来识别被调度的任务的。当用CALL 或JMP 指令调度任务时,指令中的选择子可以直接指向TSS,也可以指向包含TSS
选择子的任务门。通过调度任务来处理中断或异常时,相应中断或异常对应的IDT 项必须包含一个任务门,门中含有指向中断或异常处理程序任务的TSS 的选择子。一个任务被调
度执行时,会自动地在当前任务和被调任务之间发生任务切换。切换时,当前任务的执行环境(称做任务状态或场境(context))保存进其TSS 中,该任务随即被挂起。然后,
处理器加载被调任务的场境到各个寄存器中,从刚加载的EIP寄存器指向的指令处开始执行新任务。若该任务是系统上次初始化以来的首次执行,则EIP 指向任务代码的第一条指
令;否则,指向任务上次被挂起时执行的最后一条指令的下一条指令。如果是由当前任务(调用任务)调用了被调度的任务(被调任务)而发生了任务切换,则把调用任务的TSS
的选择子保存到被调任务的TSS 中,以提供返回调用任务的链接