と言われている
PIC によって割り込みが送信されると、PIC は、I/O ポートを介して確認されるまで、同じソースから別の割り込みを送信しません。これは、通常、割り込みハンドラが重要なデータ構造を操作し、それ自体の新しい呼び出しによる割り込みに耐えられないためです (つまり、再入可能ではありません)。
理解できない。同じ要因の割り込みと異なる要因の割り込みで何か違いはありますか?
と言われている
PIC によって割り込みが送信されると、PIC は、I/O ポートを介して確認されるまで、同じソースから別の割り込みを送信しません。これは、通常、割り込みハンドラが重要なデータ構造を操作し、それ自体の新しい呼び出しによる割り込みに耐えられないためです (つまり、再入可能ではありません)。
理解できない。同じ要因の割り込みと異なる要因の割り込みで何か違いはありますか?
タイマー、ハードディスク、ネットワークなど、さまざまなソースから割り込みを取得できます。これらの割り込みはそれぞれ、異なる割り込みハンドラーによって処理されます。
したがって、要因(S2)からの割り込み処理中に要因(S1)からの割り込みが発生しても問題ありません。両方の割り込みは、異なる割り込みハンドラーによって処理されています。
一方、ソース (S) からの割り込みが、そのソースのハンドラーが別の割り込みを処理している間に到着した場合、ハンドラーは 2 番目の割り込みを処理できません。中断された場合、新しい割り込みを処理してから、元の割り込みの処理に戻ります)。
Linux カーネルで割り込みが機能する方法の詳細については、Understanding the Linux Kernel を参照してください。
同じソースからの割り込みは、現在アクティブな割り込みと同じデータ構造で動作する必要があります。さまざまなソースからの割り込みは、さまざまなデータ構造で動作します。したがって、同じソースからの2つの割り込みを同時にアクティブにすることはできません。ただし、それらがアクティビティを調整するのに十分賢い場合を除きます。現在の設計では、割り込みをアクティブにできないため、プログラマーはその複雑さを心配する必要がありません。
現実の世界から(考案された)例を取り上げて、人々が何かのチケットを受け取りに行くテーブルを想像してください。ここでは、姓に基づいてアルファベットのさまざまな範囲のさまざまな店員がいます。姓がAで終わる2人は、同時にチケットを受け取ることはできません。そうしないと、担当の店員が混乱して間違いを犯す可能性があります。ただし、名前がAで終わる人は、名前がZで終わる人と同時にチケットを受け取ることができます。これは、それぞれの店員が異なる名前のリストとチケットの山を操作しているため、一方が他方に悪影響を与えることはありません。 。
この例では、顧客の名前の文字がソースであり、顧客が割り込みです。店員は割り込みハンドラーであり、名前のリストとチケットの山はカーネルデータ構造です。
他の答えは素晴らしいですが、心に留めておくべきもう1つのことは、レベルトリガー割り込みです。割り込みコントローラーがトリガーしていた割り込みを無効にしなかった場合、ISR がハードウェアに割り込みを停止するように指示する機会を得る前に、レベルでトリガーされた割り込みがすぐに再トリガーされます。通常、ISR は PIC をリセットする必要があるだけでなく、話しているハードウェアに黙るように伝える必要もあります。ハードウェアが中断し続けると、スタックがオーバーフローし、OS が停止します。