x86アーキテクチャの割り込みについて
公開: 2023/06/11
割り込みとは
割り込みは周辺機器から受け取るイベントの一種。イベントが到着した際にハードウェアがOSに通知することで、マウスやキーボード入力などの効率的な処理が可能となる。
割り込みの種類
大きく分けてソフトウェア割り込み
とハードウェア割り込み
がある。
ハードウェア割り込み
- マウス操作
- キーボード操作
ハードウェア割り込みはCPU外部から要求されるため、周辺機器は割り込み要求線(IRQ)を用いて割り込むための電気信号を送る。周辺機器から送られた割り込み要求は割り込みコントローラ
を介してCPUに到着する。
ソフトウェア割り込み
- システムコードの呼び出し
- 0による除算
- 不正な命令の実行
今回はハードウェア割り込みを説明する。
x86のハードウェア割り込み
x86の割り込み処理は次のように実現される。
- ハードウェアがイベントをCPUに通知
- CPUは現在の処理を中断する
IDT
を参照して割り込みハンドラ
に処理を移す- 割り込み処理が完了すると中断していた処理を再開する
割り込みハンドラ
割り込み発生時に実行される関数。
IDT(Interrupt Descriptor Table)
IDTはOSが割り込み処理を管理するためのデータ構造。最大256個の16バイト要素を持つ配列。
以下のような役割がある。
- 割り込みの識別
- 割り込みベクタによって一意に識別される
- 割り込みハンドラのアドレス管理
- 割り込みベクタに対応する割り込みハンドラを格納しているため、IDTを参照することで適切なハンドラを実行できる
割り込みベクタ | 割り込みハンドラのアドレス |
---|---|
0 | xxxx |
1 | xxxx |
... | ... |
255 | xxxx |