x86-64 Linuxカーネルでコンテキスト切り替え中に実行状態はどのように保存されますか?

x86-64 Linuxカーネルでコンテキスト切り替え中に実行状態はどのように保存されますか?

TSS は x86-64 のレジスタ値を保存しないため、コンテキスト切り替えが発生したときにこれらのレジスタの値はどのように保存されますか?

答え1

汎用レジスタはほとんどスタックに保持されます。PUSH_REGSそしてstruct pt_regs。実際の用途を検索するにはPUSH_AND_CLEAR_REGSと を検索しますPOP_REGS

残りの CPU 状態は次の場所に保存されます。thread_struct

Linuxは可能な限りTSSを防ぎます(初期の32ビットx86バージョンではそれを使用しましたが、ずっと前に変更されました)。

関連情報