すべてのデバイス ドライバーの本には、割り込みルーチンでスリープする関数を使用しないことが記載されています。これらの関数を ISR から呼び出すと、どのような問題が発生しますか?
質問する
164 次
1 に答える
2
ここでの問題は、カーネルの完全なロックダウンです。割り込みハンドラーを実行するとき、カーネルは割り込みコンテキストにあります。つまり、割り込みハンドラーはどのプロセスにも関連付けられていません (現在のマクロは使用できません)。
スリープできる場合、中断されたコードに戻ることはできません。スケジューラはコードに戻る方法を知らないためです。
割り込みハンドラーでロックを保持してからスリープ状態にし、別のプロセスを実行できるようにしてから、再度割り込みハンドラーに入り、ロックを再取得しようとすると、カーネルがデッドロックします。
カーネルのスケジューリングがどのように機能するかについてもっと読み込もうとすると、特定のコンテキストでスリープが禁止されている理由がすぐにわかります。
于 2012-07-02T08:11:46.020 に答える