1. はじめに
Linux の割り込みは、ソフト割り込みとハード割り込みの 2 種類に分けられます。ここでのソフトとハードの意味は、ソフトウェアで実装された割り込みやハードウェアで実装された割り込みではなく、ソフトウェア関連とハードウェア関連を指します。
ソフト割り込みは「信号メカニズム」です。ソフト ニュートラルはソフトウェア割り込みではありません。 Linux はプロセスのさまざまな割り込み操作を生成するためにシグナルを使用します。現在わかっているシグナルは 31 個あります。興味のある方は、関連する参考文献 [1] を参照してください。一般に、ソフト割り込みはカーネル メカニズムのトリガー イベント (プロセス実行のタイムアウトなど) によって引き起こされますが、多数のソフト割り込みが、たとえばプリンター ポートの場合などのハードウェア関連の割り込みによっても引き起こされることも無視できません。ハードウェア割り込みを生成します。ハードウェア関連のハード割り込みに通知します。ハード割り込みはソフト割り込みを生成してオペレーティング システム カーネルに送信します。これにより、カーネルは、プリンタ タスク キューでスリープしている処理プロセスをウェイクアップします。このソフト割り込みで。
ハード割り込みは、通常の意味での「割り込みハンドラー」であり、ハードウェアによって送信された割り込み信号を直接処理します。ハード割り込みが処理すべき割り込み信号を受信すると、ハード割り込みはドライブしたデバイスに戻り、デバイスのステータス レジスタを調べて何が起こったのかを理解し、対応する操作を実行します。プロセスのスケジューリングで考慮すべきソフト割り込みについては説明しません。ここではデバイス ドライバーの割り込みについて説明しているため、ハード割り込みに焦点を当てます。ここで説明するのは、ハードウェア関連の割り込みであるハード割り込みです。
2. 割り込みが発生します
割り込みの理由は、周辺デバイスがそこで何かが起こったことをオペレーティングシステムに通知する必要があるためですが、割り込みの機能は単なるデバイスのアラームライトです。割り込みハンドラは何かが起こったことだけを知っていますが、何が起こったのかを確認するには直接装置に行く必要があります。つまり、割り込みハンドラーは、デバイスで割り込みが発生したことを認識しても、デバイスで何が起こったのかを知りません。それは、デバイス上の一部のステータス レジスターにアクセスした場合にのみ、具体的に何が起こったのか、何をすべきかを知ることができます。対処する。
デバイスは、割り込みラインを介して割り込みコントローラーにハイレベルを送信し、オペレーティングシステムに割り込みを生成したことを伝えます。オペレーティングシステムは、どの割り込みラインが割り込みコントローラーのステータスビットから割り込みを生成したかを認識します。 PC で使用される割り込みコントローラは 8259 です。これらのコントローラはそれぞれ 8 つの割り込みラインを管理できます。2 つの 8259 をカスケード接続すると、合計 15 本の割り込みラインを制御できます。ここでの割り込み線は実際の回路であり、ハードウェア インターフェイスを介して CPU 外部のデバイス コントローラーに接続されています。
3. IRQ
すべてのデバイスが、特定の割り込みラインを制御できる場合にのみ、この割り込みラインに信号を送信できるわけではありません。コンピュータの外部デバイスが増えるにつれ、15 個の割り込みラインでは十分ではなくなり、割り込みラインは非常に貴重なリソースになります。割り込みラインを使用するには、割り込みラインを申請する必要があります。これは IRQ (割り込み要件) です。割り込みラインの申請を、IRQ の申請または割り込み番号の申請と呼ぶことがよくあります。
IRQ は非常に貴重なので、より多くのデバイスが割り込みを使用できるように、デバイスが割り込みを必要とする場合にのみ IRQ を申請するか、IRQ を申請するときに共有割り込みメソッドを使用することをお勧めします。
IRQ が排他的に使用されるか共有されるかに関係なく、IRQ を申請するプロセスは同じであり、3 つのステップに分かれています:
1.すべての割り込みラインを調べて、どの割り込みが占有されていないかを確認します。これらの空き割り込みの 1 つをデバイスの IRQ として選択します。
2.選択した IRQ を割り込み適用機能で適用します。適用方法が排他的であるか共有であるかを指定します。
3.割り込みアプリケーション関数の戻り値に基づいて何をすべきかを決定します。成功した場合はすべて問題ありませんが、失敗した場合は、アプリケーションを再適用するか、アプリケーションを放棄してエラーを返します。
IRQ を申請するプロセスは、参考書に添付されているソース コードに詳しく説明されています。読者は、ソース コード内の短い例を注意深く読むことで、割り込み番号の申請について深く理解できます。
上記は、Linux デバイスドライバー割り込みの詳細な分析 (1) です。さらに関連するコンテンツについては、PHP 中国語 Web サイト (www.php.cn) に注目してください。