我阅读了以下声明:
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.
我想知道:
最后,一如既往,感谢您的耐心和回复。
-----------添加--------------
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中通过软件任务切换使用的唯一字段是ESP0
和SS0
。这用于从 ring 3 代码到 ring 0 进行中断。如果没有 TSS,就不会有已知的 Ring 0 堆栈,这当然会导致 GPF 并最终导致三重故障。
https://stackoverflow.com/questions/2711044/
相关文章:
linux - 在 PHP CLI 中设置 max_execution_time
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-