os-05

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