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

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

ハードウェアとソフトウェアの割り込みの概念がよくわかりません。

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

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

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

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

答え1

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

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

  2. 割り込みを処理するドライバは CPU で実行されます。 CPUは割り込みを処理するため、これをCPUに通知するために追加の作業は必要ありません。マルチプロセッサシステムでは、割り込みは通常 CPU の 1 つだけ割り込みを行います。 (特別な場合、メインフレームにはメイン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と共通)、可能であればすぐに実行できます。キューは通常、ハードウェア割り込みに応答してドライバによって処理されます。 I/O が完了すると、キューの次の項目がデバイスに送信されます。

  2. はい、ソフトウェア割り込みはハードウェア信号ステップを避けます。ソフトウェア要求を生成するプロセスは、現在実行中のプロセスでなければCPUを中断しません。しかし、呼び出しコードの流れを妨げます。

    ハードウェアがCPUに何かを要求する場合、CPUは実行中のコードへの集中を中止します。 CPU は、後で実行していたタスクに戻るために、現在の状態をスタックにプッシュします。割り込みは、実行中のプログラム、他の割り込み、またはアイドルプロセスを処理するカーネルコードを停止できます。

関連情報