私はいくつかの実験を行い、カーネルモジュールのローカル割り込みを閉じると常にシステムがハングし、 (システムには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つのカーネルモジュールにコードを変更するが、私は別のコンソールを開いたり、その後に何かを行うときに、システムが完全にハングアップします。とき
カナダ以外の国の誰も "ホース"の意味を知らないのですか? – Kaz
こんにちはKaz、あなたの返信のthx。私はすべてのCPUの操作に関する詳細なメカニズムを理解していません。あなたが説明したように、すべてのCPU間の同期に関するいくつかの操作が発生し、残念ながら同時に1つのCPU割り込みが無効になると、システム全体が停止/停止します。おそらくそれが起こりそうなイベントであり、SMPがそれを処理していたはずなので、私はまだそれについて混乱しています。少なくともCPUはそのシナリオに関して1つの例外を投げます。 – Roger
割り込みが必要なため、一部のプロセッサで割り込みが無効になっていると、「すべてのプロセッサでコール関数(* f)()」の操作ができなくなります。 – Kaz