割り込みって何?

【割り込みとは?】

 もともと「割り込み」とは何のことでしょうか? これはことば通り
割り込みです。つまり、コンピュータが通常のながれでプログラムを
実行している所へ、割り込んで強制的に別のプログラムを実行させ
ようとすることなので、割り込みと言われています。


【どんな使い方をする?】

 割り込みが使われるのは、主に実時間処理(リアルタイム処理)の
中で実行時間の長いプログラムを実行中に、他の即時処理が必要
な時です。
この時、優先度の低い長時間処理を一時停止させて、優先度の高
い処理を先に実行させるための手段として、「割り込み」を使います。
この流れを図で示したのが下図です。


    

【どんな風に実行される?】

 上図のような割り込みの場合を例にして説明します。
まず、普段は優先度の低い「タスクA」が常時動作しているとします。
その間に、割り込みが入ると、強制的に現在実行している命令が完了
した時点で、次の命令のアドレスを「戻り番地」としてスタックメモリに
格納したあと、特定の番地にジャンプします。(この特定のアドレスの
ことを「割り込みベクター」とも言います)
あらかじめこの特定の番地から始まる「割り込み処理プログラム」を
用意しておけば、割り込みが入った時には、この割り込み処理プロ
グラムが実行されることになります。

この割り込み処理プログラムで優先度の高い処理を実行し、実行が
完了したら、「RETURN」命令を実行します。するとスタックメモリに格納
しておいた戻り番地を取り出してそこにジャンプするので、元の優先度
の低い処理が再開されることになります。
この割り込み処理の形式は、サブルーチンに似ています。しかし、通常
のサブルーチンと異なるのは、割り込みによっていつでも強制的に開
始されることです。


【割り込み処理プログラム】

 割り込み処理では、もともと実行中であったプログラムを中断させる
分けなので、戻った時に元どおりに戻すことが必要です。何を戻すか
というと、レジスタです。
つまりコンピュータの資源であるレジスタは、割り込み処理プログラム
の中でも同じ物を使ってしまいます。従ってそのまま元のプログラムに
戻すと途中から突然異なった値のレジスタで再開されることになって
しまいます。これではプログラムは正常には動作しません。

そこで、割り込み処理プログラムの中では、最初に現在のレジスタ内容
を、一旦メモリに保存します。そして割り込み処理から抜けて戻る直前
にメモリからレジスタに再度呼び戻してリターンします。
これで、元のプログラムはどこで割り込まれても、正常にプログラムが
続けられることになるわけです。


  次のページへ     目次ページへ