割り込み優先度レベル(IPL )は、現在のシステム割り込み状態の一部であり、現在受け入れられる割り込み要求を示します。IPLは、プログラマブル割り込みコントローラのレジスタによってハードウェアで示される場合もあれば、スレッドのビットマスクまたは整数値とソースコードによってソフトウェアで示される場合もあります。[ 1 ]
整数ベースのIPLは、MOS Technology 6502のように、0(すべての割り込みを有効)または1(すべての割り込みを無効)の2つの値を持つ、わずか1ビットの小さなものになる場合もあります。しかし、一部のアーキテクチャでは、より広い範囲の値が許可されており、それぞれの値によって、より高いレベルを指定する割り込み要求は有効になり、同じレベルまたはより低いレベルからの要求はブロックされます。
割り込み要求に異なる優先順位を割り当てることは、システムのスループットと割り込みレイテンシのバランスを取る上で役立ちます。一部の種類の割り込みは他のものよりも迅速に対応する必要がありますが、処理量はそれほど多くない場合もあるため、そのような種類の割り込みに高い優先順位を割り当てるのは理にかなっています。[ 2 ]
割り込みレベルの制御は、カーネルデータ構造へのアクセスを同期するためにも使用されました。そのため、レベル3スケジューラの割り込みハンドラは、スケジューラデータ構造にアクセスする前に一時的にIPLを7に上げ、プロセスコンテキストを切り替える前に3に戻しました。ただし、割り込みハンドラがIPLを、自身が開始した時点よりも低くすることは許可されていませんでした。なぜなら、そうすると同期システムの整合性が損なわれる可能性があったからです。
もちろん、マルチプロセッサシステムにはそれなりの複雑さが伴いますが、ここではそれらについては触れません。
ハードウェアが何をサポートしているかに関わらず、一般的なUNIXタイプのシステムでは、最小レベル (すべての割り込みが無効) と最大レベル (すべての割り込みが有効) の 2 つのレベルしか使用されません。[ 3 ] [ 4 ]
これまで導入された中でも特に高度なIPL処理システムの一例として、VAXコンピュータと関連するVMSオペレーティングシステムは、0から31までの32段階の優先度レベルをサポートしています。優先度16以上は外部ハードウェアからの要求用であり、16未満の値はソフトウェア割り込み(オペレーティングシステムが内部的に自身の活動をスケジュールするために使用)に使用できます。すべての値が実際に使用されるわけではありませんが、以下に重要な値をいくつか示します。
AlphaハードウェアはIPL(内部プログラムロード)をネイティブにサポートしています。 2001年にOpenVMSがItaniumに移植された際、IPL方式はItaniumハードウェアが提供する機能を用いてシミュレートされました。