2

一部のソフトウェアを物理ハードウェア デバイスの使用から完全なソフトウェア シミュレーションに変換しています。現在、割り込み処理部分を検討しています。

このコードが物理ハードウェアを駆動していたときは、 経由request_irq()で IRQ を要求していましたが、物理デバイスがなくなったので、「softirq」メソッドを使用するようにコードを変更するつもりでした。

1 つの懸念事項として、softirq は実際には、スケジューラによって呼び出されるまで待機する必要がある単なるイベントであることがわかります。一方、ハードウェア割り込みを使用すると、実行中のアクティビティが即座に中断されます。これは、softirq を使用するようにコードを変換すると、元のコードには存在しなかったスケジューリングの遅延が発生することを意味します。

私の理解は正しいですか?
HW irq のようにすぐに中断するように softirq を登録できる方法はありますか?
そうでない場合は、とにかく無料の HW irq 番号を選択して使用し続けrequest_irq()、HW デバイスを実行していると思わせるように「だます」方法はありますか?

4

2 に答える 2

2

ユーザー モード コードまたはカーネル モード コードで (追加のシステム コールまたはドライバーを介して) 例外を発生させ、カーネルに専用の例外ハンドラーを配置して、この例外をシミュレートされた割り込みに変換することができます。例外は通常、外部ハードウェア割り込みと同様に、少なくとも CPU によって即座に処理されます。これを達成する方法を正確に説明するには、Linux の内部構造を十分に理解していませんが、実行可能である必要があります。確かに、x86 で動作します。

于 2012-10-10T14:24:06.510 に答える