2012-03-29 15 views
2

私はいくつかの実験を行い、カーネルモジュールのローカル割り込みを閉じると常にシステムがハングし、 (システムには4つのCPUがあり、OSはubuntu 11.10です)ローカルの割り込みを閉じると、1つのCPUを無効にするだけですが、私はまだ3つのフリーCPUを持っています。1つのローカル割り込みまたはプリエンプションを無効にすると、システム全体が4 cpus応答しなくなる可能性があります

カーネルモジュールでプリエンプション(preempt_disable)を無効にすると、ローカル割り込みは無効になりますが、システムはもはや私に応答しません。私は初めに私に

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

システム応答というコードを持つ1つのカーネルモジュールにコードを変更するが、私は別のコンソールを開いたり、その後に何かを行うときに、システムが完全にハングアップします。とき

答えて

4

カーネルは、RCUの同期やキャッシュ関連の同期など、すべてのCPUで操作を実行したい可能性があります。それからあなたはホースです。

SMPは、プロセッサを不注意に自分自身に騙すライセンスではありません。

そのようなことを整理することができます。つまり、カーネルに関する限りオンラインではなく、好きなものを実行するために使用するCPUを持つことができます。

+0

カナダ以外の国の誰も "ホース"の意味を知らないのですか? – Kaz

+0

こんにちはKaz、あなたの返信のthx。私はすべてのCPUの操作に関する詳細なメカニズムを理解していません。あなたが説明したように、すべてのCPU間の同期に関するいくつかの操作が発生し、残念ながら同時に1つのCPU割り込みが無効になると、システム全体が停止/停止します。おそらくそれが起こりそうなイベントであり、SMPがそれを処理していたはずなので、私はまだそれについて混乱しています。少なくともCPUはそのシナリオに関して1つの例外を投げます。 – Roger

+1

割り込みが必要なため、一部のプロセッサで割り込みが無効になっていると、「すべてのプロセッサでコール関数(* f)()」の操作ができなくなります。 – Kaz

関連する問題