割り込みとシグナル
ハードウェア割り込み
- 入出力装置から CPU に通知する割り込み
- 例
- ネットワークからのデータ受信で NIC から CPU に割り込みが入る
- 実行中のプログラムを
強制的に中断して
割り込みハンドラを起動
ソフトウェア割り込み
- プロセスの強制終了
- 実行中のプログラムが OS に制御を移したときだけにソフトウェア割り込みが起こる
- 例
- プロセスやスレッドが許可されていないメモリ上の位置にアクセス(セグメンテーション違反)
- 遅延実行
- アプリケーションが OS へ制御を移すとき
- システムコール
- プリエンプティブなプロセス切り替え(スケジューリング)
- ハードウェア割り込み
割り込み
割り込み発生回数と割り込みの種類
$ cat /proc/interrupts CPU0 0: 303 IO-APIC-edge timer 1: 10 IO-APIC-edge i8042 8: 0 IO-APIC-edge rtc0 9: 0 IO-APIC-fasteoi acpi 12: 155 IO-APIC-edge i8042 14: 3597 IO-APIC-edge ata_piix 15: 0 IO-APIC-edge ata_piix 19: 172 IO-APIC-fasteoi eth0 21: 24 IO-APIC-fasteoi snd_intel8x0 NMI: 0 Non-maskable interrupts LOC: 31838 Local timer interrupts SPU: 0 Spurious interrupts PMI: 0 Performance monitoring interrupts IWI: 1879 IRQ work interrupts RTR: 0 APIC ICR read retries RES: 0 Rescheduling interrupts CAL: 0 Function call interrupts TLB: 0 TLB shootdowns TRM: 0 Thermal event interrupts THR: 0 Threshold APIC interrupts DFR: 0 Deferred Error APIC interrupts MCE: 0 Machine check exceptions MCP: 1 Machine check polls ERR: 0 MIS: 0 PIN: 0 Posted-interrupt notification event NPI: 0 Nested posted-interrupt event PIW: 0 Posted-interrupt wakeup event
シグナル
- Ctr + c を押して実行中のプロセスを止めることがあるが、この仕組を支えているもの
表記 | 数値 | 意味 |
---|---|---|
HUP | 1 | 制御している端末/プロセスがハングアップした 端末は接続を切られる デーモンは再起動 |
INT | 2 | キーボードからの割り込み命令([Ctrl]+[C]キー) |
QUIT | 3 | キーボードからの中止命令([Ctrl]+[\]キー) |
TERM | 15 | プロセスの終了命令(デフォルト) |
KILL | 9 | プロセスの強制終了命令 |
STOP | 19 | プロセスの停止命令([Ctrl]+[Z]キー) |
CONT | 18 | プロセスの再開命令 |
- 「SIGHUP」「SIGINT」のように“SIG”を付ける場合もある
プロセス ID 100 のデーモンを再起動
$ sudo kill -HUP 100