オペレーティングシステム

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