任务切换为64位

mmk*_*mmk 9 x86-64 tss

在x86中,您可以使用TSS在正在运行的进程之间切换任务,但是,建议仅使用一个TSS(如您所愿)并执行软件任务切换,尤其是当您要将内核移植到其他硬件时没有TSS.

在x86-64(64位)中,没有TSS(例如它在x86中没有做任何事情),所以,如果没有它,有人会怎么做任务切换(以前,你会使用至少一个)?

Ada*_*ras 8

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

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

对于您正在切换的任务,并为您要切换的任务恢复相同的任务.

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


chb*_*er0 6

实际上,似乎在64位模式下存在TSS,它只是不用于硬件上下文切换; 相反,它只是用于指定内核的堆栈,如果发生转移到更高权限级别的话.

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