オペレーティングシステムの概念:
I / O中、さまざまなデバイスコントローラーは、サービスの準備ができると割り込みを発生させます。これらの割り込みは、
- その出力が完了した、または
- 入力データが利用可能である、または
- 障害が検出されたこと。
割り込みは、出力の準備ができていること、または入力が完了したことを示すために使用されていますか?
そうでない場合、他の方法でそれらを示す必要がありますか?
ありがとう。
オペレーティングシステムの概念:
I / O中、さまざまなデバイスコントローラーは、サービスの準備ができると割り込みを発生させます。これらの割り込みは、
- その出力が完了した、または
- 入力データが利用可能である、または
- 障害が検出されたこと。
割り込みは、出力の準備ができていること、または入力が完了したことを示すために使用されていますか?
そうでない場合、他の方法でそれらを示す必要がありますか?
ありがとう。
回答:
最も基本的なレベルでは、割り込みは非常に単純な「ちょっと!チェックしてください」というメッセージをあるものから別のものに伝えるために使用されます...
ハードウェア(例:電圧が状態を示す)またはソフトウェア(例:ユーザーがCtrl+を押すC)の両方が可能です。
いくつかの割り込みは本当に重要であり、すぐに処理する必要がありますが、他の割り込みはそれほど重要ではなく、しばらく処理されない場合があります。
割り込みのすべての使用をリストすることは不可能です。これは、一部には、新しいテクノロジーが新しい機能をもたらし、割り込みの新しい理由をもたらす可能性が高いためです。
集積回路内では、次のような非常に具体的な意味を持つ割り込みが発生することがよくあります。
別個の(別個の)コンポーネントが通信する必要がある場合、主にそうでなければ必要となる相互接続およびI / Oピンの数のために、割り込みは解読するために何らかの相互作用を必要とする可能性があります。例えば:
多くの場合、割り込みはソフトウェアによって無視され、代わりにダイレクトメモリアクセスモジュールによって処理されます。DMAを使用すると、ソフトウェアはハードウェアの低レベルの処理を無視できます。たとえば、各シンボルではなく、パケット全体が到着したときに通知されます。
デバイスは割り込みを使用して、あらゆる種類のイベントを通知できます。実際、デバイスまたはデバイスコントローラーの状態の変化は、割り込みを介してホストCPUに報告できます。それはすべて、デバイスのハードウェアとファームウェアの設計者次第です。
(そして、少なくとも、ドライバーを書かなければならない貧しいシュマックの意見を聞くことを望みます。非常に多くのデバイスがそのような入力なしで設計されており、厄介で非効率なドライバー設計を必要とします。デバイスのホストインターフェイス(割り込み構造を含むが、これに限定されない)がドライバーで実行できることと実行できないことを意識せずに設計されたため、デバイスの機能の一部を最大限に使用できない場合。しかし、私は脱線します。)
あなたが引用した資料はそれが行く限り正しいですが、私には非常に単純な見方であるように思われます。
「出力の準備ができている」と「出力が完了している」の違いはわかりません。(プリンタの出力トレイからピックアップする準備はできていますか?)同様に、「入力データが利用可能」と「入力完了」は同じものに近いように聞こえます。ただし、おそらく、ドライバーの側で必要な作業が異なることを意味します。私にとって、「入力完了」とは、着信データがホストメモリにあり、ローカルスレッドのI / O操作が完了できることを意味しますが、「入力データが利用可能」とは、おそらくドライバーがデバイスからデータを移動する必要があることを意味しますメモリ内バッファへのインターフェース。
しかし、これは単なるセマンティクスです。ドライバーライターとして、デバイスホストインターフェイスの仕様を注意深く読んで、特定の割り込みが実際に何を意味するのか、そしてそれに対して何をすべきかを知る必要があります。場合によっては、ファームウェアコードを読んだり、論理図を調べたりする必要さえあります。(それはエッジトリガーまたはレベルトリガーのフリップフロップですか?デバイスエンジニアは時々奇妙な考えを持っています!しかし、私は再び脱線します...)
もう少し複雑な例として、FIFOを備えた通信インターフェースを考えます。通常、ホストへの過度の割り込みを避けたいと思います。たとえば、パケットごとの割り込みが多すぎる可能性があります。したがって、このデバイスでは、「FIFO」(先入れ先出し)インターフェースを介して送信される一連のバッファーについて通知できる場合があり、デバイスはそれらをすべてワイヤ上で移動させます。
ただし、すべてのバッファが完了した場合にのみ割り込みが必要になるとは限りません。たとえば、バッファが20%または10%いっぱいになったときに通知を受けた方が良いでしょう。このような割り込みが発生したら、FIFOにバッファを追加します(もちろん、いっぱいになったら停止します)。FIFOが空のときにのみ割り込みが発生した場合、送信のために次のバッファを取得する前にわずかな遅延が発生し、スループットが低下します。FIFOが空になったときに割り込みを与えることにより、その遅延をなくすことができます。