第8回入出力制御 デバイスコントローラ ポーリングと割込み 入出力の方式 − − PIO DMA 入出力のためのソフトウェア技法 入出力ハードウェア CPU 主記憶 システムバス ディスク コントローラ 磁気ディスク ビデオ コントローラ プリンタ ドライバ 入出力制御とデバイスコントローラ 入出力装置を制御することは、OSの重要な役割の一つ CPU(メインプロセッサ)は、デバイスコントローラを介して入出力 制御を行う OSの入出力装置を担当するソフトをデバイスドライバと呼ぶ デバイスコントローラ − − − − 特定の型の入出力装置に対する操作インターフェースをCPU上のソフトウェ アに提供 データレジスタ ... 転送するデータを一時的に格納するレジスタ 状態レジスタ ... 入出力の結果をCPU(プログラム)から参照 できるように するための状態レジスタ 入出力ポート ... プログラムから制御するための インターフェース メモリマップト入出力(memory-mapped I/O) 分離入出力(isolated I/O) デバイスコントローラによる 入出力装置の動き(入力の場合) 1. 2. 3. プログラムが入出力ポートを通じてデバイス コントローラに入出力装置から、デバイスコ ントローラにデータをデータレジスタに読み 出す指令を出す データの読み出しが完了すると、状態レジ スタに完了の状態がセットされる CPUは状態レジスタを参照し、入力が正常 に行われたかを調べ、データをデータレジス タから取り出す デバイスコントローラにおける 入出力装置の動作(出力) 1. 2. 3. CPUはデバイスコントローラのデータレジス タに出力データを入れ、これを装置に書き 込むように指令 状態レジスタに出力の結果がセットされる CPUは、状態レジスタをチェックし、出力が 正常に完了したかを調べる 入出力の並列処理 入出力装置の動作は、CPUの処理速度に比べ、桁 違いに遅い CPUが、入出力動作の完了を待ち続けるのは大変 なオーバヘッドとなる デバイスコントローラが入出力を行っている間、 CPUは他の処理(他の実行可能プロセス)を行う − 処理のオーバラッピング・並列化 入出力の完了を知る方法が鍵 − − ポーリング 割込み ポーリング デバイスコントローラに入出力動作の完了を示すフラグを用 意 CPUは、入出力操作と並列で他のプロセスを処理 周期的にこのフラグを見に行き、動作完了をチェックする 周期短 ⇒ CPUの時間のほとんどがフラグチェックに費や されてしまう 周期長 ⇒ 入出力装置が遊んでしまう CPU 起動 周期的に完了フラグ をチェック 後処理 入出力装置 プロセスA プロセスB 割込み処理 ポーリングは、フラグチェックに要する時間が無駄で ある 入出力の完了を割込みによって、CPUに通知する − − 割込みハンドラ 割込みベクタ 起動 CPU 後処理 入出力装置 完了を割込みで 通知 プロセスA プロセスB 入出力の方式 PIO(Programmed I/O) ... CPUと入出力装置の データ転送をCPUが行う − − キーボードやシリアルプリンタなどの1Byte単位の低速な 入出力装置によく使われる ディスプレイ ... ビデオRAMに表示したデータを書き込む DMA(Direct Memory Access) ... DMAコントロー ラと呼ばれる専用のハードウェアがCPUと独立して データ転送を行う − − 一度に大量のデータをブロック単位で転送するのに適し ている DMAコントローラは、CPUに比べて高い優先度でシステ ムバスを獲得できる DMA転送による入出力 例:ディスクに対するアクセス src_addr, dest_addr CPU DMA コントローラ counter バイト数 dest_addr src_addr Read/Write src_addr 完了割込み DMA転送 dest_addr 入出力要求 主記憶 転送停止命令 システムバス バッファ ディスク コントローラ ディスク 入出力装置の分類(Unix) キャラクタ型端末 ... 1文字単位の入出力を行う装置 − − キーボード、シリアル回線 cf). /dev 以下でls –l すると crwx------ などのようにモード 表記の一番左がcとなっている装置 ブロック型端末 ... ブロックを単位として入出力を行 う装置 − − 磁気ディスク、磁気テープ cf). /dev 以下でls –l すると brwx------ などのようにモー ド表記の一番左がbとなっている装置 入出力のためのソフトウェア技法 バッファリング ... 入出力とプロセッサの処理をオー バラップさせるために、入出力用にバッファと呼ばれ る一時記憶領域に入出力データを蓄積する技法 キャッシング ... 一度利用されたデータを主記憶 (キャッシュ)上に一時的に格納し、再利用時のデー タアクセスの高速化を実現する スプーリング ... 急を要さない入出力を専用のプロ セス(スプーラという)に依頼し、入出力を一元管理 する手法 − プリンタなどによく利用されている バッファリング データを受け渡しする者同士の速度差を緩和する(バッファ→ 緩衝器と いう意味) 入出力装置とバッファは、ブロック単位で転送 バッファとプログラムは、レコード単位もしくは、バイト単位で受け渡し ブロッキング ... 複数のレコードを1つのブロックにまとめて出力する − − − − 入出力の回数を減らせる ブロッキング係数n ... 1つのブロックがn個のレコードを含む レコード一つあたりの準備操作の時間は1/n になる レコード間ギャップ(IRG), ブロック間ギャップ(IBG) ... ブロックが小さいと、 ギャップ領域大となり、使用効率落ちる。 デブロッキング ... バッファに読み込んだブロックを複数のレコードに分 割して、プログラムに渡す ダブルバッファリング ... 作業用バッファと、転送用バッファの2つを1組 にして使用する − − プログラムは、作業用バッファに対して入出力操作を行う 作業用バッファと転送用バッファのコピーがOSによって行われる 端末入出力制御 キー入力の流れ 1. 2. 3. 4. キーボードからの文字入力は、割込みにより通知される 押されたキーのコードを入力ポートから取り出す ASCIIコードなどの文字コードに変換 SHIFTやCTRLなどのキーが押された状態をチェック 5. 大文字、小文字、制御文字の解釈 主記憶上のバッファに格納される エコー(echo) ... デバイスドライバが、入力した文字 を一文字ずつ画面に表示する − エコーさせるかどうかは、ソフトウェアが指定する 端末入出力の手法 文字単位の入出力 ... 1文字ずつ転送し、文 字単位でエコー 行あるいは画面単位の入出力 ... バッファを 持ち、行単位あるいは画面単位で転送し、局 所的にエコーを返す − ↵キーが押されると、バッファがフラッシュされるな ど 端末入出力のモード 標準モード(canonical mode) ... 個々の文字 の解釈をユーザプログラムではなく、デバイ スドライバが行う 生モード(raw mode) ... 個々の文字の解釈を ユーザプログラムが行い、デバイスドライバ は生データを渡すのみ 入出力を行うソフトウェアの階層 ユーザプログラム 入出力ライブラリ ディレクトリ管理 装置に 依存しない ファイル管理 バッファ管理 デバイスドライバ 装置依存 割込みハンドラ
© Copyright 2025 ExpyDoc