技術コラム集

割り込みとポーリング-どうやってイベントを検出するのか-

現在のコンピュータシステムは「割り込み」なくしては実現できないといっても過言ではないんだ。
特に、組み込みでは「割り込み」を駆使したプログラミングが必須となる。

今回は「割り込み」とはどういうものか、対極にある「ポーリング」という手法とあわせて紹介していこうと思う。

ポーリングに関して

まずは、携帯電話を例に考えてみよう。
例えば、こんな動作をするよね。

(1) キーを押すと、画面が切り替わったり、押した文字が表示されたりする。
(2) 電話の着信があると、音や振動、画面の表示などで知らせてくれる。
(3) 電波状況は、リアルタイムに画面のアイコンに反映される。
(4) しばらく操作しないでおくと、液晶画面が暗くなる。

これらに共通する点は「なにかイベントが起こったときに対応した処理をする」
ということだ。それぞれのイベントは

(1) キーが押された
(2) 電話の着信があった
(3) 電波状況に変化があった
(4) 一定時間、操作されなかった

ということになるよね。

同様の動作は、携帯電話以外でもパソコン、テレビ、ビデオ、ゲーム機など、
ほとんどのデジタル機器でよく見ることができる。

これらのイベントには基本的に互いに関連がなく、システムからすれば

「いつ起こるかわからない」ものばかり。
このようなイベントを「非同期イベント」と呼ぶんだ。

コンピュータシステムは、このような「いつ起きるか分からない」
たくさんの非同期イベントを監視しながら動いているんだ。
でも、どうやっていると思う?

まず思いつくのは、「イベントが発生しているかを定期的にチェックする」
という方法。これを「ポーリング」という。

でも、チェックする周期が長いと、イベントの発生から検出までにタイムラグが生じてしまう。
キーを押してから画面に文字がなかなか出なかったら、イライラするよね?
このようなイベントはすぐに応答してもらわないと困るけど、だからといって
チェック周期を短くすると、CPUがその処理ばかりやることになってしまって、
他の処理に支障がでてしまうんだ。

このように、ポーリングで多くのイベントをさくさくと処理するのは
ちょっと無理があるというのがわかると思う。

そこで、出てくるのが「割り込み」なんだ。

次回は「割り込み」について説明していこう。

割り込みとポーリング(2)へ続く

壱の巻:2進数と16進数を覚えよう 参の巻:Printf( )が使えない?

ビリーの講義一覧へ

このページの上へ