ポーリングと割り込みを使用すると、CPUは現在実行している処理を中止し、より重要なタスクに応答することができます。 ポーリングと割り込みは、多くの点で互いに異なります。 しかし、ポーリングと割り込みを区別する基本的な点は、 ポーリングではCPUサービスがCPUサービスを必要とするかどうか定期的にI / Oデバイスをチェックし続けるのに対し、 割り込みではI / OデバイスがCPUに割り込み、CPUサービスを必要とすることをCPUに伝えます。 。 下の比較表で割り込みとポーリングの違いをいくつか説明しました。ぜひご覧ください。
比較表
比較基準 | 割り込み | 投票 |
---|---|---|
基本 | デバイスはCPUに注意が必要であることをCPUに通知します。 | CPUの注意が必要かどうか、CPUは常にデバイスの状態をチェックします。 |
機構 | 割り込みはハードウェアメカニズムです。 | ポーリングはプロトコルです。 |
整備 | 割り込みハンドラはデバイスにサービスを提供します。 | CPUはデバイスにサービスを提供します。 |
表示 | 割り込み要求行は、装置が修理を必要としていることを示します。 | コマンドレディビットは、デバイスが修理を必要としていることを示します。 |
CPU | デバイスの修理が必要な場合にのみCPUが邪魔され、CPUサイクルが節約されます。 | CPUは待機し、デバイスにサービスが必要かどうかをチェックしなければならず、これは多くのCPUサイクルを浪費します。 |
発生 | 割り込みはいつでも発生する可能性があります。 | CPUは定期的にデバイスをポーリングします。 |
効率 | デバイスがCPUへの割り込みを繰り返し続けると、割り込みが非効率的になります。 | CPUがサービスの準備ができているデバイスをめったに見つけない場合、ポーリングは非効率的になります。 |
例 | ベルが鳴ったらドアを開けて誰が来たのかを確認しましょう。 | 誰かが来たかどうかチェックするためにドアを開け続けてください。 |
割り込みの定義
割り込みは、デバイスに注意が必要であることをCPUが検出できるようにするハードウェアメカニズムです。 CPUは、すべての単一命令の実行後にCPUによってチェックされるワイヤ割り込み要求ラインを有する。 CPUが割り込み要求ラインで割り込み信号を検出すると、CPUは現在実行中のタスクを停止し、制御を割り込みハンドラに渡すことによってI / Oデバイスから送信された割り込みに応答します。 割り込みハンドラはデバイスを処理することによって割り込みを解決します。
CPUは割り込みがいつ発生する可能性があるのかを認識しませんが、割り込みが発生するたびに応答する必要があります。
割り込みハンドラが割り込みの実行を終了すると、CPUは割り込みに応答するために停止したタスクの実行を再開します。 ソフトウェア 、 ハードウェア 、 ユーザー 、 プログラム内の何らかのエラーなども割り込みを生成する可能性があります。 CPUの割り込み処理の性質はマルチタスクにつながります。つまり、ユーザーは同時に複数の異なるタスクを実行できます。
CPUに複数の割り込みが送信された場合、割り込みハンドラは処理待ちの割り込みの管理に役立ちます。 割り込みハンドラは割り込みの受信によってトリガーされるので、CPUによって処理されるのを待っている割り込みを優先し 、それらをキューに配置して処理されます。
ポーリングの定義
割り込みで見たように、I / Oデバイスからの入力はいつでも到着し、CPUに処理を要求することができます。 ポーリングは、デバイスに注意が必要であることをCPUに通知するプロトコルです 。 CPUの処理が必要であることをデバイスがCPUに伝える割り込みとは異なり、ポーリングでは、CPUはI / OデバイスにCPUの処理が必要かどうかを問い合わせ続けます。
CPUは、接続されているすべてのデバイスを継続的にテストして、いずれかのデバイスがCPUの注意を必要としているかどうかを検出します。 すべてのデバイスには、そのデバイスのステータス、つまりCPUによって実行されるコマンドがあるかどうかを示すコマンドレディビットがあります。 コマンドビットが1に設定されている場合、そのコマンドビットに0が設定されている場合はコマンドが実行され、それ以外の場合はコマンドが実行されます。 CPUにはビジーであるかどうかにかかわらずCPUのステータスを示すビジービットがあります。 ビジービットが1に設定されている場合は、デバイスのコマンドを実行するのにビジーです。それ以外の場合は0です。
ポーリングのためのアルゴリズム
- デバイスがCPUによって実行されるコマンドを持っている場合、デバイスは、それがクリア(0)になるまでCPUのビジービットを継続的にチェックします。
- ビジービットがクリアされると、デバイスはコマンドレジスタにライトビットを設定し、データアウトレジスタにバイトを書き込みます。
- これでデバイスはコマンドレディビットをセット(1)します。
- CPUがデバイスのコマンドレディビットをチェックして、それがセット(1)であることを検出すると、ビジービットをセット(1)します。
- 次に、CPUはデバイスのコマンドレジスタを読み取り、デバイスのコマンドを実行します。
- コマンド実行後、CPUはコマンドレディビット、デバイスのエラービットをクリア(0)してデバイスのコマンドの実行が成功したことを示し、さらにそのビジービットをクリア(0)してCPUも自由に実行できることを示す他のデバイスのコマンド
OSにおける割り込みとポーリングの主な違い
- 割り込みでは、デバイスはCPUにサービスが必要であることを通知しますが、ポーリングでは、CPUはデバイスにサービスが必要かどうかを繰り返し確認します。
- CPUには、割り込みが発生したことを知らせるワイヤの割り込み要求ラインがあるため、割り込みはハードウェア メカニズムです。 一方、ポーリングは、デバイスに実行するものがあるかどうかを通知するために制御ビットをチェックし続けるプロトコルです 。
- 割り込みハンドラは、デバイスによって生成された割り込みを処理します。 一方、ポーリングでは、 CPUは必要に応じてデバイスにサービスを提供します。
- 割り込みは割り込み要求ラインによって通知されます。 ただし、 コマンドレディビットは、デバイスの修理が必要であることを示します。
- 割り込みでは、いずれかのデバイスが割り込みをかけたときにのみCPUが混乱します。 一方、ポーリングでは、すべてのデバイスのコマンドレディビットを繰り返しチェックすることによって、CPUが大量のCPUサイクルを浪費します。
- 割り込みはいつでも発生する可能性がありますが、CPUは定期的にデバイスをポーリングし続けます 。
- CPUがデバイスのポーリングを継続し、サービスの準備ができているデバイスが見つからない場合は、ポーリングが非効率的になります。 その一方で、デバイスがCPU処理を繰り返し中断し続けると、割り込みは非効率的になります。
結論:
ポーリングと割り込みはどちらも、I / Oデバイスに参加するのに効率的です。 しかし、それらは上記のように特定の条件では非効率的になる可能性があります。