为什么禁用一个本地中断或抢占会导致整个系统4 cpu无响应

我做了一些实验,发现只要closures内核模块中的本地中断,系统就会立即挂起,甚至不响应键盘中断(系统有4个CPU,操作系统是Ubuntu 11.10)。closures本地中断应该只是让一个CPU禁用(我猜),但我仍然有3个免费的CPU(困惑)。

与禁用本地中断类似,当我禁用内核模块中的抢占(preempt_disable)时,系统也不再响应。 当我改变代码在一个内核模块的代码

for(;;) { preempt_disable(); /* ---did some thing fast here--- */ preempt_enable() } 

系统一开始就回应我,但是当我打开另一个控制台或随后执行其他操作时,系统完全挂起。

Solutions Collecting From Web of "为什么禁用一个本地中断或抢占会导致整个系统4 cpu无响应"

内核可能想要在所有的CPU上执行一个操作,比如RCU同步或者缓存相关的同步等。 然后你被洗净了

SMP不是不小心将处理器花费在自己身上的许可证。

这种事情可以安排。 我的意思是你可以有一个CPU不在线,就内核而言,你可以用它来运行你想要的任何东西。