5

カーネル モードと ISR Routine 内で重要なすべきこととすべきでないことは何ですか? 例えば ​​-

  • 割り込みハンドラ実行中のコンテキスト切り替えは無効ですか?
  • プロセスがクリティカル
    セクション内にある場合、コンテキスト スイッチは発生しますか?
  • カーネル モード内のどのような状況で、それ以上の割り込みを無効にする価値がありますか?

プロセス切り替えは、プロセスがディスクからデータをフェッチするページフォールトで発生する可能性がありますが、他の割り込みの発生時には発生しません。実行可能パスが中断/再スケジュール/プリエンプトされる可能性があるかどうかをどのように分類しますか?

プロセスがカーネル モードにあるとき、または ISR ルーチンを処理するときに覚えておく必要がある他のことは何ですか?

4

1 に答える 1

4

要するに: NO CONTEXT SWITCH, EVER .

これの意味は:

  • プリエンプションなし
  • ミューテックスのロックなし (代わりにスピン ロックを使用し、ISR 以外の相手が spin_lock_irqsave でそれらを取得して IRQ を無効にすることを確認します)
  • スリープできるカーネル関数への呼び出しはありません (関数のドキュメントを確認してください。一部の関数には _cansleep バリアントもあります)。

プロセス切り替えはページ フォールトで発生する可能性がありますが、対応する ISR が処理された後に発生します。基本的に、パスが ISR ではなく、スピンロックがロックされていない場合は、パスをスケジュールできます。スピンロックを保持している場合は、解放されるまでスリープしないようにする必要があります。

ISR は非常に制限されているため、IRQ の処理は通常、上半分 (ISR コンテキストで実行され、重要なジョブを実行する) と下半分 (後でカーネル スレッドとして実行され、遅延可能な処理を実行する) に分割されます。眠れるもの。詳細については、次のページを参照してください。

http://www.makelinux.net/ldd3/chp-10-sect-4

于 2012-04-09T02:21:30.923 に答える