現在のコンピュータシステムは「割り込み」なくしては実現できないといっても過言ではないんだ。
特に、組み込みでは「割り込み」を駆使したプログラミングが必須となる。
今回は「割り込み」とはどういうものか、対極にある「ポーリング」という手法とあわせて紹介していこうと思う。
まずは、携帯電話を例に考えてみよう。
例えば、こんな動作をするよね。
(1) キーを押すと、画面が切り替わったり、押した文字が表示されたりする。
(2) 電話の着信があると、音や振動、画面の表示などで知らせてくれる。
(3) 電波状況は、リアルタイムに画面のアイコンに反映される。
(4) しばらく操作しないでおくと、液晶画面が暗くなる。
これらに共通する点は「なにかイベントが起こったときに対応した処理をする」
ということだ。それぞれのイベントは
(1) キーが押された
(2) 電話の着信があった
(3) 電波状況に変化があった
(4) 一定時間、操作されなかった
ということになるよね。
同様の動作は、携帯電話以外でもパソコン、テレビ、ビデオ、ゲーム機など、
ほとんどのデジタル機器でよく見ることができる。
これらのイベントには基本的に互いに関連がなく、システムからすれば
「いつ起こるかわからない」ものばかり。
このようなイベントを「非同期イベント」と呼ぶんだ。
コンピュータシステムは、このような「いつ起きるか分からない」
たくさんの非同期イベントを監視しながら動いているんだ。
でも、どうやっていると思う?
まず思いつくのは、「イベントが発生しているかを定期的にチェックする」
という方法。これを「ポーリング」という。
でも、チェックする周期が長いと、イベントの発生から検出までにタイムラグが生じてしまう。
キーを押してから画面に文字がなかなか出なかったら、イライラするよね?
このようなイベントはすぐに応答してもらわないと困るけど、だからといって
チェック周期を短くすると、CPUがその処理ばかりやることになってしまって、
他の処理に支障がでてしまうんだ。
このように、ポーリングで多くのイベントをさくさくと処理するのは
ちょっと無理があるというのがわかると思う。
そこで、出てくるのが「割り込み」なんだ。
次回は「割り込み」について説明していこう。
