オペレーティングシステム...ポーリングと割込み •...

21
オペレーティングシステム オペレーティングシステム ( ( 割り込み処理 割り込み処理 ) ) 2006 2006 10 10 31 31 酒居敬一 酒居敬一 ( ( sakai.keiichi@kochi sakai.keiichi@kochi - - tech.ac.jp tech.ac.jp ) ) http http ://www.info.kochi ://www.info.kochi - - tech.ac.jp/k1sakai/Lecture/OS/2006/ tech.ac.jp/k1sakai/Lecture/OS/2006/

Upload: others

Post on 20-Jan-2020

0 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: オペレーティングシステム...ポーリングと割込み • 通常処理中に、随時、別処理の必要性を監視 • 例:掲示板 ¾何かあったら連絡してくれたらいいのに…

オペレーティングシステムオペレーティングシステム((割り込み処理割り込み処理))

20062006年年1010月月3131日日

酒居敬一酒居敬一(([email protected]@kochi--tech.ac.jptech.ac.jp))

httphttp://www.info.kochi://www.info.kochi--tech.ac.jp/k1sakai/Lecture/OS/2006/tech.ac.jp/k1sakai/Lecture/OS/2006/

Page 2: オペレーティングシステム...ポーリングと割込み • 通常処理中に、随時、別処理の必要性を監視 • 例:掲示板 ¾何かあったら連絡してくれたらいいのに…

割り込み処理割り込み処理

• 割り込み処理の概念文字どおり、実行の流れに「割り込み」ます…

• 割り込みハンドラ「割り込む」ほうの処理について…

• 有効性

Page 3: オペレーティングシステム...ポーリングと割込み • 通常処理中に、随時、別処理の必要性を監視 • 例:掲示板 ¾何かあったら連絡してくれたらいいのに…

ポーリングと割込みポーリングと割込み

• 通常処理中に、随時、別処理の必要性を監視• 例: 掲示板

何かあったら連絡してくれたらいいのに…というしくみを計算機に組み込んだものが

「割込み処理」である

それに対して

Page 4: オペレーティングシステム...ポーリングと割込み • 通常処理中に、随時、別処理の必要性を監視 • 例:掲示板 ¾何かあったら連絡してくれたらいいのに…

割込み処理の概念割込み処理の概念

• 通常処理を中断させて、別の処理を行い、通常処理を再開すること。

• 例:

1. 食事をしていたところ、電話が鳴った。2. 箸を置いて、電話に応対した。3. 再び箸を手に取り、食事を続ける

• 割り込まれた側に影響を与えてはいけない– 実行だけは遅れるが…

Page 5: オペレーティングシステム...ポーリングと割込み • 通常処理中に、随時、別処理の必要性を監視 • 例:掲示板 ¾何かあったら連絡してくれたらいいのに…

割込み処理(プロセッサレベル)割込み処理(プロセッサレベル)

1. プロセッサが割込み要求を受け付ける要求はマシンサイクルごとに監視

2. 現在実行中の命令の実行完了を待つ割込み発生の以前と以後を厳密に分離

3. 割込みシーケンスを実行復帰のための最低限の状態を保存

必要に応じて保護レベルの遷移(カーネルモードへ)

4. 該当する割込み処理を実行割込み処理の終了は特別な命令による

5. 復帰シーケンスを実行し復帰

Page 6: オペレーティングシステム...ポーリングと割込み • 通常処理中に、随時、別処理の必要性を監視 • 例:掲示板 ¾何かあったら連絡してくれたらいいのに…

割込み処理(ソフトウェアレベル)割込み処理(ソフトウェアレベル)

1. プロセッサから制御を渡される2. 割込み処理が使用するレジスタの退避を行う3. 必要に応じて割り込みの許可4. 割込み処理5. 使用したレジスタを復帰6. 割り込みの完了を知らせて、制御を返す

割り込まれたプログラムは何もしない割り込まれたプログラムには何も影響しない

割込み処理には割り込まれたプログラムの話は出てこない

Page 7: オペレーティングシステム...ポーリングと割込み • 通常処理中に、随時、別処理の必要性を監視 • 例:掲示板 ¾何かあったら連絡してくれたらいいのに…

割込みハンドラ割込みハンドラ

• レジスタなどの退避処理

