割込み機構
「割込み」とはいつ発生するかわからない事柄について、それが起きたときに教えてもらう仕組みです。最もわかりやすい例が電話です。電話は自分が掛けるならば、いつ掛けるかがわかりますし自分で決められます。でも逆に掛かってくる時はどうでしょう。いつ誰が掛けてくるかまったく予想できません。彼女が「今晩電話するね」と言ったとしても、今晩と言う大ざっぱな時間はわかっても具体的に何時何分何秒かはわかりません。
その代わりに電話では掛かってきたときにベルが鳴り(着メロやバイブでも同じです)、電話が掛かってきたことがわかるようになっています。この時食事をしていたとしましょう。食事を中断して電話に出ますね。電話での話が終われば、また食事を続けることができます。
ここでの食事を中断、これが「割込み」になります。つまり食事中に電話の着信が割り込まれたわけです。もし電話に掛かってきたことが通知される機能がなかったとしたらどうなるでしょう。いつ掛かってくるかわからないのですから、いつ掛かってきてもいいように常に受話器を耳に当てていなければなりません。そうでなければ自分で受話器を取った時と相手が掛けるタイミングが会わなければ電話で話すことはできません。これでは使い物になりません。コンピューターも同じです。割込みがなければCPUは常に終わったか終わったかと、来ているか来ているかと自分でチェックし続けなければなりません。それだけでCPUの能力を使い切ってしまいます。
IBMおよびその互換メインフレーム・コンピューターでは以下の6種類について、ハードウェアが割込みを通知します。
割込みタイプ | 発生するタイミング |
---|---|
入出力割込み | I/O動作が完了した時 |
監視プログラム呼出し割込み | SVC命令が発行された時 |
プログラム割込み | プログラムエラーが起きたとき |
機械チェック割込み | プロセッサー装置の誤動作や異常が発生した時 |
外部割込み | 外部信号による割込みで、タイマーやコンソール操作などがある |
再始動割込み | リスタート操作による割込み(CPUループなどでの回復操作) |
上記の割込み事象が発生すると、ハードウェア(プロセッサー装置)が自動的にOSに割込みを通知します。割込みが起きた時は、専用の処理プログラムが実行されるようCPUが自動的にPSWを入れ替えます。OSはそのプログラムが実行されれば対応した割込みが起きたとわかるわけです。
具体的には実メモリーの先頭部分にあるPSA(*1)と言うエリアに、それぞれ6つの割込みが発生した時に実行するOSのプログラム・アドレスを含むPSW内容が割込み種類別に設定されています(*2)。割込みが起きるとCPUはその時点のPSWを保管し、割込み処理用の新たなPSWを読み込むことで、OSの割込みルーチンにジャンプする仕組みになっています。割込み処理が終わると保管していたPSWとレジスター(*3)の内容を戻して、割込み前に動いていたプログラムの実行を続けることになります。
*1 OSとCPUが直接コミュニケーションを取るための領域。
*2 IPL時に設定されます。
*3 レジスターの値は各割り込み処理ルーチンで保管されます。