9

x86 では、実行中のプロセス間のタスク切り替えに TSS を使用できますが、(必要に応じて) 1 つの TSS のみを使用し、ソフトウェア タスク切り替えを実行することをお勧めします。 TSSはありません。

x86-64 (64 ビット) では、TSS はありません (たとえば、x86 のように何もしません)。それで、誰かがそれなしでタスク切り替えを行うにはどうすればよいでしょうか (以前は、少なくとも 1 つを使用していたので)。

4

2 に答える 2

8

他のプラットフォームで行うのと同じ方法で行います。適切なレジスタの内容を保存します。

  • スタックポインタ
  • 命令ポインタ
  • アーキテクチャに適した汎用レジスタ
  • 維持する必要があるその他の状態 (FPU/MMX/SSE レジスタなど)

切り替え先のタスクに対して、切り替え先のタスクに対して同じものを復元します。

多くの場合、これは切り替え元のスタックにすべての状態をプッシュし、切り替え先のスタックからポップすることによって行われます。この方法では、バックグラウンドで待機しているものを追跡するために、スタック ポインターのみをカーネルで渡すか管理する必要があります。

于 2014-08-20T01:54:25.620 に答える
6

実際には、64 ビット モードの TSS があるようですが、ハードウェア コンテキストの切り替えには使用されません。代わりに、より高い特権レベルへの移行が発生した場合にカーネルのスタックを指定するためにのみ使用されます。

ただし、異なるタスク間で制御を変更するには、ソフトウェア コンテキストの切り替えを使用する必要があります。

于 2014-08-20T02:07:23.823 に答える