2012-12-19 21 views
4

在实践中,许多操作系统被设计成具有为每个线程一个内核堆栈,或者至少为每个CPU。但是对于内核在每次进程陷阱时被锁定的操作系统,似乎没有必要为每个CPU分离内核堆栈。由于内核(具有自己的堆栈)只允许单个CPU访问,所以CPU不应该同时处于内核模式。 CPU始终被阻塞,直到前一个CPU离开并清除内核堆栈,即使在嵌套陷阱情况下也是如此。那么在这种情况下,在这样的操作系统中是否需要多个内核堆栈呢?谢谢。为什么我们需要单独的内核栈为每个CPU

回答

4

你是对的;在这种情况下,只要具有可靠的多核心锁定功能,多个内核堆栈就不会有用。

我们通常拥有多个内核堆栈(即至少为每个线程一个内核堆栈)用于以下目的:

  • 当你想能够拧你的内核和可中断,就像在微内核架构。
  • 当您想要将线程从一个核心迁移到另一个核心时,例如进行负载平衡时。将CPU1的内核堆栈复制到CPU2的内核堆栈会很麻烦。毋庸置疑,它会成为性能杀手,因为你正在为此目的而冻结两个核心。
  • 取决于底层架构上,具有多内核堆栈,使MMU事情变得更容易(AS管理,...)。
1

在实践中,许多操作系统不限制运行的内核级代码的线程数。事实上,放置这个限制会严重限制内核的可扩展性。没有这个限制,需要多个内核堆栈。

此外,在实践中,操作系统可以允许当前在内核模式,它再次栓内核栈给线程而不是处理器执行的线程的抢占和迁移。

如果你正在设计一个操作系统,不具备这些功能,而是限制了内核级执行到单个线程,那么单栈将所有需要。

相关问题