酒居敬一(sakai.keiichi@kochi-tech.ac.jp) オペレーティングシステムJ/K 2004年11月15日2時限目 酒居敬一(sakai.keiichi@kochi-tech.ac.jp) http://www.info.kochi-tech.ac.jp/k1sakai/Lecture/OS2004/
割込み処理(プロセッサレベル) プロセッサが割込み要求を受け付ける 現在実行中の命令の実行完了を待つ 割込みシーケンスを実行 要求はマシンサイクルごとに監視 現在実行中の命令の実行完了を待つ 割込み発生の以前と以後を厳密に分離 割込みシーケンスを実行 復帰のための最低限の状態を保存 必要に応じて保護レベルの遷移(カーネルモードへ) 該当する割込み処理を実行 割込み処理の終了は特別な命令による 復帰シーケンスを実行し復帰
割込み処理が使用するレジスタの退避を行う 必要に応じて割り込みの許可 割込み処理 使用したレジスタを復帰 割込み処理(ソフトウェアレベル) プロセッサから制御を渡される 割込み処理が使用するレジスタの退避を行う 必要に応じて割り込みの許可 割込み処理 使用したレジスタを復帰 割り込みの完了を知らせて、制御を返す 割り込まれたプログラムは何もしない 割り込まれたプログラムには何も影響しない 割込み処理には割り込まれたプログラムの話は出てこない
割込みハンドラ レジスタなどの退避処理 必要に応じて割り込みの許可 レジスタなどの復帰処理 プロセッサへ制御を返す処理 割込み要因の解析・処理順序決定 該当の割込み処理ルーチンへの分岐 該当の割込み要因をクリアし1の解析へ レジスタなどの復帰処理 プロセッサへ制御を返す処理
多重割込み 割り込まれるプログラムも割り込むプログラムも、しょせんはプログラムである 原理的には、割り込んだプログラムに割り込むことは考えられる(多重割込み)
退避領域 割り込みはLIFO順で処理される スタックを使うのが自然である スタックを使うと問題もある スタックオーバーフローが起こるかもしれない スタックを使うプロセスと使われるプロセスで保護レベルが異なることがある
NMI(Non-Maskable Interrupt) (命令実行による)ソフトウェア割込み それ以外の割込み 割り込み処理の優先順位 NMI(Non-Maskable Interrupt) 常に割込み要求は受け付けられる(最高優先順位) (命令実行による)ソフトウェア割込み 命令実行により、ただちに受け付けられる それ以外の割込み 割込み許可状態(許可/不許可)に依存する 割込みのレベル(高い/低い)と現在実行中のプログラムのレベルを比較し判断 (通常処理) 最低優先順位 許可状態であればすべての割り込みを受付ける
割込みマスク 全割り込みを許可・不許可 割込みレベルに応じてマスク NMIを除くすべての割り込みを一括して許可・不許可 特権命令となっていることが多い ユーザープロセスからは操作できない 割込みレベルに応じてマスク レベルを設定し、それより高優先度のものだけ処理
優先順位の使い分け 高い優先順位の割込み 低い優先順位の割込み 処理は短時間で済むが、頻度が高い場合 割り込みは禁止してできるだけ速く処理 処理に時間がかかる場合 より高い優先順位の割り込みを許可して処理
割込みの発生 要因の状態(レベル)によるもの 要因の状態遷移(エッジ)によるもの 例:シリアルポートからの受信 例:HDDの処理完了 FIFOにデータがある→割り込み要求 FIFOにデータがない→割り込み要求の取り下げ 要因の状態遷移(エッジ)によるもの 例:HDDの処理完了 ヘッドのシーク操作が完了 データのDMA転送が完了
プロセスと割り込み1 実際の割り込みはすべてカーネルが受ける プロセスは仮想的な計算機である 計算機資源の管理はカーネルがします 当然、割り込みも仮想的に実装されてる シグナル シグナルハンドラー シグナルマスク
(命令による)ソフトウェア割り込みを使用 プロセスと割り込み2 システムコールの実装 ユーザー空間からカーネル空間へ遷移が必要 保護レベルが違う もちろん、互いの空間はそれぞれ保護されるべき システムコールのエントリーポイントがわからない プロセスの仮想空間からカーネルの該当エントリを探す手段がない。あるいは許可されていない。 (命令による)ソフトウェア割り込みを使用 保護レベルの遷移ができる 割り込み番号さえわかれば呼べる プロセスへなんら影響を及ぼさない
割り込みの有効性 事象が発生するのを待つ場合、 ポーリング 本来の処理時間以上にCPU時間を必要とする 割り込み プログラムが発生を常に監視する 監視する間隔は事象の最小の発生間隔以下 そうしないと事象の発生をとりこぼしてしまう 本来の処理時間以上にCPU時間を必要とする 割り込み 事象の発生を知らせてもらって、通常処理に割り込む 割り込みシーケンスのオーバヘッドだけが余分に必要
割り込みの発生要因 (リセット端子のアサート) 割込み端子のアサート 命令実行中の例外発生 ソフトウェア割込み命令の実行 リセットを最強の割り込みと位置付けるシステムもある 割込み端子のアサート マスク不可能割込み(NMI) 例: メモリのECCエラー(続行不可能) マスク可能割込み(通常の外部割込み) 命令実行中の例外発生 復帰可能割込み 例: ページフォルト、セグメンテーションフォルト 復帰不可能割込み 例: 未定義命令実行、ダブルフォールト ソフトウェア割込み命令の実行
割込み要因と割込み処理の関連付け 固定アドレス割り込み ベクタード割り込み エントリーポイントは固定 一般には要因をソフトウェアで解析して分岐 ハードウェアが単純 ベクタード割り込み 各要因に割込みベクタが用意されている ベクタテーブルに処理プログラムのエントリーポイントを記述 柔軟な構成が可能
固定アドレス割り込み 割り込み要因ごと、固定のエントリポイント 外部割込みの場合、プロセッサに準備された端子の数しかエントリポイントがない 単純なプロセッサのハードウェア 少ない割り込み処理オーバーヘッド 外部割込みの場合、プロセッサに準備された端子の数しかエントリポイントがない たとえば、優先レベルごとに1端子づつ… 要因の解析、該当の処理へ分岐、が必要 ソフトウェア処理が多くなる
ベクタード割り込み 割り込みの要因ごと、ベクタ番号が付加 エントリーポイントはベクタテーブルから引く プロセッサによる例外:プロセッサが生成 外部割込み:割り込みコントローラが生成 ソフトウェア割り込み:命令オペランドで指定 エントリーポイントはベクタテーブルから引く ベクタテーブルは主記憶上に置かれる プロセッサは特別なバスサイクルを生成 ベクタ番号をデバイスから取得(外部割込みの場合) ベクタ番号をもとに、割り込みベクタを主記憶から取得 プロセッサにはベクタテーブルの位置を保持するレジスタがある
割り込み処理とマルチタスク 似ているところ 似ていないところ 実行の流れ(スレッド)が複数ある スレッドどおし干渉しない 実行優先順位 階層的か対等か 割り込み許可・不許可(マルチタスクには???)