8

共有割り込みラインの場合、複数の割り込みハンドラーを持つことができます。カーネルは、その特定の共有回線のすべてのハンドラーを順番に呼び出します。私の知る限り、各ハンドラーは、呼び出されると、呼び出される正しいハンドラーであるかどうかをカーネルに通知します。

私の質問は、これがどのように決定されるか、特定のデバイスのステータスを通知するメモリマップドレジスタをチェックする方法はありますか、それとも他のハードウェアメカニズムがありますか?対応するデバイスが実際に割り込みを発行したデバイスであるかどうかをハンドラーはどのようにして知るのでしょうか。

この情報は、デバイスとプロセッサの割り込みラインの間にある割り込みコントローラを介して中継されますか?

4

1 に答える 1

5

カーネルは、その特定の共有回線のすべてのハンドラーを順番に呼び出します。

その通り。Dev1とDev2がIRQ10を共有するとします。IRQ10の割り込みが発生すると、この回線に登録されているすべてのISRが1つずつ呼び出されます。

このシナリオでは、Dev2が割り込みを生成したとしましょう。Dev1のISRが最初に登録された場合、そのISR(つまり、Dev1のISR)が最初に呼び出されるだけです。そのISRでは、割り込みステータスレジスタの割り込みが検証されます。割り込みビットが設定されていない場合(この場合、Dev2が割り込みを発生させたため)、割り込みがDev1によって生成されなかったことを確認できます。したがって、Dev1のISRはカーネルに戻る必要がありますIRQ_NONE。つまり、「その割り込みを処理しませんでした」 、したがって、カーネルは次のISR(つまり、Dev2のISR)に進みます。これにより、対応するデバイスが割り込みを生成したことを実際に確認します。したがって、このハンドラーはそれを処理し、最終的には戻りIRQ_HANDLEDます。つまり、「これを処理しました。 "。

詳細については、戻り値IRQ_NONE/IRQ_HANDLEDを参照してください。

対応するデバイスが割り込みを発行したかどうかをハンドラーはどのようにして知るのですか?

割り込みステータスレジスタのみを読み取る。

この情報は、デバイスとプロセッサの割り込みラインの間にある割り込みコントローラを介して中継されますか?

これについてはよくわかりません。ただし、OSは、ISRからの戻り値に基づいてISRの呼び出しを処理します。

于 2013-01-17T05:45:44.877 に答える