由于TSS不存储x86-64中寄存器的值,那么当上下文切换发生时,这些寄存器的值是如何保存的呢?
答案1
通用寄存器大多保存在堆栈中;看PUSH_REGS
和struct pt_regs
。要查找实际用途,请查找PUSH_AND_CLEAR_REGS
和POP_REGS
。
其余的CPU状态存储在thread_struct
。
Linux 尽可能避免 TSS(早期的 32 位 x86 版本使用它,但很久以前就改变了)。
由于TSS不存储x86-64中寄存器的值,那么当上下文切换发生时,这些寄存器的值是如何保存的呢?
通用寄存器大多保存在堆栈中;看PUSH_REGS
和struct pt_regs
。要查找实际用途,请查找PUSH_AND_CLEAR_REGS
和POP_REGS
。
其余的CPU状态存储在thread_struct
。
Linux 尽可能避免 TSS(早期的 32 位 x86 版本使用它,但很久以前就改变了)。