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

我阅读了以下声明:

The x86 architecture includes a specific segment type called the Task State Segment (TSS), to store hardware contexts. Although Linux doesn't use hardware context switches, it is nonetheless forced to set up a TSS for each distinct CPU in the system.

我想知道:

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

最后,一如既往,感谢您的耐心和回复。

-----------添加--------------

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

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

最佳答案

x86 TSS 对于硬件多任务处理非常慢,与软件任务切换相比几乎没有任何好处。 (事实上​​,我认为手动操作胜过 TSS 很多次)

TSS 还以使用起来烦人且乏味而著称,而且它不可移植,即使对于 x86-64 也是如此。 Linux 旨在处理多种架构,因此他们可能选择使用软件任务切换,因为它可以以独立于机器的方式编写。此外,软件任务切换提供了比 TSS 更强大的功能,并且通常比 TSS 更容易设置。

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

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

https://stackoverflow.com/questions/2711044/

相关文章:

linux - 在 PHP CLI 中设置 max_execution_time

c++ - 如何在 Linux 中命名线程?

python - 在 Ubuntu 中启动时运行 Python 脚本

c - 为什么 pthread 互斥锁被认为是 "slower"而不是 futex?

linux - 我需要 -D_REENTRANT 和 -pthreads 吗?

linux - 如何在 AWS 上的 Amazon Linux AMI 中自动启动 node.js

linux - 在tmux中绑定(bind)Ctrl+Tab和Ctrl+Shift+Tab

ruby-on-rails - Ruby on Rails - 无法将 "\x89"从 ASCII-

linux - 使用 linux 命令行 (bash) 从网络摄像头拍照

linux - Vagrant 的鸡和蛋 : Shared folder with uid = ap