チャネル・コントローラ
出典: フリー百科事典『ウィキペディア(Wikipedia)』
チャネル・コントローラ(channel controller)は、コンピュータシステムの一部であり、周辺機器とメモリの間のデータのやりとりを制御する単純なプロセッサ(CPU)である。設計の洗練度によって「周辺プロセッサ」あるいは「DMAコントローラ」とも呼ばれる。また、チャネル・コントローラを使った入出力方式をチャネルI/O(英: Channel I/O)と呼ぶ。
目次 |
[編集] 概要
多くの入出力タスクは複雑であり、データのフォーマットを変換するなどの処理をする必要がある。 このような場合コンピュータのCPUはそのタスクを周辺デバイスに任せるが、周辺デバイスの処理は遅いため、CPUはその間ずっと何もしないで待っていることになる。
チャネル・コントローラはこの問題を解決する。そのような入出力に関わる処理を行うためのCPUとメモリと回路を備えている。 チャネル・コントローラはあまり高性能である必要はなく、柔軟性もないが、その仕事をするには十分である。 実際にはコプロセッサの形式をとることが多い。 CPUは小さなプログラムをコントローラに送り、I/Oジョブを任せる。チャネル・コントローラはCPUの助けを借りずにそのジョブを完了させる。完了すると(あるいはエラーが発生すると)、チャネル・コントローラは割り込みでCPUに通知する。
チャネル・コントローラはコンピュータの主記憶装置に直接アクセスするので「DMAコントローラ」とも呼ばれる(DMAはdirect memory access)。しかし、DMAコントローラの定義はもっと広く、プログラム不可能なデバイスでもそのように呼ばれる。
最初にチャネル・コントローラを使ったのはCDC 6600スーパーコンピュータであり、12個の「周辺プロセッサ」(peripheral processor、PP)と呼ぶコンピュータを備えていた。PPは極めて強力で、実のところCDCの最初のコンピュータCDC 1604の機能削減版だった。1960年代からチャネル・コントローラは汎用コンピュータで必ず使われていた。CDCのPPは最も強力なチャネル・コントローラであり、単にチャネル・コントローラとしてだけでなく、オペレーティングシステムの大部分の仕事をこなした。
チャネル・コントローラはシングルチップで複数チャネルを操作するものも作られ、NeXTコンピュータでも使われた。 しかし、最近のコンピュータの性能向上が激しいため、またオペレーティングシステムが入出力待ち状態で停止することがなくなったため、小さなマシンでは使われなくなっていった。
チャネル・コントローラの機能はバスマスタリング周辺機器に受け継がれている。SCSIアダプタやネットワークカードがそれである。
[編集] 解説
チャネルI/Oのリファレンス実装とされているのは、IBM System/360 とその後継メインフレームのものであるが、同様の実装は他のメインフレーム(CDC、Bull、GE、ハネウェル、ユニシス)でも採用されている。
チャネルI/O方式を採用したシステムには、システムのCPUとは全く独立して入出力操作全体を制御する専用のハードウェア部品が存在する。チャネルI/O方式のシステムのCPUでは入出力のための機械語命令は一種類だけ存在するのが一般的である。その命令は「チャネルプログラム」の形式でI/O専用ハードウェアに入出力コマンド群を渡すための命令である。その命令を実行後、入出力処理はCPUを煩わせることなく行われ、オペレーティングシステムに通知すべきイベントが発生すると、I/OハードウェアがCPUに対して割り込みを通知する。
チャネルは独立したハードウェアコンポーネントであり、配下のコントローラや周辺機器の入出力を行う。名前が暗に示しているような単なる通信媒体ではない。I/O操作のリスト(チャネルプログラム)を与えられ、それを解釈してI/O処理を行うインテリジェントなハードウェア機器である。
各チャネルには1つ以上のコントローラや周辺機器が接続される。チャネルプログラムにはチャネル自身へのコマンドと、接続された各種コントローラや周辺機器へのコマンドが含まれる。OSは、必要なコマンド群を用意すると、そのチャネルプログラムを起動するための機械語命令を実行する。その後、チャネルは指定された処理が完了するまで動作する。
非常に複雑なチャネルプログラムを書くことも可能で、同時並行的に複数の入出力機器に対して様々な入出力操作を行うこともできる。この柔軟性があるため、CPUは個々の入出力操作を起動/監視/管理するオーバヘッドから解放される。チャネル機構は入出力専用であり、CPUよりも効率的に入出力処理が可能で、かつCPUと完全に並行動作できる。チャネルI/Oは Direct Memory Access (DMA) よりも複雑で機能が豊富である。多くのメインフレームのOSはチャネルI/Oの機能を完全には使いこなしていなかった。
大型メインフレームでは、CPU は並行して動作する強力なハードウェアコンポーネントの1つに過ぎない。様々な入出力コントローラ(メーカーによって名称は異なる)が入出力を専門に処理し、それらがやはり入出力専用のチャネルに接続されている。1つのシステムには複数のCPUと複数のI/Oプロセッサが存在することもある。このアーキテクチャにより、CPUの性能を犠牲にすることなく入出力性能を最適化する。メインフレームの実際のアプリケーションでは入出力性能が重要であり、このアーキテクチャによってメインフレームは非常に高いスループットを実現し、他のクラスのコンピュータとは一線を画していた。
[編集] チャネルプログラム
チャネルコマンド語(channel command word、CCW)とは、チャネルに接続された機器の入出力操作("read" や "seek" など)を指示するコマンドである。
CCW によってチャネルプログラムが構成される。チャネルプログラムはOSか何らかの独立したソフトウェア(診断プログラムなど)が作成する。CPUが上述の機械語命令を実行すると、独立した入出力処理ユニットに信号が送られ、その装置が要求されたI/Oに責任を持つ。システムのメインCPUはその間別の作業ができる。I/O操作処理中にOSに通知すべき事象が発生すると、入出力プロセッサはCPUに割り込みを送信し、OSにその後の処理を任せる。
チャネルI/Oでは入出力をかなり簡略化できる。例えば、IBM の Linux/390 では、DASD(Direct Access Storage Device)のトラック全体のフォーマットを1つのチャネルプログラム(つまり1回のI/O命令)だけで実行できる。その間、メインCPUは別の作業が可能である。
一般に、チャネルI/Oを採用したアーキテクチャでは、全周辺機器はチャネルに接続され、入出力は全てチャネルプログラムを使って行われる。