【火哥学习笔记】任务门

idt 表中除了 中断门,陷阱门 之外,还有 任务门,任务是一个抽象的概念,他既可以是进程,也可以是线程,简言之,它指的是一系列共同达到某一目的的操作。

而在需要的时候需要通过任务门来切换任务,具体流程如下:

一、通过call指令调用任务门

任务门的结构:

其中的TYPE位置 (上边的第8~11位) 为e(h) = 0101(5) 决定了这个描述符的的类型是 任务门

二、通过任务门描述符中的TSS选择子 访问GDT 找到TSS描述符

TSS选择子结构 就是 段选择子的结构

TSS描述符结构 就是 段描述符的结构

三、通过TSS选择符的偏移找到TSS结构体

TSS结构体:

四、保存当前任务的状态,也就是将当前状态保存到当前tr寄存器指向的TSS结构体中 (tr寄存器保存的是当前TSS段选择子)

五、更新状态为新的TSS中的状态,更新内容包括通用寄存器、标志寄存器EFLAGS、段寄存器、指令指针寄存器EIP、栈指针寄存器ESP,以及局部描述符表寄存器LDTR等

六、tr寄存器指向新的任务的TSS,之后开始执行新的任务

补充:TSS描述符的DPL必须是0,所以只有CPL是0才能切换任务(还未做实验验证