• 必要に応じて割り込みの許可

1. 割込み要因の解析・処理順序決定2. 該当の割込み処理ルーチンへの分岐3. 該当の割込み要因をクリアし1の解析へ

• レジスタなどの復帰処理

• プロセッサへ制御を返す処理

Page 8: オペレーティングシステム...ポーリングと割込み • 通常処理中に、随時、別処理の必要性を監視 • 例:掲示板 ¾何かあったら連絡してくれたらいいのに…

多重割込み多重割込み

• 割り込まれるプログラムも割り込むプログラムも、しょせんはプログラムである

• 原理的には、割り込んだプログラムに割り込むことは考えられる(多重割込み)

Page 9: オペレーティングシステム...ポーリングと割込み • 通常処理中に、随時、別処理の必要性を監視 • 例:掲示板 ¾何かあったら連絡してくれたらいいのに…

退避領域退避領域

• 割り込みはLIFO順で処理される

• スタックを使うのが自然である• スタックを使うと問題もある

– スタックオーバーフローが起こるかもしれない

– スタックを使うプロセスと使われるプロセスで保護レベルが異なることがある

Page 10: オペレーティングシステム...ポーリングと割込み • 通常処理中に、随時、別処理の必要性を監視 • 例:掲示板 ¾何かあったら連絡してくれたらいいのに…

割り込み処理の優先順位割り込み処理の優先順位

• NMI(Non-Maskable Interrupt)–常に割込み要求は受け付けられる(最高優先順位)

• (命令実行による)ソフトウェア割込み–命令実行により、ただちに受け付けられる

• それ以外の割込み–割込み許可状態(許可/不許可)に依存する–割込みのレベル(高い/低い)と現在実行中のプログラムのレベルを比較し判断

• (通常処理)–最低優先順位–許可状態であればすべての割り込みを受付ける

Page 11: オペレーティングシステム...ポーリングと割込み • 通常処理中に、随時、別処理の必要性を監視 • 例:掲示板 ¾何かあったら連絡してくれたらいいのに…

割込みマスク割込みマスク

• 全割り込みを許可・不許可– NMIを除くすべての割り込みを一括して許可・不許可–特権命令となっていることが多い

• ユーザープロセスからは操作できない

• 割込みレベルに応じてマスク–レベルを設定し、それより高優先度のものだけ処理–特権命令となっていることが多い

• ユーザープロセスからは操作できない

Page 12: オペレーティングシステム...ポーリングと割込み • 通常処理中に、随時、別処理の必要性を監視 • 例:掲示板 ¾何かあったら連絡してくれたらいいのに…

優先順位の使い分け優先順位の使い分け

• 高い優先順位の割込み–処理は短時間で済むが、頻度が高い場合–割り込みは禁止してできるだけ速く処理

• 低い優先順位の割込み–処理に時間がかかる場合–より高い優先順位の割り込みを許可して処理

Page 13: オペレーティングシステム...ポーリングと割込み • 通常処理中に、随時、別処理の必要性を監視 • 例:掲示板 ¾何かあったら連絡してくれたらいいのに…

割込みの発生割込みの発生

• 要因の状態(レベル)によるもの–例:シリアルポートからの受信

• FIFOにデータがある→割り込み要求• FIFOにデータがない→割り込み要求の取り下げ

• 要因の状態遷移(エッジ)によるもの–例:HDDの処理完了

• ヘッドのシーク操作が完了• データのDMA転送が完了

Page 14: オペレーティングシステム...ポーリングと割込み • 通常処理中に、随時、別処理の必要性を監視 • 例:掲示板 ¾何かあったら連絡してくれたらいいのに…

プロセスと割り込み1プロセスと割り込み1

実際の割り込みはすべてカーネルが受ける

計算機資源の管理はカーネルがします

プロセスは仮想的な計算機である

当然、割り込みも仮想的に実装されてる

• シグナル• シグナルハンドラー• シグナルマスク

Page 15: オペレーティングシステム...ポーリングと割込み • 通常処理中に、随時、別処理の必要性を監視 • 例:掲示板 ¾何かあったら連絡してくれたらいいのに…

プロセスと割り込み2プロセスと割り込み2

• システムコールの実装–ユーザー空間からカーネル空間へ遷移が必要

