最終更新:2016-09-16 (金) 15:18:26 (2772d)  

Linux/割り込み
Top / Linux / 割り込み

Linuxでの割り込み処理について。

ドキュメント

Linuxカーネル割り込みとして扱うもの

外部装置割り込み

  • SCSIホストアダプタ、ネットワークカード、端末装置などが生成する割り込み。その割り込みに対応するデバイスドライバの割り込みハンドラを起動する

タイマー割り込み

  • タイマーコントローラが一定周期で割り込みを発生させる。Linuxでは2種類のタイマー割り込み(グローバルタイマー割り込み、ローカルタイマー割り込み)を利用している。

プロセッサ割り込み?

  • マルチプロセッサ環境において、ほかのCPUへ何らかの事象を通知するために利用される。割り込み要求を受けたCPUは、その事象に対応する処理を実行する

NMI

  • 通常の割り込みは、マスクすることによって、CPUが割り込みを受け取ることを抑制できるが、NMIはマスクできない。通常は、緊急時の障害対応目的で利用される

procfs

  • Linux/proc/interrupts - I/O デバイスあたりの CPU あたりの割り込み数を一覧表示
  • Linux/proc/irq?

コンテキスト

割り込みハンドラ

ハンドラの登録

ハンドラ自体

  • irqreturn_t irq_handler_t(int irq, void *dev)
    • irq: 割り込み番号。
    • dev: request_irq() で指定したデバイス。
    • 結果:
      • IRQ_NONE? - 割り込みは、自分自身のものではなかった。
      • IRQ_HANDLED? - 割り込みをきちんと処理した。

分類

トップハーフ?

ボトムハーフ

softirq

  • Linux 2.3?以降、32の静的に定義されたボトムハーフ一式を実装する。現在は9つ。
  • 動的な新しいメカニズムとは異なり、コンパイル時に静的要素として定義される
  • かつて、カーネルスレッドのコンテキストで最も優先される処理 (ソフトウェア割り込み) に使用されていた

タスクレット

ワークキュー (Linux 2.5?〜)

関連

参考