いくつかの背景
周辺機器からの割り込みは、CPU によって直接処理されるのではなく、「プログラマブル割り込みコントローラー」と呼ばれるハードウェアによって処理されます。以前のシステムでは PIC - (Intel 8259 ) が使用されていましたが、SMP システムがサポートされていないため、現在は Adavnced PIC - APIC (Intel 82093 ) が使用されています。APIC には 2 つのコンポーネントがあり、IO APIC (マザーボードの一部) はこれらの割り込み要求をローカル APIC (CPU の一部) に転送します。
しかし、これらのハードウェアはメッセージを CPU に渡すだけで、実際の処理は特定のデバイスのデバイス ドライバーによって行われます。
今あなたの質問に
しかし、CPU が割り込みをリッスンしていない場合はどうなるでしょうか? 彼らはただ静かに消えますか?それとも、割り込みが再び有効になるのを待って、ハードウェアでキューに入れられていますか?
この記事では、実行速度に応じて、割り込みハンドラーの 2 つのクラスについて説明します
。1. 高速: さらなる割り込みを無効にして
実行、2. 低速: 割り込みを有効にして実行
しかし、タスクレット/ワーク キュー (上半分と下半分 - ベルを鳴らしますか?) によってハンドラーの実行時間が非常に短くなったため、この 2 つの違いは時代遅れになりました。I2C のような低速のデバイスの場合、スレッド化された割り込みハンドラーと呼ばれる新しい手法に移行しました。、これは上/下半分のアプローチよりもさらに優れています。上記の手法が機能しないデバイスの場合、割り込みを無効にしてハンドラーが実行されます。その場合、割り込みを失い続けますが、そのようなことが発生するインスタンスは見つかりません。
それらが保管されている場合、どこに保管されていますか?キューに入れる人数に制限はありますか? 未処理の割り込みが多すぎるとどうなりますか?
いいえ、それらはキューに入れられません。割り込みを無効にする必要があり、それを長時間無効にする必要がある場合は、割り込みハンドラーの設計が不適切です。
割り込み処理が未処理になるまれな状況が発生した場合に備えて、問題を検出するためにどのような手段が存在しますか?
割り込みが無効になっている場合、できることは何もありませんが、それらが有効になっていてさらに多くの割り込みが発生し続けると、システムがクラッシュする可能性がある範囲で、割り込みのネストが発生します。その後、コア ダンプを使用して原因を検出できます。