Web教材一覧ハードウェアとソフトウェア

入出力制御

学習のポイント

入出力機器にはHDDやキーボードのように多様な種類があり、それぞれに適した入出力制御方式があります。その概要を理解します。
(本文は周辺機器関連なので「ハードウェアの基礎」の部品になりますが、選択問題ではCPU命令との関連で出題されることが多いので「CPUの仕組み」に入れています。)

キーワード

入出力制御方式、バス、チャネル、デバイスドライバ、プログラム制御方式、DMA制御方式、チャネル制御方式、CCW、マルチプレクサチャネル


入出力制御の概要(用語の説明)

CPUの処理速度に比べて入出力装置の動作は非常に遅いので、入出力命令が発生すると、その情報を入出力コントローラに渡し、入出力コントローラが入出力を実行している間にCPUは他の処理をさせれば、全体としての効率が向上します。
 このような制御をすることを入出力制御(input-output control)といいます。

入出力装置は多様でそれぞれ特徴があります。磁気ディスクでは大量データの転送が必要ですし、キーボードはデータ量が小さく転送速度も比較的低速でよいでしょう。マウスでは画面での位置の表示が必要になります。それで、入出力装置の特徴にあわせてた標準的な制御方式(後述)があります。

入出力装置は製品ごとに特徴があり、それにあわせて標準的な制御方式を微妙に修正したり、機能を追加する必要があります。入出力制御はOSの重要な機能ですが、製品ごとの機能をOSに持たせることはできません。それで、OSと入出力機器の間に、それぞれの機器専用のソフトウェアが必要になります。それをデバイスドライバといいます。

CPU、メモリ、入出力装置(内蔵機器もある)の間を結ぶ伝送路のことをバス(システムバス)あるいはチャネル(入出力チャネル)といいます。一般的には、バスは物理的、チャネルは論理的な表現ですが、とはメモリと入出力との間の伝送路、そこに設置される入出力専用のコンピュータ(回路)やそのソフトウェアをチャネルということもあります。

入出力制御方式

入出力制御方式とは、各種の入出力装置を効率よく動作させるための標準的な制御の方法です。

プログラム制御方式

PIO(Programmed I/O)方式、直接制御方式ともいいます。プログラムで制御命令をCPUの制御用レジスタへ書き込みます。
 入出力のたびにレジスタを介して主記憶装置と入出力装置の間のデータ転送を直接制御するため、CPUの動作が中断するので効率が悪い方式です。
 初期のコンピュータで用いられていた方式ですが、現在でもキーボードやプリンタなど低速な入出力装置に使われています。

DMA(Direct Memory Access)制御方式

CPUと入出力装置の間に、DMA(Direct Memory Access)コントローラとよばれる入出力制御専用の装置を設置して、CPUを介さずに入出力装置とメモリ間の転送を行う方式です。
 入出力命令があるとCPUはDMAコントローラに情報を送り、それ以降はDMAコントローラが入出力を行ないます。専用なので入出力速度が向上します。入出力が行われている間、CPUは他の処理ができるので、CPUの利用効率が向上します。
 HDDのように大量のデータをブロック単位で転送するのに適しているます。現在のパソコンの多くは、この方式を採用しています。
 反面、この方式はメモリと入出力装置間のバスを占有するので、入出力実行中に他の入出力装置へのアクセスができない欠点があります。

チャネル制御方式

DMA制御方式を発展させた方式です。DMAコントローラと同様なチャネル装置を設置します。チャネルはCPUから入出力命令を受けると、メモリに置かれた専用プログラム(CCW:Channel Command Word)を自律的に読出して実行します。
 チャネルでの伝送路には、接続装置別の専用チャネルと、複数種類別の汎用チャネルがありますが、いづれも通常のバスとは競合しないので、DMA制御方式が回避されます。
 汎用コンピュータでは、かなり以前から採用されていました。

チャネルの種類

チャネルには、大きく次の種類(モード)があります。
   チャネル
    ├セレクタチャネル(バーストモード)
    │   一つの入出力装置が開始から終了までチャネルを占有する
    │   (磁気テープ:連続して入出力するので中断の機会がない)
    └マルチプレクサチャネル
      │  複数の入出力装置が時分割でチャネルを共有する
      ├バイトマルチプレクサチャネル
      │  転送がバイト単位(キーボードやプリンタなど)
      └ブロックマルチプレクサチャネル
         転送がブロック単位
         (HDDのシーク時間にチャネルを他の機器に渡す)