割 込 み(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) 割込み(事象)の分類 外部割込み 内部割込み
© Copyright 2024 ExpyDoc