割込み(1)

割 込 み(1)
オペレーティングシステム
No.5
割 込 み と は(1)
割込み発生





プログラムの実行中に
事象(event 割込み要因)が発生
 プログラムとは直接関係なく起こる場合(非同
期的という)
 プログラムのエラーなどにより起こる場合
割込み処理
現在の実行中のプログラムを中断
その事象を処理する別のプログラムを実行
元のプログラムの実行を再開する仕組み
プログラムが2つある!
割 込 み と は(2)

プログラムと割込み処理プログラムの関係
元のプログラム
再開
割込み処理
プログラム
実行開始
割込みにより




CPUと入出力装置の同時実行
TSS
障害時の適切な処理
現在のコンピュータを特徴づける機構
 初期のコンピュータにはなかった
割 込 み の 例?
①
②
③
④
人と雑談中
電話がかかってくる
話を中断して,電話にでる
電話終了後,話を再開
電話による
割込み
割込みの分類


(補足あり)
外部割込み
 実行中のプログラムに原因がないもの
 入出力装置の動作終了
 時間の経過
内部割込み
 実行中のプログラムに原因があるもの
 演算異常
 割込みを発生させる命令の実行
実行されるプログラム
が代わる
コンテクストスイッチ
割込み処理の概要(1)



事象発生
割込み処理プログラム開始
 元のプログラムを再開できるために必要な情
報を保存
割込み処理プログラム終了・元のプログラム再
開
割込み処理の概要(2)

割込み要因はいくつかある
① ひとつの割込み処理プログラムで処理
② 要因ごとに割込み処理プログラムを用意
割込み処理の概要(3)

①の場合
窓口がひとつしかない!
割込み処理の概要(4)

②の場合
窓口が分かれている
多重レベル割込み

①
②
③
④
⑤

割込み(要因)により,処理の優先度に差
割込みAの処理中
より優先度の高いBという割込み要因が発生
Aの処理を中断し,Bの処理を先に行う
Bの処理終了後,Aの処理を再開
Aの終了後,Aに割り込まれたプログラムを再
開
割込み処理プログラムに,割り込むことができ
る → 多重レベル割込み
多重レベル割込みの例?
① 雑談中の電話
② 電話中に非常ベル
③ 電話を中断して,非常ベルに対処
“電話割込み”より,
“非常ベル割込み”の方が
優先度が高い
割 込 み 禁 止(1)



優先度の高い割込みBを処理中
優先度の低い割込み要因A発生
Aの処理は,Bの終了まで待たされる
要因が発生しても,
常に割込み処理が行われる
わけではない
割 込 み 禁 止(2)



割込み(要因)ごとに割込みマスク(ビット)
ある割込みマスクがオフ
 その割込み要因が発生しても,その処理プロ
グラムの実行を始めない
 すなわち,現在処理中のプログラムに割り込
まない
割込み禁止
割 込 み 禁 止(3)

要因が発生しても,割込み処理を行わない
 高い優先度の割込み処理中
 割込みマスクがオフ
割 込 み 禁 止 の 例(1)?

雑談中に非常ベル

雑談を中断して非常ベルに対処

その最中に電話

電話は無視する
“非常ベル割込み”の方が
“電話割込み”よりも
優先度が高い
割 込 み 禁 止 の 例(2)?

講義の開始時に“電話割込み”のマスクをオフ

講義中に電話

電話割込み処理は行わない(電話にはでない)

講義が終了したら,マスクをオン
もし,まだ電話の呼出しが続いていたら…
割 込 み 禁 止 の 例(3)?

講義中に非常ベル

いかなることがあっても講義を中断


“非常ベル割込み”の割込みマスクをオフにする
ことはできない
割込みには,割込み禁止にできないものがある
補 足(1)




(文献3 p.335)
実行中のプログラ
ムに原因がない
外部割込みの例
I/O(入出力)
 入出力装置の処理終了または要求
タイマ
 一定時間の経過をCPUに知らせる
マシンチェック
 ハードウェアシステムの異常
補 足(2)



実行中のプログラ
ムに原因がある
内部割込みの例(1)
演算例外
 浮動小数点演算でのオーバフロー,零除算な
ど
命令コード異常
 存在しない命令,形式の不当な命令の実行
割込み処理プログラムでエラー処理を行う
補 足(3)



内部割込みの例(2)
ページフォールト
 仮想記憶管理における存在しないページへの
アクセス(詳細は記憶管理のところで)
 仮想記憶は後述
トレース
 システムデバッグのため命令実行ごとに生じ
る
補 足(4)



内部割込みの例(3)
特権命令違反
 システム管理命令を一般ユーザモードで実行
割出し(トラップ)
 OSへのシステムコールなど
 プログラマが意識的に発生させる
補 足(5)
TSSの実現の概要
① タイマーにある時間を設定
② プログラムAを実行
③ タイマーに設定した時間が経過

割込みが発生(プログラムAを中断)

補 足(6)
④ タイマーにある時間を設定
⑤ プログラムBを実行
⑥ タイマーに設定した時間が経過

割込みが発生(プログラムBを中断)
⑦ タイマーにある時間を設定
⑧ プログラムAを中断したところから再開

以下同様。