我做了一些实验,发现每当我关闭内核模块中的本地中断时,系统会立即挂起,甚至不响应键盘中断。(系统有4个CPU,操作系统是ubuntu 11.10)关闭本地中断应该只会禁用一个CPU(我猜),但我仍然有3个空闲的CPU。(困惑)
与禁用本地中断类似,当我在内核模块中禁用抢占(Preempt_disable)时,系统也不再响应我。当我将一个内核模块中的代码更改为
for(;;)
{
preempt_disable();
/* ---did some thing fast here--- */
preempt_enable()
}系统在开始时会响应我,但当我打开另一个控制台或随后执行其他操作时,系统完全挂起。
发布于 2012-03-29 12:35:22
内核可能想要在所有CPU上执行某个操作,例如RCU同步,或与缓存相关的同步或其他任何操作。那你就完蛋了。
SMP不是一种随意地将处理器据为己有的许可证。
这种事情是可以安排的。我的意思是,就内核而言,你可以有一个不在线的CPU,你可以用它来运行你想要的任何东西。
https://stackoverflow.com/questions/9918654
复制相似问题