チャネル・コントローラ
[Wikipedia|▼Menu]

チャネル・コントローラ(channel controller)は、コンピュータシステムの一部であり、周辺機器とメモリの間のデータのやりとりを制御する単純なプロセッサ(CPU)である。設計の洗練度によって「周辺プロセッサ」あるいは「DMAコントローラ」とも呼ばれる。また、チャネル・コントローラを使った入出力方式をチャネルI/O(: Channel I/O)と呼ぶ。
概要

多くの入出力タスクは複雑であり、データのフォーマットを変換するなどの処理をする必要がある。このような場合コンピュータのCPUはそのタスクを周辺デバイスに任せるが、周辺デバイスの処理は遅いため、CPUはその間ずっと何もしないで待っていることになる。このような状況を「I/Oバウンド」と呼ぶ。

チャネル・コントローラはこの問題を解決する。そのような入出力に関わる処理を行うためのCPUとメモリと回路を備えている。チャネル・コントローラはあまり高性能である必要はなく、柔軟性もないが、その仕事をするには十分である。実際にはコプロセッサの一種と見なすこともできる。

CPUは小さなチャネルプログラムをコントローラに送り、I/Oジョブを任せる[1][2]。チャネル・コントローラはCPUの助けを借りずにそのジョブを完了させる[1][2]。完了すると(あるいはエラーが発生すると)、チャネル・コントローラは割り込みでCPUに通知する[1][2]。なお、プログラムのロードや仮想記憶におけるデマンドページングなどの基本的なシステムタスクの場合、完了時以外にもプログラム制御割り込みをチャネルプログラム内で使用することがある。

チャネル・コントローラはコンピュータの主記憶装置に直接アクセスするので「DMAコントローラ」とも呼ばれる(DMAはdirect memory access)。しかし、DMAコントローラの定義はもっと広く、プログラム不可能なデバイスでもそのように呼ばれる。
歴史

最初のチャネルI/Oを採用したのは、真空管を使ったメインフレーム IBM 709 である[3]。その周辺機器である Model 766 Data Synchronizer が世界初のチャネル・コントローラであり、1957年に登場した。709 をトランジスタ化した後継機 IBM 7090 では[4]、2つ以上のチャネル (7607) を備え、最大8個のチャネルを制御できるチャネル・マルチプレクサ (7606) も取り揃えていた。

その後、System/360や初期のSystem/370の大型機でも、セレクタ・チャネルやマルチプレクサ・チャネルが大掛かりで高価な別プロセッサとして構成されている。例えば、IBM 2860(セレクタ・チャネル)、IBM 2870(マルチプレクサ・チャネル)、IBM 2880(ブロック・マルチプレクサ・チャネル)などがある。System/360でも小型機では、CPU内のマイクロコードでチャネルを実装し、CPU自体が「CPUモード」と「チャネルモード」の2つのモードで動作した。その後、チャネル・コントローラはCPUと同じ筐体内の別個のオンボードプロセッサとなった。

アムダールは、System/370互換機でチャネルI/Oを全く異なる方法で実装した。"C-Unit" と呼ばれる単一の内部ユニットで最大16本のチャネルをサポートしている。C-Unit は最大2個搭載可能で、全部で32本までのチャネルを制御できる。C-Unit は特殊な有限状態機械 (FSM) のように機能してプロセスをそれぞれ独立に実行する。これを「チャネル状態シフト (shifting channel state)」と呼ぶ。CPUサイクル毎(470/V6およびV5では32ナノ秒ごと、470/V7およびV8では26ナノ秒ごと)に、C-Unit が優先順位に従って次のチャネルの状態を完全に読み取る。チャネルの最新状態によって必要な動作が決定されており、そのチャネルの「タグ」が実行される。すなわち、主記憶上のデータの読み書きを行い、チャネルプログラムにOS通知が指定されていたらOSに通知を行い、C-Unitがそのチャネルの次の状態を格納完了すると、次の優先順位のチャネルへと移行する。C-UnitにはFIFOストレージが十分あり、全チャネルがFSMによってエミュレートされる。IBM 2860/2870/2880のエミュレーションが可能であり、制御卓からコマンドを発行することでエミュレーション方式を変更できる。本家よりも柔軟性が高かったため、IBMが等価な機能を実装するため設計変更を余儀なくされたほどである。

IBM(および互換機)以外で最初にチャネル・コントローラを使ったのは1965年の CDC 6600 スーパーコンピュータであり、10個の「周辺プロセッサ」(peripheral processor、PP)と呼ぶコンピュータを備えていた。PPは極めて強力で、実のところCDCの初期のコンピュータ CDC 160A の改良版だった。オペレーティングシステムはPP0上で動作していた。その後、チャネル・コントローラはほとんどのメインフレームで採用されており、より小型のコンピュータと比較した際の重要な利点となっていた。

チャネル・コントローラはシングルチップで複数チャネルを操作するものも作られ、NeXTコンピュータでも使われた。しかし、最近のコンピュータの性能向上が激しいため、またオペレーティングシステムが入出力待ち状態で停止することがなくなったため、小さなマシンでは使われなくなっていった。

チャネル・コントローラの機能はバスマスタリング周辺機器に受け継がれている。PCIDMAデバイスなどがある。主記憶とデバイス間のデータ転送をCPUの代わりに行い、処理完了時にCPUに割り込むということで、基本概念はチャネルI/Oと同じである。
解説

チャネルI/Oのリファレンス実装とされているのは、IBM System/360 とその後継メインフレームのものであるが、同様の実装は他のメインフレーム(CDCBullGEハネウェルユニシス)でも採用されている。

チャネルI/O方式を採用したシステムには、システムのCPUとは全く独立して入出力操作全体を制御する専用のハードウェア部品が存在する。チャネルI/O方式のシステムのCPUでは入出力のための機械語命令は一種類だけ存在するのが一般的である。その命令は「チャネルプログラム」の形式でI/O専用ハードウェアに入出力コマンド群を渡すための命令である。その命令を実行後、入出力処理はCPUを煩わせることなく行われ、オペレーティングシステムに通知すべきイベントが発生すると、I/OハードウェアがCPUに対して割り込みを通知する。

チャネルは独立したハードウェアコンポーネントであり、配下のコントローラや周辺機器の入出力を行う。


次ページ
記事の検索
おまかせリスト
▼オプションを表示
ブックマーク登録
mixiチェック!
Twitterに投稿
オプション/リンク一覧
話題のニュース
列車運行情報
暇つぶしWikipedia

Size:24 KB
出典: フリー百科事典『ウィキペディア(Wikipedia)
担当:undef