入出力の完了を割込みでCPUに知らせる制御方式
割込み制御方式とは、入出力の完了を、I/O装置からCPUへ「割込み」で知らせる制御方式のことです。CPUは完了を自分で確認しに行く必要がなく、依頼したあとは別の仕事を進めておけます。
身近な例で考えると、電子レンジの「チン」という音に似ています。レンジの前で待ち続けなくても、温まれば音で知らせてくれるので、その間に別の家事を進められます。プログラム制御方式が「のぞき込み続ける」のに対し、割込み制御方式は「終わったら呼んでもらう」やり方です。
上のツールで▶ボタンを押すと、CPUがI/Oに依頼したあと別の仕事を次々と進め、I/O完了時に紫色の割込み信号で知らされてからデータを処理する流れを確認できます。
割込み(interrupt)とは、今実行している処理を一旦中断させ、別の処理を先に行わせる仕組みです。I/O装置は準備が終わると、CPUに割込み信号という電気的な合図を送ります。
割込みを受け取ったCPUは、次の手順で対応します。
・① 今の作業を一時保存:どこまで進めたかを記録して中断する
・② 割込み処理プログラムを実行:I/Oからデータを受け取るなどの処理を行う
・③ 元の作業に復帰:保存しておいた続きから作業を再開する
ポイントは、CPUが自分から「終わった?」と確認しに行くのではなく、必要になった瞬間にだけ呼び出される(受け身でいられる)ことです。これにより、待ち時間を別の仕事に充てられます。割込みはI/O完了だけでなく、エラー発生やタイマー満了など、さまざまな出来事の通知にも使われる、コンピュータの基本的な仕組みです。
割込み制御方式は、プログラム制御方式(ポーリング)の最大の欠点である「待ち時間にCPUが遊んでしまう」問題を解決します。両者を表で比べてみましょう。
| 項目 | プログラム制御 | 割込み制御 |
|---|---|---|
| 完了の知り方 | CPUが繰り返し確認 | I/Oが割込みで通知 |
| 待ち時間のCPU | 遊んでいる(ビジー待ち) | 別の仕事ができる |
| CPUの負荷 | 高い(無駄が多い) | 低い(有効活用) |
| 仕組みの複雑さ | 単純 | やや複雑(割込み処理が必要) |
両者の違いを一言でまとめると、「自分から見に行く」のがプログラム制御、「向こうから知らせてもらう」のが割込み制御です。
ただし、割込み制御方式でもデータを実際にメモリへ運ぶのはCPU自身です。大量のデータを転送するときは、この転送作業だけでもCPUの負担が大きくなります。そこで、転送そのものをCPUから切り離して専用回路に任せるのが、次の段階であるDMA制御方式です。