計算機システム概論・3回目
本日のトピック:割込みと入出力制御について 割込み制御について 問題点の明確化 割込みとは 割込みに対する処理について 入出力制御について 入出力装置の接続 入出力の操作 入出力を効率的に行うための仕組み入出力制御の歴史
OS誕生のキッカケとなった動機: プロセッサと入出力装置を同時並行的に動かしたい 実現したいこと 入出力処理を行うジョブ(実行中のプロセス)を「眠らせる」 眠らせたプロセスと入れ替わりで,他のプロセスを実行 入出力処理が完了したら,元のプロセスを「起こす」 プロセスA プロセスB sleep 入出力開始 入出力完了どのようにアプローチするか
プロセスの入出力処理を,監視・制御する仕組みが必要 アプローチ1:常時監視型 プロセスを自由に動作させ,その動作を監視する プロセスの作業内容は千差万別 自己中心的なプロセス,ズルをするプロセスの存在 アプローチ2:専売特許型 入出力処理は,プロセスから「委託」を受けてOSが担当する 勝手な入出力を許さない仕組みの「作り込み」が必要 ソフトウェア的な仕組みだけでは,対応が難しいモード制御
プロセッサ(CPU)に「実行モード」と呼ばれる状態を持たせる 特権モード(カーネルモード,スーパバイザモード) 入出力を含む全ての機械語命令が実行可能 一般モード(ユーザモード) 入出力等,一部の機械語命令が使えない ハードウェアとソフトウェアが協調して,問題に対処するモードの切り替え
OSの機能を実行するときは,プロセッサを特権モードに 通常ののプロセス実行時は,プロセッサを一般モードに プロセスから入出力の依頼があったとき... 一時的に特権モードに切り替えて,OSが入出力処理を代行 OS プロセス A プロセス B CPUモードモード切替の方法
CPUモードは誰が,どのように切り替えるか 特権モードから一般モード OSがモード切替命令を発行して切り替える 一般モードから特権モード 単純な方法では切替を実現できない ユーザジョブによるモード切替は防止しないといけない OSにだけモード切替を許可したい CPUからは,OSとジョブを区別できない ハードウェア的な助けを借り,特権モードへの切替を行う ⇒ 割込み基本的な考え方
特権モードが必要になるパターンは,非常に限定的 入出力処理をOSに依頼したい 入出力の完了処理をしたい ジョブ実行中にエラーが発生した (ジョブ(プロセス)の切替を行いたい) 対応策: 各パターンの処理内容を固定する OSの機能を呼び出す「スイッチ」を設置する スイッチが押されると,プロセッサが特権モードに 移行し,決められた処理を実行する割込みとは
割込み = 特権モードが必要な操作をシステムに要求すること 入出力処理をOSに依頼したい 入出力の完了処理をしたい 実行プロセスを切り替えたい ⇒ 適当なモノが割り込みを起こすことで,実現する 割込みが起こると... OSが,現在実行中のプロセスからCPUを横取りする (プロセスから見ると,OSが仕事に割り込んでくる)割込みイベント
割り込みを起こすモノ: 実行中プロセスの外にあるもの:外部割込み 入出力装置 タイマー 実行中プロセスの中にあるもの:内部割込み (例外,割り出しと呼ばれることも) APIの呼び出し(入出力) プロセス実行中に発生するエラー 2÷0=?割込み処理
割込みが発生したとき... 1. CPUが割込み発生を検出 2. CPUが特権モードへ自動的に移行 3. OS内の割込み処理ルーチンへジャンプ 4. OS内ルーチンは,現在実行中のプロセスを退避 5. 割り込みの種類を判定して処理を行う 6. OSが,CPUモードを一般モードに変更 7. プロセスの処理に戻る 外部割込み... 中断していたプロセスに復帰 内部割込み... プロセススケジューラに委ねる割込み処理のフロー
割込み 事象 CPU メモリ 通知 情報格納 特権モードへ 割込み種類判別 OS 入出力装置 sleep 割込み受付 wakeup switch 入出力制御部 一般モードへ入出力依頼割り込み(API呼び出し)
CPU メモリ 通知 情報格納 特権モードへ 割込み種類判別 OS 入出力装置 sleep 割込み受付 wakeup switch 入出力制御部 一般モードへ 出力!入出力完了割込み
完了! CPU メモリ 通知 情報格納 特権モードへ 割込み種類判別 OS 入出力装置 sleep 割込み受付 wakeup switch 入出力制御部 一般モードへタイマ割込み
交代! CPU メモリ 通知 情報格納 特権モードへ 割込み種類判別 OS 入出力装置 sleep 割込み受付 wakeup switch 入出力制御部 一般モードへ割込み処理への割込み
割込み処理中に,他の割込み事象が発生したら? ...3通りの対策がある.どれを使うかはケースバイケース 追加割込み禁止 割込み処理中は,他の割り込みを一切受け付けない 選択的割込み許可 現在処理中のものより優先度の高いものだけ受付 サーバプロセス利用 割込み処理を,OS外部のプロセスへアウトソーシング前半部のまとめ
割込み制御: プロセッサと入出力を同時並行的に動かす仕組み 抜け道を塞ぐため,かなり複雑な仕掛けが必要 主として,入出力の「タイミング」を制御する仕組み 後半部のお話: 入出力を行うための仕組みと操作について入出力装置
入力装置:キーボード,マウス, CD-ROM等 ユーザや外部機器から,計算機に情報を与える装置 出力装置:ディスプレイ,プリンタ,スピーカ等 計算機の保持する情報を,計算機外部に取り出す装置 入力,出力の両方に用いられる装置もある: フロッピーディスク,ハードディスク等 CPUの処理速度に比べると,動作速度はかなり遅い古典的な入出力処理方式
プロセッサによる直接制御 プロセッサが直接,入出力装置を制御していた 「ABCとタイプして改行,一行分紙を進めてから...」 プロセッサが,速度の遅い入出力装置にあわせる CPUの利用効率が非常に悪い CPU ディスク CPU メモリ 入出力装置 システムバス (ディスク)やや進んだ入出力処理方式
入出力制御装置の導入 独立した入出力制御装置を,コンピュータ内に設置 プロセッサは,制御装置にデータと指示を送るだけ 入出力の完了は,割込みによって通知される 直接制御より高速だが,データ転送に時間がかかる CPU コントローラ CPU メモリ 入出力装置 入出力制御装置 ディスクより進んだ入出力処理方式
着眼点:入出力装置に送りたいデータは,メモリ上にある
DMA方式 (Direct Memory Access)
プロセッサは,制御装置にデータの場所と指示を送る 制御装置がメモリを直接参照しにいく 入出力の完了は,割込みによって通知される CPU メモリ 入出力装置 入出力制御装置 CPU コントローラ メモリ
OSの構造と入出力処理
ユーザプログラムには,入出力APIを提供 API: Application Program Interfacce
API内部:必要なデータをセットし,割込みを発生させる 入出力の制御を行うルーチンは,二重構造 デバイス非依存部 デバイス依存部(デバイスドライバ) API 割 込 み 制 御 部 デ バ イ ス 非 依 存 部 デ バ イ ス 依 存 部 入出力制御部 デバイス ユーザ プログラム