Transcript 第8回入出力制御
第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) ... 個々の文字の解釈を
ユーザプログラムが行い、デバイスドライバ
は生データを渡すのみ
入出力を行うソフトウェアの階層
ユーザプログラム
入出力ライブラリ
ディレクトリ管理
装置に
依存しない
ファイル管理
バッファ管理
デバイスドライバ
装置依存
割込みハンドラ