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

入出力管理

キーワード

入出力管理、入出力制御方式、プログラム制御方式、DMA制御方式、チャネル制御方式、チャネル、CCW、マルチプレクサチャネル、バッファリング、スプーリング、キーバッファ、デバイス管理、デバイスマネージャ、デバイスドライバ


入出力管理

入出力管理(I/O管理)とは、コンピュータ本体と入出力装置との間の入出力を管理するOSの機能です。
 CPUの処理速度に比べて入出力装置の動作は非常に遅いので、入出力命令が発生すると、その情報を入出力コントローラに渡し、入出力コントローラが入出力を実行している間にCPUは他の処理をさせれば、全体としての効率が向上します。これはマルチタスク環境でのタスク管理で行います。
 タスク管理がCPUを対象にしているのに対して、入出力管理は入出力処理に着眼しています。


入出力制御方式(input-output control)

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

プログラム制御方式

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

DMA(Direct Memory Access)制御方式

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

チャネル制御方式

チャネル

CPU、メモリ、入出力装置(内蔵機器もある)の間を結ぶ伝送路のことです。
 チャネルを経由してデータをやり取りする簡単なプロセッサ(回路)をチャネルコントローラ(チャネル制御装置)といいます。ソフトウェアで実現していることもあります。DMAコントローラもチャネルコントローラの一つです。
 チャネルとにたものにバス(システムバス)があります。同義語として使われることもありますが、内蔵機器との物理的な伝送路を指すのが通常です。

チャネルの種類

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

チャネル制御方式

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


バッファリング、スプーリング

入出力バッファ

CPUとメモリの間に置かれるキャッシュメモリと同じような考え方です。入出力処理とCPU処理の処理速度の違いを緩和するために、入出力装置と処理装置との間に設けた緩衝領域です。
 その緩衝領域には、メモリ、入出力機器、入出力機器に置かれたディスクキャッシュなどがあります。

出力装置での処理はCPU処理に比べて処理時間が長いので、1回の出力命令ごとに実際に装置を使って入出力処理をしていたのでは、並行処理をしていてもCPUに空き時間が生じてしまいます。
 それを回避するために、出力命令があっても出力装置に書き出さずに、メモリのバッファ領域に保存します。メモリへの書込みを出力処理だとすれば、出力時間は比較的短いので、CPUの遊び時間を減らすことができます。
 書き出したバッファ領域のデータは、出力装置が空いた時に、CPU処理とは無関係に出力します。

入力処理の場合は、最初の入力命令で入力装置から該当するデータだけでなく、連続するデータをバッファ領域に入るだけ一挙に読み込みます。その後の入力命令には、対象となるデータをバッファ領域から取り出します。バッファ領域にないならば、入力装置から該当するデータに連続するデータをバッファ領域に読み込みます。
 これにより、毎回の入力時間を短縮することができます。
 しかし、効果があるのは次の入力命令が前の命令に近いデータを使うときであり、離れたデータを使う処理では、かえって入力時間が長くなてしまいます。

スプーリング(スプール)

バッファリングの典型的な例にスプーリングがあります。スプーリングは、プリンタなどの低速な入出力装置に対するデータの転送をディスク装置などを介して実行する機能のことです。

入出力バッファではメモリ上のバッファ領域を使う例にしましたが、スプーリングでは、プリンタの速度とディスクの速度の違いに着目して、ディスクをバッファとして使うのが一般的です。

印刷文書は、バッファに格納され、プリンタは処理できる速度でバッファから印刷文書を引き出して印刷します。利用者は、プリンタが印刷している間でも、次の印刷指示を、印刷バッファにキューを登録することができます。これを円滑に行うサーバをプリントサーバといいます。
複数の周辺装置を、稼働中に同時に動作させることもできます。

スプーリングでは、スプールされたものを出力待ちジョブとして、ジョブスケジューラの管理下におかれ、優先順位に従って、ジョブスケジューラの持つライタ機能によりプリンタに出力されます。その観点では、スプーリングは入出力管理ではなくジョブ管理の機能だといえるかもしれません。

キーバッファ

キーボードからの入力文字を一時的にメモリに保存しておくことです。
CPU負荷の高い処理があると、キーボードからの入力情報を受け取れなくなってしまうことがあります。そこで、キーボードからの入力をいったんキーバッファに蓄えておき、CPUに順次送り出すことで確実に受け取ることができるようにする仕組みです。


デバイス管理

パソコンを構成している部品や接続されている周辺機器のことをデバイスといいます。
 デバイス管理機能には、
  デバイス制御管理
  アプリケーションが各種のデバイスを統一的に取り扱うためのインタフェース機能
  各種のデバイスに対応したデバイスドライバの登録/管理機能
などがあります。
 これらをデバイス管理機能としてOSの一機能とすることもあれば、入出力管理に含めることもあります。

デバイスマネージャ

デバイスマネージャとは、パソコンに接続している機器が正常に認識されていることを確認したり、ドライバのインストールを行ったりします。
 デバイスマネージャの機能を追加することにより、禁止設定ポリシーを設定して、例えばUSBメモリの接続禁止をすることなどができます。

インタフェースの統合

各種入出力装置の入出力方法を統合する仕組みです。

「ファイルAから読込み、結果をファイルBに書き出す」というように、プログラムでは勝手なファイル名を与えるだけです。そのファイルがどのような名称で登録されており、どのデバイス(補助記憶装置)にあるのかは、ジョブ管理でのJCL文などで指示します。すなわち、実行時になって記憶装置が決定されます。
 物理的なデータ入出力の方法は磁気ディスクとUSBメモリでは異なりますが、プログラマはその違いを考慮せずにプログラムを作成することになります。

デバイス管理では、各入出力装置のOPEN. READ, WRITE, CLOSE などの動作の入出力インターフェースを統合することにより、どの装置であっても、同一プログラムで動作できるようにしています。この機能の実現はデバイスドライバが必要になります。

デバイスドライバ

入出力装置は製品ごとに特徴があります。OSは標準的な入出力の制御方式を提供しますが、製品ごとの機能をOSに持たせることはできません。それで、OSと入出力機器の間に、それぞれの機器専用のソフトウェアが必要になります。それをデバイスドライバといいます。
 デバイスドライバは機器メーカーが作成提供しています。広く流布している機器はOSが事前にインストールされていますが、そうでない場合は、機器に付属しているCD-ROMやインターネットからインストールする必要があります。
 デバイスドライバは、OSが提供する標準的方式のAPIを用いて連携します。そのため、OSが異なればそれに合わせたデバイスドライバが必要になります。OSに大きなバージョンアップが行われた場合も同様です。デバイスドライバがバージョンアップしてもOSを修正する必要はありません。