| フィールド | bit | 説明 | ||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| offset_low | 0-15bit+0byte(16bit) | 割り込みハンドラのアドレスを設定するフィールド。3つを組み合わせて64bitアドレスを指定する。 x86アーキテクチャは互換性を保ちつつ16bit,32bit,64bitと進化したため、このように分断されている。 | ||||||||||||||||||||||||
| offset_middle | 16-31bit+4byte(16bit) | |||||||||||||||||||||||||
| offset_high | 0-31bit+8byte(32bit) | |||||||||||||||||||||||||
| segment_selector | 16-31bit+0byte(16bit) | 割り込みハンドラを実行する際のコードセグメントを指定する。 コードセグメントは実行可能コードが置いてあるメモリ区画(セグメント)のことで、メモリアドレス空間のセグメントごとに実行可能、読み書き可能などの属性を設定できる。機能縮小で、現在は単にメモリ全体の属性を指定するだけの機能になってしまった。 | ||||||||||||||||||||||||
| Type | 8-11bit+4byte(4bit) | 記述子の種別を設定する 設定可能な値は「14(InterruptGate)」「15(TrapGate)」のみ。通常の割り込みであれば14を設定。 ※TypeはGDTの「セグメントディスクリプタ」のTypeフィールドと共通している
| ||||||||||||||||||||||||
| 0 | 12 | 構造体の初期化時に0となる。CPUから見ると[system_segment = 0,type = 14]の「割り込みゲートディスクリプタ(interrupt gate discriptor)」ということが分かる。 | ||||||||||||||||||||||||
| descriptor_privilege_level(DPL) | 13-14bit+4byte(2bit) | 割り込みハンドラの実行権限を設定する。割り込み記述子のDPLにはほとんどの場合に0を設定しておけば問題ない。 | ||||||||||||||||||||||||
| interrupt_stack_table(IST) | 0-2bit+4byte(2bit) | 本書では常に0 | ||||||||||||||||||||||||
| present | 15bit+4byte(1bit) | 記述子が有効であることを示すフラグ。1を設定する。 | ||||||||||||||||||||||||
| reserved | 0-31bit+8byte(32bit) |