2014-08-19 96 views
8

在x86中,您可以使用TSS在正在運行的進程之間切換任務,但是,建議僅使用一個TSS(如必要)並執行軟件任務切換,特別是如果要端口內核給其他沒有TSS的硬件。在x86-64(64位)中,沒有TSS(例如它在x86中沒有做任何事情),所以,如果沒有它,人們會怎麼做任務切換(因爲以前,你會用在至少有一個)?64bit中的任務切換

回答

7

你會做它,你會做其他任何平臺上以同樣的方式:你存儲相應的寄存器的內容:

  • 堆棧指針
  • 指令指針
  • 取其常規 - 目的寄存器是適當的架構
  • 需要維護的任何其他狀態(FPU/MMX/SSE寄存器等)

用於您要切換的任務,併爲要切換到的任務恢復相同。

通常這是通過將所有狀態推入您要切換的堆棧並將其從您要切換的堆棧中彈出來完成的。這樣,只有堆棧指針需要被內核傳遞或管理,才能跟蹤後臺正在等待的內容。

5

Actually, it seems there is a TSS in 64 bit mode,它只是不用於硬件上下文切換;相反,它只是用來指定內核的堆棧,以及何時發生更高權限級別的轉移。

但是,您仍然必須使用軟件上下文切換來更改不同任務之間的控制。