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