ソフトウェアおよびハードウェア割り込みとは何ですか、またそれらはどのように処理されますか?


43

ハードウェアおよびソフトウェア割り込みの概念を理解しているかどうかはわかりません。

私が正しく理解していれば、ハードウェア割り込みの目的は、CPUに注意を向けることであり、CPUマルチタスクの実装の一部です。

  1. 次に、ハードウェア割り込みを発行するのは何ですか?ハードウェアドライバープロセスですか?
  2. はいの場合、ハードウェアドライバープロセスはどこで実行されていますか?CPU上で実行されている場合、ハードウェア割り込みによってCPUの注意を引く必要はありませんか?他の場所で実行されていますか?
  3. ハードウェア割り込みはCPUに直接割り込みますか、それとも最初にカーネルプロセスと通信し、カーネルプロセスがCPUと通信しますか?

一方、ソフトウェア割り込みの目的は、現在CPUで実行されているプロセスがリソースを要求することだと思います。

  1. リソースは何ですか?それらはすべて、実行中のプロセスの形式ですか?たとえば、CPUドライバープロセスとメモリドライバープロセスはCPUとメモリリソースを表しますか?I / OデバイスのドライバープロセスはI / Oリソースを表しますか?プロセスがリソースとも通信したい他の実行中のプロセスはありますか?
  2. はいの場合、ソフトウェア割り込みはカーネルプロセスを介して間接的にプロセス(リソースを表す)に接続しますか?ハードウェア割り込みとは異なり、ソフトウェア割り込みはCPUに直接割り込みませんが、代わりにカーネルプロセスに割り込み/接触しますか?

回答:


55

ハードウェア割り込みは、実際にはCPUマルチタスクの一部ではありませんが、駆動する可能性があります。

  1. ハードウェア割り込みは、ディスク、ネットワークカード、キーボード、クロックなどのハードウェアデバイスによって発行されます。各デバイスまたはデバイスセットには、独自のIRQ(Interrupt ReQuest)行があります。IRQに基づいて、CPUは要求を適切なハードウェアドライバーにディスパッチします。(ハードウェアドライバーは通常、個別のプロセスではなく、カーネル内のサブルーチンです。)

  2. 割り込みを処理するドライバーはCPU上で実行されます。CPUは、割り込みを処理するために実行していたことから割り込まれます。そのため、CPUの注意を引くために追加する必要はありません。マルチプロセッサシステムでは、通常、割り込みは1つのCPUのみに割り込みます。(特別な場合として、メインフレームにはハードウェアチャネルがあり、メインCPUのサポートなしで複数の割り込みを処理できます。)

  3. ハードウェア割り込みはCPUに直接割り込みます。これにより、カーネルプロセスの関連コードがトリガーされます。処理に時間がかかるプロセスの場合、割り込みコードにより、他のハードウェア割り込みによる割り込みが許可される場合があります。

    タイマー割り込みの場合、カーネルスケジューラコードは実行中のプロセスを中断し、別のプロセスの実行を許可する場合があります。マルチタスクを可能にするのは、スケジューラコードの存在です。

ソフトウェア割り込みは、ハードウェア割り込みと同様に処理されます。ただし、それらは現在実行中のプロセスによってのみ生成できます。

  1. 通常、ソフトウェア割り込みはI / O(入力または出力)の要求です。これらは、I / Oの発生をスケジュールするカーネルルーチンを呼び出します。一部のデバイスでは、I / Oはすぐに実行されますが、通常、ディスクI / Oはキューに入れられ、後で実行されます。実行中のI / Oによっては、I / Oが完了するまでプロセスが中断され、カーネルスケジューラが実行する別のプロセスを選択する場合があります。I / Oはプロセス間で発生する場合があり、通常、処理はディスクI / Oと同じ方法でスケジュールされます。

  2. ソフトウェア割り込みは、カーネルとのみ通信します。実行する必要のある他のプロセスをスケジュールするのはカーネルの責任です。これは、パイプの最後の別のプロセスである可能性があります。一部のカーネルでは、デバイスドライバーの一部をユーザー空間に存在させることができ、カーネルは必要に応じてこのプロセスを実行するようにスケジュールします。

    ソフトウェア割り込みがCPUに直接割り込まないのは正しいことです。現在コードを実行しているコードのみがソフトウェア割り込みを生成できます。割り込みは、プロセスを実行するためにカーネルが何か(通常はI / O)を行うための要求です。特別なソフトウェア割り込みはYield呼び出しで、カーネルスケジューラに、他のプロセスが実行できるかどうかを確認するように要求します。

コメントへの応答:

  1. I / O要求の場合、カーネルは作業を適切なカーネルドライバーに委任します。ルーチンは、後の処理(ディスクI / Oに共通)のためにI / Oをキューに入れるか、可能であればすぐに実行します。キューは、多くの場合ハードウェア割り込みに応答するときに、ドライバーによって処理されます。1つのI / Oが完了すると、キュー内の次のアイテムがデバイスに送信されます。

  2. はい、ソフトウェア割り込みにより、ハードウェアシグナリングのステップが回避されます。ソフトウェア要求を生成するプロセスは、現在実行中のプロセスでなければならないため、CPUを中断しません。ただし、これらは呼び出しコードのフローを中断します。

    ハードウェアがCPUに何かをさせる必要がある場合、CPUは実行中のコードへの注意を中断します。CPUは、現在の状態をスタックにプッシュするため、後で元の状態に戻ることができます。割り込みが停止する可能性があります:実行中のプログラム。別の割り込みを処理するカーネルコード。またはアイドルプロセス。


ありがとう!(1)ソフトウェア割り込みでは、I / O操作はカーネルプロセス内のI / Oデバイスドライバールーチンによって実行されますか?(2)ソフトウェア割り込みが通過するパスは、ハードウェア割り込みのパスよりも1ステップ短いのは正しいですか?つまり、ソフトウェア割り込みの場合:ソフトウェアプログラム->カーネルプロセス内のデバイスドライバールーチン。ハードウェア割り込みの場合:ハードウェア-> CPU->カーネルプロセス内のデバイスドライバールーチン?
ティム

ありがとう!ハードウェアの割り込みにより、CPUが現在の状態をスタックにプッシュして、ハードウェアドライバーがCPUで実行され、後でCPUで中断されたプロセスをポップバックできるようになるのは正しいですか?ソフトウェア割り込みにより、CPUで実行されているプロセスがスタックにプッシュされ、要求されたサービスがCPUで実行できるようになりますか?
ティム

いずれかの割り込みにより、状態がスタックにプッシュされます。これにより、システムは割り込みが完了したときに状態をリロードできます。
-BillThor

ありがとう!CPUの代わりにIOデバイスで実行されるIO操作など、要求されたサービスがCPUで実行されず、要求プロセスが要求サービスの終了を待たずに実行を継続できる場合、要求プロセスはスタックに入れられます?
ティム

通常、I / O読み取りは同期的に呼び出され、I / Oが完了するまでプロセスは実行されません。読み取りでは、ほとんど常にこれが必要です。通常、書き込みは非同期で行われ、プロセスの実行を継続できます。
-BillThor
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.