割り込み (コンピュータ)
集中的に管理する割り込みコントローラは存在せず、各周辺機(Z80 SIO, Z80 PIO, Z80 CTCなど)が、CPUに割り込みベクトル(後述)を出力する機能を持っていた。割り込み信号線のデイジーチェインの構成で優先順位をつける。
CPUの割り込み要求端子は1本もしくは複数用意され、CPUの種類や実装によって異なる。
複数の周辺機からの割り込み要求が発生可能な場合、1つの割り込みハンドラ(後述)で処理を行うと、どの周辺機がどのような割り込み要求を発生させたのか判別する処理を、プログラム側で行う必要がある。これに対しPC/AT互換機などでは、ハードウェアとして複数のIRQ端子を用意して、割り込み要因毎に異なるハンドラに処理を移すことができるようにした構成をとれるようにしたものがある。この機能を持った回路のことを割り込みコントローラ (Interrupt Controller) と呼び、CPUのIRQ端子を外部で拡張して制御するものである。マイクロコントローラでは同一チップ内にCPUと複数の周辺機が内蔵され、割り込みコントローラも内蔵されるものが多い。
次に代表的な割り込みコントローラの例について述べる。
エッジトリガでは、立上がり又は立下りといった片方向の変化だけを検出する「片エッジ検出」と、両方ともを検出する「両エッジ検出」がある。PCIバスではレベルトリガ方式の割り込み信号線が取り入れられている。
CPU が割り込みを認識するためには、割り込みをサンプリングするタイミングで、割り込み信号がアサートされている必要がある。割り込みソースが多い場合、アサートされている信号のサンプリングを完了するまでのサイクル数が増加することになるため、割り込み許可状態とするサイクル数がどの位必要になるか、事前に(割り込み許可状態とサンプリング開始のタイミングやサンプリング完了に要するサイクル数など)割り込み回路設計情報を確認しておく必要がある。
CPU が割り込みを認識し、割り込み終了後に実行再開すべき PC やフラグレジスタを退避した後、割り込み処理ルーティンにてソフトウェアが割り込みを許可しない限りそれ以上の割り込みがネストしないように CPU が割り込みを自動的に禁止するタイプの CPU と、割り込みが認識されたレベルよりも優先度が高い割り込みに限りネストしても受け付けるタイプの CPU がある。後者の例としてPDP-11がある。初期のUNIXがPDP-11向けに開発されたことから、割り込みレベルを設定するspl(英語版)命令がカーネル内で広く使用されており、他のアーキテクチャでもエミュレーションにより同機能を実装している。