戻る

その他

目次


割り込み

割り込み方式

「x86-64アーキテクチャ」の割り込み手順

割り込みハンドラ

割り込みベクタ

IDT(Interrupt Descriptor Table):割り込み記述子テーブル

割り込み記述子の構造


フィールドbit説明
offset_low0-15bit+0byte(16bit)割り込みハンドラのアドレスを設定するフィールド。3つを組み合わせて64bitアドレスを指定する。
x86アーキテクチャは互換性を保ちつつ16bit,32bit,64bitと進化したため、このように分断されている。
offset_middle16-31bit+4byte(16bit)
offset_high0-31bit+8byte(32bit)
segment_selector16-31bit+0byte(16bit)割り込みハンドラを実行する際のコードセグメントを指定する。
コードセグメントは実行可能コードが置いてあるメモリ区画(セグメント)のことで、メモリアドレス空間のセグメントごとに実行可能、読み書き可能などの属性を設定できる。機能縮小で、現在は単にメモリ全体の属性を指定するだけの機能になってしまった。
Type8-11bit+4byte(4bit)記述子の種別を設定する
設定可能な値は「14(InterruptGate)」「15(TrapGate)」のみ。通常の割り込みであれば14を設定。
※TypeはGDTの「セグメントディスクリプタ」のTypeフィールドと共通している
名前値意味
Upper8Bytes0
LDT2
TSSAvailable9
TSSBusy11
CallGate12
InterruptGate14
TrapGate15
012構造体の初期化時に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
present15bit+4byte(1bit)記述子が有効であることを示すフラグ。1を設定する。
reserved0-31bit+8byte(32bit)

コード

割り込みのまとめ


トップへ戻る


トップへ戻る


トップへ戻る


トップへ戻る


トップへ戻る


トップへ戻る