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