割り込みと割り込み処理
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2021/04/21 02:01 UTC 版)
「データゼネラルNova」の記事における「割り込みと割り込み処理」の解説
ハードウェアの観点から見ると、割り込み機構は比較的単純であったが、現在のCPUアーキテクチャに比べると柔軟性に欠けるものであった。 バックプレーンは、1本の割り込み要求ラインをサポートしており、割り込み要求が可能なデバイスはすべてこのラインに接続されていた。 デバイスが割り込みを要求する必要がある場合は、デバイスはこのラインを立ち上げた。 CPUは、現在の命令を完了するとすぐに割り込みを実行する。 上記のように、デバイスが割り込みを要求した場合は"done"のI/Oフラグを立てることになっており、CPUがそのデバイスのチャネルでI/Oクリア命令を実行すると、デバイスは割り込み要求をクリアすることになっていた。 CPUは、オペレーティングシステムが割り込みサービスルーチンのアドレスをメモリアドレス1に格納することを期待していた。 デバイスが割り込みを行うと、CPUはアドレス1を介して間接的にジャンプし、戻りアドレスをメモリアドレス0に配置して、それ以上の割り込みを無効にした。 次に、割り込みハンドラはINTA命令を実行して、割り込みデバイスのチャネル番号を検出する。 これはバックプレーン上の「アクノリッジ」信号を立ち上げることで動作する。 アクノリッジ信号は、バックプレーン上でデイジーチェーン形式で配線されており、バス上の各基板をループしている。 割り込みを要求するデバイスは、アクノリッジ信号がバスへ伝播するのをブロックして、2つ以上のデバイスが同時に保留中の割り込みを持っていた場合、最初のデバイスだけがアクノリッジ信号を受け取ることができるようにする必要がある。 そのデバイスは、そのチャネル番号をバス上のデータラインに設定することで応答する。 つまり、同時割り込み要求があった場合は、カードケージ内のCPUに物理的に最も近いデバイスが優先されることになる。 割り込みが処理され、サービスルーチンがデバイスにI/Oクリアを送信した後、割り込みを有効にし、メモリアドレス0を介して間接ジャンプして戻ることで、通常の処理を再開した。 リターンジャンプの直前に保留中の割り込みが発生しないように(リターンアドレスが上書きされてしまう)、INTEN命令には1命令サイクルの遅延があった。 これを実行すると、JMP@0命令であるはずの次の命令が実行されるまで割り込みが有効にならなかった。 次に、オペレーティングシステムの割り込みサービスルーチンは、通常、受信したチャネル番号を使用してインデックス・ジャンプを実行し、そのデバイスの特定の割り込み処理ルーチンにジャンプする。 特にCPUの電源障害検出回路のように、INTA命令に反応しないデバイスもあった。 INTAがゼロの結果を返した場合、割り込みサービスルーチンは、どのデバイスが割り込みを行ったかを確認するためにSKPDZ / SKPDN命令を使用してINTAに応答しないデバイスをすべてポーリングしなければならなかった。 オペレーティングシステムは、MSKO命令を使用して割り込みマスクを設定することで、割り込みの順序をある程度管理することができる。 これは、ある特定の時間にどのデバイスが割り込みを許可されているかをオペレーティングシステムが判断できるようにするためのものである。 この命令が発行されると、バックプレーン上のすべてのデバイスに16ビットの割り込みマスクが送信された。 マスクが実際に何を意味するかを決定するのはデバイス次第であった。慣例により、マスクアウトされたデバイスは割り込みラインを立ち上げてはいけないとされていたが、CPUはこれを強制する手段を持っていなかった。 マスク可能なデバイスの多くは、基板上のジャンパーでマスクビットを選択できるようになっていた。 マスクを完全に無視するデバイスもあった。 磁気コアメモリ(電源がなくても内容を保持する)を備えたシステムでは、電源障害からの回復が可能であった。 コンピュータの主電源の喪失を検出すると、CPU内の停電検出回路が割り込みを発行し、その時点から電源装置のコンデンサが充電されなくなってCPUへの電力供給が停止するまでにCPUには少し時間があった。 これは、IORST命令を発行して進行中のI/Oを停止し、4つのアキュムレータの内容とキャリービットをメモリに保存するのに十分な時間であった。 電源が回復したときに、CPUのフロントパネルのキースイッチがLOCK位置にあれば、CPUは起動してメモリアドレス2を経由して間接ジャンプを行う。 これは、アキュムレータとキャリービットを再ロードし、その後、通常の処理を再開するオペレーティングシステムのサービスルーチンのアドレスであると予想されていた。 電源障害によって中断されたI/O操作をどのようにして再開するかは、サービスルーチンにかかっていた。
※この「割り込みと割り込み処理」の解説は、「データゼネラルNova」の解説の一部です。
「割り込みと割り込み処理」を含む「データゼネラルNova」の記事については、「データゼネラルNova」の概要を参照ください。
- 割り込みと割り込み処理のページへのリンク