9

在 x86 中,您可以使用 TSS 在正在运行的进程之间进行任务切换,但是,建议仅使用一个 TSS(必须这样做)并执行软件任务切换,特别是如果您想将内核移植到其他不支持的硬件没有TSS。

在 x86-64(64 位)中,没有 TSS(例如,它不会像 x86 中那样做任何事情),那么,如果没有它,人们将如何进行任务切换(从以前开始,您至少会使用一个)?

4

2 回答 2

8

您可以像在任何其他平台上一样执行此操作:存储相应寄存器的内容:

  • 堆栈指针
  • 指令指针
  • 适用于架构的通用寄存器
  • 您需要维护的任何其他状态(FPU/MMX/SSE 寄存器等)

对于您要切换的任务,并为您要切换到的任务恢复相同的内容。

通常这是通过将所有状态推送到您要切换的堆栈上,然后将其从您要切换到的堆栈中弹出来完成的。这样,只有堆栈指针需要传递或由内核管理来跟踪后台等待的内容。

于 2014-08-20T01:54:25.620 回答
6

实际上,似乎有一个 64 位模式的 TSS,它只是不用于硬件上下文切换;相反,它仅用于指定内核的堆栈是否以及何时发生向更高特权级别的转移。

但是,您仍然必须使用软件上下文切换来更改不同任务之间的控制。

于 2014-08-20T02:07:23.823 回答