任务状态段TSS的格式

任务状态段TSS的格式

Content #

在一个多任务的环境中,当任务切换发生时,必须保护旧任务的运行状态,或者说是保护现场,保护的内容包括通用寄存器、段寄存器、栈指针寄存器ESP、指令指针寄存器EIP、状态寄存器EFLAGS,等等。否则的话,等下次该任务又恢复执行时,一切都会变得茫然而毫无头绪。

为了保存任务的状态,并在下次重新执行时恢复它们,每个任务都应当用一个额外的内存区域保存相关信息,这叫做任务状态段(Task State Segment:TSS)。任务状态段TSS 具有固定的格式,最小尺寸是104 字节,下图中所标注的偏移量是十进制的。

处理器用TR 寄存器来指向当前任务的TSS。

当任务切换发生的时候,TR 寄存器的内容也会跟着指向新任务的TSS。这个过程是这样的:

  1. 处理器将当前任务的现场信息保存到由TR 寄存器指向的TSS;

2.再使TR 寄存器指向新任务的TSS,并从新任务的TSS 中恢复现场。

比较奇怪的是,为什么这个寄存器叫TR,而不是TSSR。原因很简单,TSS 是一个任务存在的标志,用于区别一个任务和其他任务。所以,这个寄存器叫做任务寄存器(Task Register:TR)。

当特权级变化时,CPU从TSS中加载对应DPL的栈指针(用户态使用ss1+esp1,内核态使用ss0+esp0).

From #

TSS描述符