Linux为什么不通过TSS使用硬件上下文切换?
我阅读了以下声明:
x86体系结构包括一种称为任务状态段(TSS)的特定段类型,用于存储硬件上下文。尽管Linux不使用硬件上下文切换,但是仍然被迫为系统中每个不同的CPU设置一个TSS。
我想知道:
- Linux为什么不使用硬件支持进行上下文切换?
- 硬件方法不是比软件方法快得多吗?
- 是否有任何可以利用硬件上下文切换的操作系统?Windows是否使用它?
最后,一如既往,感谢您的耐心等待和回复。
- - - - - -添加 - - - - - - -
http://wiki.osdev.org/Context_Switching得到了一些解释。
像我一样困惑的人们可以看看它。8 ^)
回答:
x86 TSS对于硬件多任务处理非常慢,与软件任务切换相比几乎没有任何好处。(实际上,我认为手动完成击败了TSS很多次)
TSS的使用也很烦人且乏味,并且即使在x86-64上也不便于移植。Linux旨在于多种体系结构上工作,因此他们可能选择使用软件任务切换,因为它可以以与机器无关的方式编写。而且,软件任务切换为可完成的工作提供了更多功能,并且与TSS相比,通常更易于设置。
我相信Windows 3.1使用了TSS,但至少NT> 5内核没有使用。我不知道任何使用TSS的类Unix操作系统。
请注意,TSS
操作系统要做的事情是创建一个(每个处理器)一个TSS条目,并且每当他们需要切换任务时,它们都只是改变了这个TSS。而且,通过软件任务切换在TSS中使用的唯一字段是ESP0
和SS0
。这用于从环3代码到达环0进行中断。没有TSS,就不会有已知的Ring
0堆栈,这当然会导致GPF并最终导致三重故障。
以上是 Linux为什么不通过TSS使用硬件上下文切换? 的全部内容, 来源链接: utcz.com/qa/422423.html