Linux中如何使用/未使用硬件上下文switct?

Linux中如何使用/未使用硬件上下文switct?,linux,linux-kernel,kernel,Linux,Linux Kernel,Kernel,旧的x86 intel体系结构在硬件级别提供了上下文切换(以TSS的形式)。但我已经读到,linux长期以来“放弃”使用硬件上下文切换功能,因为它们优化程度较低,灵活性较低,并且并非在所有ArchiveTexture上都可用 让我困惑的是软件(linux)如何控制硬件操作(保存/恢复上下文)?Linux可以选择而不是通过硬件使用上下文设置,但硬件上下文切换仍然会发生(使得“优化”参数不相关) 另外,如果linux没有使用硬件上下文开关,那么内核如何保存值%eip(指向用户程序中的下一条指令)并恢

旧的x86 intel体系结构在硬件级别提供了上下文切换(以TSS的形式)。但我已经读到,linux长期以来“放弃”使用硬件上下文切换功能,因为它们优化程度较低,灵活性较低,并且并非在所有ArchiveTexture上都可用

让我困惑的是软件(linux)如何控制硬件操作(保存/恢复上下文)?Linux可以选择而不是通过硬件使用上下文设置,但硬件上下文切换仍然会发生(使得“优化”参数不相关)

另外,如果linux没有使用硬件上下文开关,那么内核如何保存值%eip(指向用户程序中的下一条指令)并恢复内核堆栈指针?(反之亦然)

我认为内核甚至在中断服务例程启动之前就需要一些硬件支持来保存用户程序%eip和切换%esp(用户到内核堆栈)寄存器

如果这种支持确实是由硬件提供的,那么linux如何不使用硬件上下文开关呢


非常困惑

呼叫、中断、陷阱和异常保存IP。这些是进入内核的常用方式(但在引导时,您不需要在那里保存IP)。然后您可以手动保存CPU的状态(标志、FPU等)。intel保护方案相当复杂;它源自基于功能的对象处理器iapx432。iapx 286386支持的
对象接口
是出租的,并且有一定的层次性。至少在最小的入侵下分层陷阱和中断门函数——它们在进入内核的过程中切换堆栈;iret在返回用户土地的路上取消了开关。因此,内核所要做的就是在恢复任务之前将tss.sp0指向任务的内核线程,并且它的行为相当正常。这回答了所有的疑问,但不理解linux是如何“禁用”硬件上下文切换的?硬件上下文切换到底意味着什么?这是否意味着只需交换指向任务TSS的寄存器
tr
的值?我已经简要阅读了IA32体系结构手册,但没有发现任何允许软件禁用硬件上下文切换的内容。它没有被禁用,只是没有被使用。看见