割り込みとポーリングの主な違いは、割り込みの場合はデバイスがCPUに注意を要することを通知するのに対し、ポーリングの場合はCPUがデバイスの状態を継続的にチェックして注意を要するかどうかを調べることである。
一般に、OSはハードウェアとユーザープログラムの間にある層です。
ここで、CPUはコンピュータシステム全体のタスクを処理するコンポーネントです。
時には、現在実行中のタスクを一時停止し、即座にアクションを実行することが必要な場合があります。
そのような仕組みとして、割り込みとポーリングがあります。
インタラプトとは
割り込みとは、CPUに即座に行動を起こすように指示するイベントのことです。
タイマーのタイムアウトを知らせる割り込みがあります。
また、ネットワーク機器のデータパケットを受信したことを知らせる割り込みもあります。
割り込みが発生すると、CPUは現在実行中のタスクを一時停止し、対応する割り込みハンドラ(ISR:Interrupt Service Routine)を実行します。
割込み処理後は、実行中の通常のタスクに切り替わります。
割込みには、主にハードウェア割込みとソフトウェア割込みの2種類があります。
ハードウェア割り込み
ハードウェア割り込みは、デバイスがオペレーティングシステムの注意を必要とすることを通知するために使用されます。
例えば、キーボードのキーを押すと、ハードウェア割り込みが発生します。
これにより、CPUはそのキーストロークを読み取ることになります。
ハードウェア割り込みを開始することを割り込み要求(IRQ)と呼びます。
各ハードウェア割り込みには、割り込み番号があります。
この番号は、割り込みを発生させるハードウェアに対応しています。
したがって、CPUはそのデバイスを認識することができます。
さらに、ハードウェア割り込みには、マスカブル割り込みとノンマスカブル割り込みの2種類があります。
CPUはマスカブル割込みを遅延させることができますが、ノンマスカブル割込みは遅延させることができません。
ソフトウェア割込み
ソフトウェア割り込みは、プロセッサまたは実行中のプログラムの例外的な状態によって引き起こされる割り込みです。
数値を0で割ると例外が発生することがありますが、これはソフトウェア割り込みです。
さらに、無効な変数や無限ループによるメモリリークもソフトウェア割り込みを発生させることがあります。
ポーリングとは
ポーリングとは、あるデバイスが注意を必要としていることをCPUに示す仕組みのことです。
デバイスが正常に動作しているかどうかを把握するための連続的な行為です。
主に入出力(I/O)で使用されるため、ポーリング付きI/Oやソフトウェア駆動I/Oとも呼ばれます。
ポーリングは、デバイスが準備できているかどうかを継続的にチェックするのにも役立ちます。
例えば、プリンターを考えてみましょう。
デバイスがビジー状態であれば、CPUは他のタスクを実行する。
通常、ポーリングは低レベルのハードウェアを含むことが多い。
しかし、ポーリングにはいくつかの欠点もあります。
主に、ポーリングは多くのCPUサイクルの浪費を引き起こします。
特に、チェックするデバイスが多い場合、ポーリングにかかる時間がI/Oデバイスにサービスを提供できる時間を超えてしまう可能性があります。
割り込みとポーリングの違い
定義
割込みとは、CPU以外の外部コンポーネントによって起動され、CPUにある動作を促すイベントのことです。
これに対し、ポーリングはクライアントプログラムが外部デバイスの状態をサンプリングする同期動作です。
このように、割り込みとポーリングの主な違いについて説明します。
結果
割り込みが発生した場合、割り込みハンドラが実行されます。
一方、ポーリングでは、CPUがサービスを提供する。
発生状況
割り込みとポーリングのもう一つの違いは、割り込みがいつでも発生するのに対し、ポーリングは一定間隔で発生することです。
表示
また、割り込み要求ラインはデバイスがサービスを必要としていることを示し、コマンドレディ・ビットはデバイスがサービスを必要としていることを示す。
CPUサイクル
ポーリングが多くのCPUサイクルを浪費するのに対して、インタラプトは多くのCPUサイクルを浪費することはありません。
したがって、これもインタラプトとポーリングの違いです。
効率性
さらに、割り込みの場合、デバイスが頻繁にCPUに割り込むと非効率です。
一方、ポーリングは、CPUがデバイスからあまり要求を受けない場合に非効率となる。
結論
割込みとポーリングの大きな違いは、割込みではデバイスがCPUに注意を要することを通知するのに対し、ポーリングではCPUがデバイスの状態を継続的にチェックし、注意を要するかどうかを調べるという点です。
簡単に言うと、割り込みは非同期であるのに対し、ポーリングは同期です。