x86アーキテクチャの割り込みについて

割り込みとは

割り込みは周辺機器から受け取るイベントの一種。イベントが到着した際にハードウェアが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

参考