为什么Linux不通过TSS使用硬件上下文切换?

我读了下面的声明:

x86架构包括称为任务状态段(TSS)的特定段types,用于存储硬件上下文。 尽pipeLinux不使用硬件上下文切换,但仍然被迫为系统中的每个不同的CPU设置TSS。

我想知道:

  • 为什么Linux不使用硬件支持来进行上下文切换?
  • 硬件方法不是比软件方法快得多吗?
  • 有什么操作系统可以利用硬件上下文切换吗? Windows使用它吗?

最后和往常一样,感谢您的耐心和答复。

– – – – – -添加 – – – – – – –

http://wiki.osdev.org/Context_Switching得到了一些解释。

和我一样困惑的人可以看看。 8 ^)

Solutions Collecting From Web of "为什么Linux不通过TSS使用硬件上下文切换?"

x86 TSS对于硬件多任务处理非常缓慢,与软件任务切换相比几乎没有任何优势。 (事实上​​,我认为这样做手动击败了TSS很多次)

TSS也被称为烦人和繁琐的工作,它是不可移植的,即使对于x86-64。 Linux的目标是在多种体系结构上工作,所以他们可能选择使用软件任务切换,因为它可以用独立于机器的方式编写。 此外,软件任务切换提供了更多的权力,可以做什么,一般比TSS更容易设置。

我相信Windows 3.1使用TSS,但至少NT> 5内核不。 我不知道任何使用TSS的类Unix操作系统。

请注意,TSS 是强制性的。 操作系统所做的事情是创建一个TSS条目(每个处理器),每次他们需要切换任务时,他们只是更换这个单一的TSS。 而软件任务切换在TSS中使用的唯一字段是ESP0ESP0 。 这是用来从ring 3代码中获取中断0。 没有TSS,就不会有已知的Ring 0堆栈,这当然会导致GPF并最终导致三重故障。

Linux在1.3之前的时间框架内使用基于硬件的交换。 我相信基于sw的上下文切换更快,而且更灵活。

另一个原因可能是最小化特定于代码的代码。 Linux的第一个非x86架构的端口是Alpha。 Alpha没有TSS,所以更多的代码可以共享,如果所有的拱使用SW切换。 (只是一个猜测)不幸的是,1.2-1.3内核时期的内核更新记录并不完整,所以我不能更具体。

Linux不使用分段内存模型,因此不使用此分段特定功能。

x86 CPU有许多不同类型的上下文切换硬件支持,所以区别不在于硬件与软件,而在于操作系统如何使用可用的各种硬件功能。 没有必要全部使用它们。

Linux非常注重效率,所以你可以打赌,有人已经对每一个可能的选择进行了介绍,而且目前使用的选项是最好的选择。

@Andy – 硬件任务切换的最后一个内核是2.1.108。