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

第8回入出力制御