64bit中的任务切换

64bit中的任务切换

问题描述:

在x86中,您可以使用TSS在正在运行的进程之间切换任务,但是,建议仅使用一个TSS(如必要)并执行软件任务切换,特别是如果要端口内核给其他没有TSS的硬件。在x86-64(64位)中,没有TSS(例如它在x86中没有做任何事情),所以,如果没有它,人们会怎么做任务切换(因为以前,你会用在至少有一个)?64bit中的任务切换

你会做它,你会做其他任何平台上以同样的方式:你存储相应的寄存器的内容:

  • 堆栈指针
  • 指令指针
  • 取其常规 - 目的寄存器是适当的架构
  • 需要维护的任何其他状态(FPU/MMX/SSE寄存器等)

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

通常这是通过将所有状态推入您要切换的堆栈并将其从您要切换的堆栈中弹出来完成的。这样,只有堆栈指针需要被内核传递或管理,才能跟踪后台正在等待的内容。

Actually, it seems there is a TSS in 64 bit mode,它只是不用于硬件上下文切换;相反,它只是用来指定内核的堆栈,以及何时发生更高权限级别的转移。

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