• 保護レベルが違う• もちろん、互いの空間はそれぞれ保護されるべき

–システムコールのエントリーポイントがわからない• プロセスの仮想空間からカーネルの該当エントリを探す手段がない。あるいは許可されていない。

• (命令による)ソフトウェア割り込みを使用–保護レベルの遷移ができる–割り込み番号さえわかれば呼べる–プロセスへなんら影響を及ぼさない

Page 16: オペレーティングシステム...ポーリングと割込み • 通常処理中に、随時、別処理の必要性を監視 • 例:掲示板 ¾何かあったら連絡してくれたらいいのに…

割り込みの有効性割り込みの有効性

• 事象が発生するのを待つ場合、

1. ポーリングプログラムが発生を常に監視する

監視する間隔は事象の最小の発生間隔以下そうしないと事象の発生をとりこぼしてしまう

本来の処理時間以上にCPU時間を必要とする2. 割り込み

事象の発生を知らせてもらって、通常処理に割り込む

割り込みシーケンスのオーバヘッドだけが余分に必要

Page 17: オペレーティングシステム...ポーリングと割込み • 通常処理中に、随時、別処理の必要性を監視 • 例:掲示板 ¾何かあったら連絡してくれたらいいのに…

割り込みの発生要因割り込みの発生要因• (リセット端子のアサート)

– リセットを最強の割り込みと位置付けるシステムもある• 割込み端子のアサート

–マスク不可能割込み(NMI)• 例: メモリのECCエラー(続行不可能)

–マスク可能割込み(通常の外部割込み)• 命令実行中の例外発生

–復帰可能割込み• 例: ページフォルト、セグメンテーションフォルト

–復帰不可能割込み• 例: 未定義命令実行、ダブルフォールト

• ソフトウェア割込み命令の実行

Page 18: オペレーティングシステム...ポーリングと割込み • 通常処理中に、随時、別処理の必要性を監視 • 例:掲示板 ¾何かあったら連絡してくれたらいいのに…

割込み要因と割込み処理の関連付け割込み要因と割込み処理の関連付け

固定アドレス割り込み

エントリーポイントは固定

一般には要因をソフトウェアで解析して分岐

ハードウェアが単純

ベクタード割り込み

各要因に割込みベクタが用意されている

ベクタテーブルに処理プログラムのエントリーポイントを記述

柔軟な構成が可能

Page 19: オペレーティングシステム...ポーリングと割込み • 通常処理中に、随時、別処理の必要性を監視 • 例:掲示板 ¾何かあったら連絡してくれたらいいのに…

固定アドレス割り込み固定アドレス割り込み

• 割り込み要因ごと、固定のエントリポイント–単純なプロセッサのハードウェア–少ない割り込み処理オーバーヘッド

• 外部割込みの場合、プロセッサに準備された端子の数しかエントリポイントがない

–たとえば、優先レベルごとに1端子づつ…–要因の解析、該当の処理へ分岐、が必要– ソフトウェア処理が多くなる

Page 20: オペレーティングシステム...ポーリングと割込み • 通常処理中に、随時、別処理の必要性を監視 • 例:掲示板 ¾何かあったら連絡してくれたらいいのに…

ベクタード割り込みベクタード割り込み

• 割り込みの要因ごと、ベクタ番号が付加–プロセッサによる例外:プロセッサが生成–外部割込み:割り込みコントローラが生成– ソフトウェア割り込み:命令オペランドで指定

• エントリーポイントはベクタテーブルから引く–ベクタテーブルは主記憶上に置かれる–プロセッサは特別なバスサイクルを生成

• ベクタ番号をデバイスから取得(外部割込みの場合)• ベクタ番号をもとに、割り込みベクタを主記憶から取得

– プロセッサにはベクタテーブルの位置を保持するレジスタがある

Page 21: オペレーティングシステム...ポーリングと割込み • 通常処理中に、随時、別処理の必要性を監視 • 例:掲示板 ¾何かあったら連絡してくれたらいいのに…

割り込み処理とマルチタスク割り込み処理とマルチタスク

• 似ているところ–実行の流れ(スレッド)が複数ある–スレッドどおし干渉しない

• 似ていないところ–実行優先順位

• 階層的か対等か–割り込み許可・不許可(マルチタスクには???)