4章 linuxカーネル - 割り込み・例外 1

13
4 章 Linux カーネル – 割り込み・例外 1 ・概要 mao Web >https://www.pridact.com Twitter >https://twitter.com/rivarten Mail >[email protected]

Upload: mao999

Post on 21-Jan-2018

260 views

Category:

Software


0 download

TRANSCRIPT

Page 1: 4章 Linuxカーネル - 割り込み・例外 1

4 章 Linux カーネル – 割り込み・例外 1・概要

maoWeb >https://www.pridact.comTwitter >https://twitter.com/rivartenMail   >[email protected]

Page 2: 4章 Linuxカーネル - 割り込み・例外 1

はじめに

割り込み・例外の話

視点・概要・ハードウェアの動作・データ構造・データ構造の操作の仕方・ソースコード

ソースコードの情報が載っている場合は ,実際にソースコードに目を通しながら資料を見ていったほうがいいかもしれません。

今回はハードウェアの話が多いかもしれません

Page 3: 4章 Linuxカーネル - 割り込み・例外 1

この資料について

・間違っていたらご指摘をお願い致します。・ Linux Kernel のバージョンは 4.9.16 です。・ページタイトルに * 印が付いているページは、 少し踏み込んだ内容になっています。 ざっと全体に目を通したければ、読み飛ばして もらっても構いません。

Page 4: 4章 Linuxカーネル - 割り込み・例外 1

カーネル参考文献

< 参考書 > 〜基本的に古い情報だが、基本は学べる〜

・詳解 LINUX カーネル 第 3 版 (O’REILLY・ Linux カーネル 2.6 解読室 (Softbank Creative・ Linux カーネル解析入門 ( 工学社・ Modern Operating Systems 3e International

(Pearson, Andrew S. Tanenbaum) 〜初期化部分を知りたいなら〜

・新装改訂版 Linux のブートプロセスを見る( アスキー・メディアワークス )

< 参考 Web>・ Linux Cross Reference[http://lxr.free-electrons.com]・ Wikipedia

Page 5: 4章 Linuxカーネル - 割り込み・例外 1

概要 (1)

・割り込み

・入出力デバイスから「何かが起きた」というイベントを通知する仕組み .・プロセッサが実行する命令列を変更するイベント .・CPU内部またはCPU外部のハードウェア回路が生成する 電気的な信号 ( 割り込み信号 ,IRQ) によって発生する .  (IRQ:Interrupt ReQuests: 割り込み要求 )

・プログラムカウンタの現在の値を (eip,cs) カーネルモードスタックに 退避する .・その後 , 割り込みの種類に対応したアドレスをプログラムカウンタに 代入する .

Page 6: 4章 Linuxカーネル - 割り込み・例外 1

概要 (2)

・同期割り込み⇔例外

・ CPU が命令を実行中にCPUの制御回路が生成する .・各命令の実行終了時のみ制御回路が割り込みを発生させる為 , 同期的と呼ばれる .・プログラミングエラーやカーネルが処理しなければならない異常や 特殊な状態の場合に発生 .

・非同期割り込み⇔割り込み

・ CPU のクロック信号に合わせて , CPU以外のハードウェアデバイスが 任意の時点で生成する .・インターバルタイマと I/O デバイスが生成する .

Page 7: 4章 Linuxカーネル - 割り込み・例外 1

割り込みの方針 (1)

割り込み処理は ,既に実行中の処理を中断する為 ,極めて慎重に行う必要がある .

・出来るだけ早く割り込みへの対応を済ませ , 後でいいことは後にする .・割り込みは I/O デバイスをビジー状態のまま留めてしまう為 , 可能な限り多くの割り込みを受け付けるべき .・カーネルが割り込みハンドラを処理中に割り込みが入っても 支障なく実行できるようにすべき .・カーネル処理の大部分は , 出来るだけ割り込みを許可したままにして おくべき .

※割り込みハンドラ (Interrupt Handler)割り込みが発生したときにそれに対応する為に実行される関数 .

例外に対応する為に実行される関数は例外ハンドラ .

Page 8: 4章 Linuxカーネル - 割り込み・例外 1

割り込みの方針 (2)

・割り込みコンテキスト

・割り込みハンドラや例外ハンドラを実行するコードは , 割り込み発生時に実行中だったプロセスを一時中断して 処理を行うカーネル実行パス .

Page 9: 4章 Linuxカーネル - 割り込み・例外 1

割り込みの方針 (3)

Linux では , 割り込みの応答性を確保する為に ,ソフトウェア的に作り出す , 割り込みに似た「ソフト割り込み手法」を導入 .

・ソフト割り込み

・緊急部分 即座に処理する必要がある処理 . 応答性を必要とする処理 .

・遅延部分 後回しにしてもいい処理 . 応答性を必要としない処理 .

Page 10: 4章 Linuxカーネル - 割り込み・例外 1

割り込みと例外の種類 (1)

・割り込み

・マスク可能割り込み (マスカブル割り込み )IRQ はすべてマスク可能割り込み .割り込み要求は ,マスク状態・マスク解除状態の 2状態 .制御回路は ,マスク状態の割り込みをマスク解除されるまで無視 .

・マスク不可割り込み(ノンマスカブル割り込み /Non-Maskable Interrupt:NMI)ごく少数のクリティカルな事象 ( ハードウェア故障等 ) だけがマスク不可割り込み .どんな時でも CPU に通知される .

Page 11: 4章 Linuxカーネル - 割り込み・例外 1

割り込みと例外の種類 (2)

・例外・フォルト一般的には修復可能な例外 .一度修復すると , プログラムは連続性を失うことなく処理を再開可能 .退避された eip の値は ,フォルトを発生した命令のアドレス .例外ハンドラ終了時に , この命令から再実行する .

・トラップトラップ命令を実行すると直ちに発生する例外 .カーネルがこの処理を終えて元のプログラムへ戻ると ,プログラムは連続性を失うことなく処理を再開可能 .退避された eip の値は , トラップを発生させた命令の次に実行すべき命令のアドレス .トラップは完了した命令を再実行する必要がない場合にだけ発生 .プログラムのデバッグ等でブレークポイントとして使われる .

Page 12: 4章 Linuxカーネル - 割り込み・例外 1

割り込みと例外の種類 (3)

・例外・アボート

致命的なエラーが発生した場合の例外 .制御回路が問題を抱えていて , 例外が発生した命令の正確なアドレスを eipレジスタに退避できないかもしれない .ハードウェアエラー ,システム内に無効な値もしくは矛盾した値が含まれる場合等の深刻なエラーにより発生する .制御回路から送られる割り込み信号は , アボート例外ハンドラに制御を移すための緊急信号 .このハンドラでは該当プロセスを終了させるしかない .

・ソフトウェア割り込みプログラマの要求によって発生する例外 .int 命令や int3 命令によって発生する .into 命令 (オーバーフローを調べる ),bound 命令 ( アドレス境界を調べる ) も ,結果が真でない場合にこの例外を発生させる .システムコールの実装 , デバッガに特定の事象を通知 .

Page 13: 4章 Linuxカーネル - 割り込み・例外 1

割り込みと例外の識別

・割り込みベクタ / 例外ベクタそれぞれの割り込みと例外を ,8bit符号なし整数0~255の番号で識別 .・ NMI, 例外ベクタは番号が固定されている .・マスク可能割り込みベクタは , 割り込みコントローラを操作することで変更可能 .