一个任务由两部分组成
- 任务执行空间,由代码段,栈段,和一个或多个数据段组成
- 任务状态段(TSS)
如果操作系统使用处理器特权级机制,那么任务执行空间会对每个特权级提供不同的栈(实际上是对0, 1, 2三个特权级分别提供不同的栈)
注,用户程序的特权级是3,不是上述三个栈中的任何一个,而是SS : ESP表示的栈
一个正在被执行的任务状态包括
- 任务当前执行的空间,由各种段选择子决定(CS, DS, SS, ES, FS和GS)。在线性地址空间中,是一个段空间
- 通用寄存器状态,包括EAX, ECX, EDX, EBX, ESP, ESI和EDI的值
- EIP寄存器的状态,即EIP的值
- CR3控制寄存器的值
- 任务寄存器(TR)的状态
- LDTR寄存器的状态
- I/O内存映射的基地址(包含在TSS中),(共享内存?)
- 三个栈指针,分别指向特权级0, 1, 2的栈地址
- 上一个被执行的任务的link(地址)
任务状态中”上一个被执行的任务的link”指的是
当任务A使用CALL指令调用任务B时,在任务B的任务状态中会包含任务A的地址,以便于当B执行完成后可以返回到任务A接着执行。很像汇编中CALL指令调用函数时将下一条语句的地址入栈。