web-dev-qa-db-ja.com

ソフトウェア割り込みと比較して、ハードウェア割り込みはどのように機能しますか?

私が興味を持っている詳細のレベルの印象を与えるために、一例。システムコールが最終的にトラップにつながり、プロセッサがレジスタを格納し、スーパーバイザモードに切り替えて、間接ジャンプを実行できることを私は知っています。しかし、それは特別な場合にすぎません(またはそうですか?)。

では、一般に、ハードウェアまたはソフトウェアの割り込みが発生すると、ハードウェアレベルで正確に何が起こるのでしょうか。

違いと共通点は何ですか?ハードウェアとオペレーティングシステムがどの程度正確に連携して、割り込みをそのように機能させるのでしょうか。

4
artistoex

ハードウェア割り込みは、ハードウェアレベルで発生します。これらは、プロセッサ自体がその状態を保存して入力を待つか、必ずしも元のプログラムの一部ではなかった他の何かを実行するトラップや停止のようなものである可能性があります(つまり、ゼロ除算の場合、プロセッサはそれがあったことを実行する必要がありますプログラムの通常の実行中に行うつもりはありません)。

おそらくもっと重要なことは、ハードウェア割り込みにより、プロセッサがいわゆるポーリングループで時間を無駄にしないようにすることです。ユーザーがキーを押しているかどうかを確認する必要がある場合を想像してみてください。これを行うには2つの方法があります。 1つ目は、頻繁にチェックして、キーが押されているかどうかを確認することです。これは機能しますが、ほとんどの場合、チェックがネガティブに戻るため、無駄です。割り込みを使用すると、キーを押すこと自体でプログラムの状態を変更して、キーを押すと「通知」されるようになります。多くの場合、2番目の方法の方が明らかに効率的です。

ソフトウェア割り込みは通常、コンテキストスイッチを意味し、オペレーティングシステムによって実行されます。場合によっては、現在どのプログラムが実行されているかをOSが交換することを意味するだけなので(コンピューターが50のプロセスを実行している場合、50のコア/スレッドがない限り、プログラムの同時プログラム実行は幻想であるという事実)、上記のキーボードを使用した例では、イベントの発生を待機しています(イベントベースのプログラミングの詳細を参照してください ここ (Wikipediaから))

多くの場合、割り込みベースのプログラミングは良い考えですが、割り込みベースのプログラミングが多いアプリケーションでは、それが頻繁に発生すると効率が低下し、システムがクラッシュする可能性があることに注意することが重要です。 。

2
soandos