0

特定の IRQ ラインが無効になっている割り込みサービス ルーチンが処理されている場合、同じ IRQ ラインに登録されているデバイスが割り込みを発生させるとどうなりますか? 後で処理できるように、その割り込みが失われるか、保存されますか。

親切に誰か説明してください。

前もって感謝します。

4

2 に答える 2

1

通常、割り込みは失われます。つまり、デバイス ドライバが、割り込みステータスに関連するデバイス レジスタを定期的に検査するなどして、割り込みの失敗が発生したと推測できない場合を除きます。

ほとんどではないにしても、多くのデバイス ドライバはこれを行いません。ほとんどの場合、割り込みを迅速に処理し、割り込みから戻ることで、次の割り込みをより早く処理できるようにすることをお勧めします。

合理的な目標は、コード パス ISR ロジックを 12 行未満 (できればそれ以下) の単純なソース コードに制限することです。これは、サービスが必要なものをサービスすることで簡単に実現できます。通常、デバイス レジスタとの間で数回の転送を行い、その I/O でブロックされたタスクを準備完了としてマークし、戻ります。もちろん、ドライバーの残りの部分 (非 ISR 部分) は、そのような ISR 効率を達成するためにもう少し作業を行う必要があるかもしれませんが、それは良いドライバー設計の私見です。

私は多くのデバイス ドライバー エンジニアと話し合ってきましたが、ISR がその場でより多くの作業を行う (そしてスレッドベースの処理を延期しない) ことで、待ち時間とシステム パフォーマンスが改善されると主張しています。私は、その主張が常に真実であることに確信が持てません。

于 2014-03-25T20:47:21.620 に答える