实际上,许多操作系统被设计为每个线程具有一个内核堆栈,或者每个CPU至少有一个内核堆栈。但对于每次进程陷阱时内核都被锁定的操作系统,似乎没有必要为每个CPU分离内核堆栈。由于内核(具有自己的堆栈)仅允许单CPU访问,因此CPU不应同时处于内核模式。 CPU始终被阻塞,直到先前的CPU离开并清理内核堆栈,即使在嵌套陷阱的情况下也是如此。那么在这种情况下,在这种操作系统中需要多个内核堆栈吗?感谢。
答案 0 :(得分:6)
你是对的;在这种情况下,只要您具有可靠的多核锁定功能,多个内核堆栈就没有用处。
我们通常有多个内核堆栈(即每个线程至少一个内核堆栈),用于以下目的:
答案 1 :(得分:1)
实际上,许多操作系统不会限制运行内核级代码的线程数。实际上,放置此限制会严重限制内核的可伸缩性。如果没有此限制,则需要多个内核堆栈。
此外,在实践中,操作系统可能允许抢占和迁移当前在内核模式下执行的线程,这再次将内核堆栈绑定到线程而不是处理器。
如果您正在设计一个没有这些功能的操作系统,而是将内核级执行限制为单个线程,那么只需要一个堆栈。