計算機システム概論 3 回目 本日のトピック : 割込みと入出力制御について割込み制御について問題点の明確化割込みとは割込みに対する処理について 入出力制御について入出力装置の接続入出力の操作入出力を効率的に行うための仕組み 1
入出力制御の歴史 OS 誕生のキッカケとなった動機 : プロセッサと入出力装置を同時並行的に動かしたい 実現したいこと入出力処理を行うジョブ ( 実行中のプロセス ) を 眠らせる 眠らせたプロセスと入れ替わりで, 他のプロセスを実行入出力処理が完了したら, 元のプロセスを 起こす 入出力開始入出力完了プロセスA sleep プロセス B 実行中待機中入出力中 2
どのようにアプローチするか プロセスの入出力処理を, 監視 制御する仕組みが必要 アプローチ1: 常時監視型プロセスを自由に動作させ, その動作を監視するプロセスの作業内容は千差万別自己中心的なプロセス, ズルをするプロセスの存在 アプローチ2: 専売特許型入出力処理は, プロセスから 委託 を受けてOSが担当する勝手な入出力を許さない仕組みの 作り込み が必要ソフトウェア的な仕組みだけでは, 対応が難しい 3
モード制御 プロセッサ (CPU) に 実行モード と呼ばれる状態を持たせる 特権モード ( カーネルモード, スーパバイザモード ) 入出力を含む全ての機械語命令が実行可能 一般モード ( ユーザモード ) 入出力等, 一部の機械語命令が使えない ハードウェアとソフトウェアが協調して, 問題に対処する 4
モードの切り替え OS の機能を実行するときは, プロセッサを特権モードに 通常ののプロセス実行時は, プロセッサを一般モードに プロセスから入出力の依頼があったとき... 一時的に特権モードに切り替えて,OS が入出力処理を代行 OS プロセス A プロセス B CPU モード 特権モード 一般モード 5
モード切替の方法 CPUモードは誰が, どのように切り替えるか特権モードから一般モード OSがモード切替命令を発行して切り替える 一般モードから特権モード単純な方法では切替を実現できないユーザジョブによるモード切替は防止しないといけない OSにだけモード切替を許可したい CPUからは,OSとジョブを区別できないハードウェア的な助けを借り, 特権モードへの切替を行う 割込み 6
基本的な考え方 特権モードが必要になるパターンは, 非常に限定的入出力処理をOSに依頼したい入出力の完了処理をしたいジョブ実行中にエラーが発生した ( ジョブ ( プロセス ) の切替を行いたい ) 対応策 : 各パターンの処理内容を固定する OSの機能を呼び出す スイッチ を設置するスイッチが押されると, プロセッサが特権モードに移行し, 決められた処理を実行する 7
割込みとは 割込み = 特権モードが必要な操作をシステムに要求すること入出力処理をOSに依頼したい入出力の完了処理をしたい実行プロセスを切り替えたい 適当なモノが割り込みを起こすことで, 実現する 割込みが起こると... OS が, 現在実行中のプロセスから CPU を横取りする ( プロセスから見ると,OS が仕事に割り込んでくる ) 8
割込みイベント 割り込みを起こすモノ : 実行中プロセスの外にあるもの : 外部割込み入出力装置タイマー 実行中プロセスの中にあるもの : 内部割込み ( 例外, 割り出しと呼ばれることも ) APIの呼び出し ( 入出力 ) プロセス実行中に発生するエラー 2 0=? 9
割込み処理 割込みが発生したとき... 1. CPUが割込み発生を検出 2. CPUが特権モードへ自動的に移行 3. OS 内の割込み処理ルーチンへジャンプ 4. OS 内ルーチンは, 現在実行中のプロセスを退避 5. 割り込みの種類を判定して処理を行う 6. OSが,CPUモードを一般モードに変更 7. プロセスの処理に戻る 外部割込み... 中断していたプロセスに復帰 内部割込み... プロセススケジューラに委ねる 10
割込み処理のフロー 割込み事象 通知 情報格納 メモリ CPU 特権モードへ割込み種類判別割込み受付 入出力装置 OS 入出力制御部 wakeup switch sleep 一般モードへ 制御をプロセスへ 11
入出力依頼割り込み (API 呼び出し ) 出力! 通知 CPU 特権モードへ 情報格納 メモリ 割込み種類判別 割込み受付 入出力装置 OS 入出力制御部 wakeup switch sleep 一般モードへ 制御をプロセスへ 12
入出力完了割込み 完了! 通知 CPU 特権モードへ 情報格納 メモリ 割込み種類判別 割込み受付 入出力装置 OS 入出力制御部 wakeup switch sleep 一般モードへ 制御をプロセスへ 13
タイマ割込み CPU 交代! 通知 特権モードへ 情報格納 メモリ 割込み種類判別 割込み受付 入出力装置 OS 入出力制御部 wakeup switch sleep 一般モードへ 制御をプロセスへ 14
割込み処理への割込み 割込み処理中に, 他の割込み事象が発生したら?...3 通りの対策がある. どれを使うかはケースバイケース 追加割込み禁止割込み処理中は, 他の割り込みを一切受け付けない選択的割込み許可現在処理中のものより優先度の高いものだけ受付サーバプロセス利用割込み処理を,OS 外部のプロセスへアウトソーシング 15
前半部のまとめ 割込み制御 : プロセッサと入出力を同時並行的に動かす仕組み抜け道を塞ぐため, かなり複雑な仕掛けが必要主として, 入出力の タイミング を制御する仕組み 後半部のお話 : 入出力を行うための仕組みと操作について 16
入出力装置 入力装置 : キーボード, マウス, CD-ROM 等 ユーザや外部機器から, 計算機に情報を与える装置 出力装置 : ディスプレイ, プリンタ, スピーカ等 計算機の保持する情報を, 計算機外部に取り出す装置 入力, 出力の両方に用いられる装置もある : フロッピーディスク, ハードディスク等 CPU の処理速度に比べると, 動作速度はかなり遅い 17
古典的な入出力処理方式 プロセッサによる直接制御プロセッサが直接, 入出力装置を制御していた ABCとタイプして改行, 一行分紙を進めてから... プロセッサが, 速度の遅い入出力装置にあわせる CPU の利用効率が非常に悪い CPU システムバス メモリ 入出力装置 CPU ディスク ( ディスク ) 18
やや進んだ入出力処理方式 入出力制御装置の導入独立した入出力制御装置を, コンピュータ内に設置プロセッサは, 制御装置にデータと指示を送るだけ入出力の完了は, 割込みによって通知される 直接制御より高速だが, データ転送に時間がかかる CPU メモリ CPU コントローラ ディスク 入出力制御装置 入出力装置 19
より進んだ入出力処理方式 着眼点 : 入出力装置に送りたいデータは, メモリ上にある DMA 方式 (Direct Memory Access) プロセッサは, 制御装置にデータの場所と指示を送る制御装置がメモリを直接参照しにいく入出力の完了は, 割込みによって通知される CPU メモリ CPU コントローラ メモリ 入出力制御装置 ( コントローラ ) 入出力装置 20
OS の構造と入出力処理 ユーザプログラムには, 入出力 APIを提供 API: Application Program Interfacce API 内部 : 必要なデータをセットし, 割込みを発生させる入出力の制御を行うルーチンは, 二重構造デバイス非依存部デバイス依存部 ( デバイスドライバ ) ユーザプログラム API 割込み制御部 入出力制御部 非依存部 デバイス 依存部 デバイス デバイス 21
入出力処理の流れ プログラム : 必要なデータを引数として入出力 APIを実行 API: 決められた領域に, 与えられたデータをセット API: 入出力機能呼出し割込みをかけるデバイス非依存部 : ユーザの要求を解釈, 翻訳デバイス依存部 : 入出力制御装置に指示を与える ユーザプログラム API 割込み制御部 入出力制御部 非依存部 デバイス 依存部 デバイス デバイス 22
入出力制御部の内部構造 入出力制御部 : デバイス依存部 ( デバイスドライバ ) 入出力機器を駆動する部分デバイス非依存部ユーザに対し, 抽象的 論理的なビューを与える入出力のタイミングを調整することで, 効率を改善 ファイルシステム 非依存部 デバイス 02 34 1b e3 22 4f 7a b2 55 生データ 依存部 デバイス 23
入出力の効率改善策 入出力には割込み処理が必要 割込み処理は, 複雑で効率が悪い 入出力回数をできるだけ少なくすれば, 全体の効率アップ 入出力処理の回数を減らすテクニックがよく使われるキャッシュ ( 入力対応 ) バッファリング ( 出力対応 ) 24
キャッシュ 多くの入力装置 : データを固まり ( ブロック ) として読み込む典型的なハードディスクの場合... 一度の読み出し操作で,1024バイトのデータが得られる キャッシュとは読み出したデータを一時的に保管し, 将来に備える機構入出力制御部システムバスへ遅い キャッシュ ( メモリ ) 速い 25
キャッシュの動作概要 1. 参照アドレス通知 2. キャッシュ内容チェック 3A. キャッシュに値がある場合, その値をリターン 3B-1. キャッシュに値がない場合, ディスクアクセス 3B-2. 1ブロック分のデータを読み込み, キャッシュへ格納 3B-3. 参照されたアドレスの内容をリターン 1 A-3, 3B-3 入出力制御部 2 3B-1 3B-2 キャッシュ ( メモリ ) 26
バッファリング 基本的なアイデア : リクエストのたびに出力を行うのは面倒ある程度リクエストがたまるのを待って, まとめて書込むリクエストは, メモリ上で一時保管 ( バッファ ) バッファリングなし バッファリングあり 27
UNIX のディスク管理 UNIXにおけるディスク装置入力にキャッシュを, 出力にバッファを用いるキャッシュ領域, バッファ領域は, 空きメモリ領域を利用定期的に, バッファの内容をディスクに書き込む いきなりコンピュータの電源を切ると... バッファで書き込まれるのを待っていた出力内容が, ディスク装置に反映されずに消えてしまう 28
本日のまとめ 入出力に関連する話題割込み制御のお話入出力制御のお話 次回の講義... メモリの管理 実験 ( 結果の提出不要 ): 少し規模の大きなプログラムを,2 回続けて起動する. 1 回目,2 回目それぞれについて, 起動にかかる時間, ハードディスクへのアクセス状況等を観察せよ. 29