図2を見よう。
図2:計算機とバス(1)
CPUはメインメモリやI/O機器が接続されるバスのアダプタとシステムバスを
介して繋がっています。I/Oバスとシステムバスを切り離す理由はスピードの
違いから来ています。I/Oが同じシステムバスにあると、
CPUの性能が向上してCPUとメモリ間のスピードが向上しても
遅いI/Oが入ってボトルネックになります。スピードによる階層構造をとることで
計算機のシステム性能を向上させます。しかし、これはデバイスのアクセス方法を
さらに複雑にさせます。メインメモリのように直接ユーザプログラムから見えるのでは
なく、バスアダプタという仲介を通して見えることになります。
従って、I/Oバス上にある
ディスクやVME/CAMACなどデバイスは接続の方法で異なった見え方をします。
大きく分けると、
- VMEバスのようにデータが大きなバス空間上のメモリのように見える。
- SCSIバスのようにコントロールステータスレジスタや
データレジスタなどのレジスタを介してデータが読み書きできる。直接
ユーザプログラムのアドレスから見えない。
これらのデバイスへのインターフェースの実装法は利用の目的により
決まって来ます。
図3は図2と違って最近の計算機のバス構成法を示しています。
図3:計算機とバス(2)
CPUとメモリはブリッジによって結ばれ、システムバスのように
バスを使用しません。これはますます向上するCPUとメモリ間のスピードを
さらに向上させる方法です。ボード上にバスを構成するとラインの長さや
周辺回路からのノイズ等でスピードの向上が望めません。そこで、バスを
シリコンチップ上に持って来て、ブリッジとして1つのチップに載せるのです。
バスを接続する方法はいろいろあり、クロスバースイッチなどは
高速なバス構成法の1つです。このクロスバースイッチを1つのチップ上に
載せてしまえばいいのです。図2はCompactPCIを例にしました。
図4は大変複雑に見えます。これはRISC/UNIXシステムからVMEバスを
図4:計算機とバス(3)
介してCAMACを接続した例です。システムバス上にVMEバスアダプタが
あります。そこからVMEクレートに向かって特別なI/Oバスがだされ、
VMEバスのマスタコントローラとなるカードに繋がります。
そこにはVMEバスがあり、1つのVMEモジュールとしてCAMACの
コントローラがあります。このモジュールからCAMACのクレートに向かって
さらに特別なケーブルが出され、CAMACクレートコントローラに
接続されます。これは1つの例ですが、接続の方法はさまざまです。
ユーザプログラムはいちいちこのハードウエア構成に従って
書いていたのでは、汎用性がなくハードウエアが作られる度に
書き直されなくては成りません。自分が操作したい
デバイスの操作法に集中してプログラミングしたい、ソフトウエアを
中間に来るバスの構成法には依存させたくない、など、もっと
合理的にソフトウエアを構成する方法はないか?