バス (コンピュータ)
バス (bus) とは、コンピュータの内外、各回路がデータを交換するための共通の経路を指すコンピュータ用語である。
目次
バス型トポロジー
コンピュータにおいて、1つの信号線・通信線に複数のデバイスがぶら下がる構造を「バス型トポロジー」と言う。(詳細はネットワーク構成を参照。)本項目の「バス」の由来はこれである(もしくはそのもの)。
そのため、1対1で接続される専用経路(「ポイントツーポイント」)の場合はバスと言わない場合も多い。バスに似た用語としてチャネルがあるが、チャネルは「入出力チャネル」のように、メモリと入出力との間の通信路を指す事が多い。
概説
多くのコンピュータは、CPUなど、コンピュータの中心機能と、周辺機器や各種制御部を繋ぐためにバスを使っている。アーキテクチャが単純だった黎明期のコンピュータでは、各要素が単一のバスに接続されていた。たとえば、サン・マイクロシステムズの初期のワークステーションでは、VMEバスやマルチバスを使っていた。しかし、コンピュータの性能が向上するにつれて、CPUと各機器とを繋ぐバスの伝送容量も向上させる必要があり、次々と新しいバスに切り替わっていった。
マイクロプロセッサのメモリバスもこれまではバス型トポロジが主流だったが、メモリの高速化に対応してチャネルへと移行しつつある。また、マルチプロセッサ構成を採るワークステーションが性能を最大化するために複数のプロセッサとメモリーとの間での多対多の同時通信を行えるようにしたクロスバースイッチを採用してきたように、マルチコアやメニーコアを備えた新世代の高性能マイクロプロセッサの内部でも、多くのコアとキャッシュメモリーや外部との高速大容量の伝送を可能にするために、チャネルに代わってクロスバースイッチやリングバスが採用されるようになっている。
バスの種別
基本的には大別して、コンピュータ内部の機器をつなぐ内部バスと、外部機器と接続する外部バスに分かれる。また、バスの配線によって、シリアルバスとパラレルバスに分かれる。
なお、内部バス・外部バスの内部・外部と言うのはCPUのチップ、コンピュータの内部基板(マザーボード等)、コンピュータ装置の筐体、等のそれぞれの内外として視点が変わる。例として「CPU内部バス」等と言う場合もある。
内部バス・外部バス・拡張バスの三者として区別することもあり、この場合、内部バスはCPU内部バス、外部バスはCPUの外側から拡張バスまでの間、拡張バスはPCIなどの拡張カードを直接接続するバスを指す。
マイコンの初期にはS100バスが、パソコンでは、かつてISAバスが使用されていたが、2006年現在ではPCIとその後継であるPCI Expressが主流である。
シリアルバスとパラレルバス
シリアルバス
テンプレート:Main 1ビットずつ順番にデータを転送するバスをシリアルバスと呼ぶ。通常はクロック信号線は存在せず、受信側での復調に必要なクロックのタイミングはデータ信号に重積して送っている。通信線路の本数が少なければシールドを充実させたり、平衡接続も比較的容易になるため高周波信号が扱いやすくなる。複数の通信線路では互いの信号間でのタイミングがずれるタイミング・スキュー問題が起きるがシリアル化によって回避できる。クロストーク(干渉)の問題も減少する。求められる通信容量の増大に対応してシリアルバスを複数組、束ねるものが現われているが、それぞれの伝送路に流れているのは個別のシリアル信号であって互いの信号間にクロックの同期はない。シリアルバスの多くが通信線路の両端に送信端と受信端を持つチャネルであり、物理的には本来のバス型トポロジーではない。チャネルであれば原理的には線端反射やスタブの影響を受けずにノイズの少ない高周波動作に適した通信路が得られる。初期のシリアルバスは、パラレルバスよりも遙かに低速だった。
など
パラレルバス
シリアルバスが1ビットずつデータを転送するのに対して、元データそのものや元データから切り出した複数ビットをひとかたまりにして、同時に複数本の通信路で情報を伝送するバスである。パラレルバスが必ずバス型トポロジーを採るとは限らないが、バス型トポロジーを採用するものが多い。クロック信号の専用線がデータ線と平行して設けられており、受信側でのデータ復調の同期に使われる。
信号線の本数が多いので、一般的には不平衡接続が採用されており、シールドの不足や線路間のクロストーク、路線長・LRC特性の違いなどによるスキューによって高速伝送にはあまり向かない。
ビット数すなわち平行する線路数は、8・16・32が多い。
コンピュータで使用されるデータバスやアドレスバスに採用例が多く、外部デバイスをつなぐバスとしても用いられ、GPIB、IDE/(パラレル)ATA、SCSI、PCIなどがある。高速化に限界があるため、PCIの改良版PCI ExpressやパラレルATAの改良版シリアルATAでは、データラインはシリアルバスとなっている。
制御
バス型トポロジーを採るバスでは、複数の送信回路が存在するために同時に送信を行わないよう、伝送路へ信号を送り出す権利を調停する回路が設けられるのが一般的である。このような回路はバス・アービターと呼ばれ、バス・アービトレーションを行う。調停回路を設けずにバスの使用権を各送信回路へ順番に与える方式もあるが、バスの伝送効率は悪くなる。
信号の劣化
チャネルと異なり、複数の送受信回路が存在するバス型トポロジーを採るバスでは、仮に両端の終端処理を正しく行っても、途中の送受信回路の接続線やコネクタ類は「スタブ」と呼ばれる引き込み部分を構成してこの部分で信号波形は劣化する。仮に途中のコネクタが空のまま放置されればコネクタの引き込み線部分から反射が生じる。路線長の違いや伝送特性の違いなどを補正するために、伝送路を使用する前にトレーニングを行って平行するデータ線の信号特性を最適化するような工夫も行われたが、長い配線を引き回しながら十分なシールドを行うことは難しく、コモンモードノイズは不平衡伝送では除けず、外来ノイズやクロストークを抑えながら高速信号の波形を乱さないように扱うには限界がある。
主なコンピュータ用バス
- S-100バス - Altair 8800で採用、後のIEEE-696
- VME - 68000用汎用バス、ワークステーションで多く採用例 後のIEEE 1014-1987
- Small Computer System Interface - それまでのSASIを元に開発、略称「SCSI」
- ISA - PC/ATで採用
- Cバス - 日本電気PC-9800シリーズの拡張バス
- NuBus - 初期のアップルやNeXTで採用
- VLバス - ISA後継のグラフィクスバス用バス
- MCA - IBMが開発したISAバスの後継
- EISA - MCAに対抗して制定
- SBus - Sparc用拡張バス、VMEバスから置換、IEEE 1496
- PCI - インテルの提案で広範に普及した汎用拡張バス
- FSB - インテルのCPUバス、高速化に伴い呼称も変化している
- Direct Rambus - ラムバス社が設計したRDRAM専用のメモリインターフェースバス
- パラレルATA - ストレージ用のバス、後継のシリアルATAはスター型トポロジー
- USB - 当初はレガシー代替が目的
- IEEE 1394 - アップルのFirewireを規格化、i.LINKとも
- Low Pin Count - ISAの代替規格
- イーサネット - 現在主流となっている規格の論理上のネットワーク・トポロジーはバス型
- AGP - PCI上位互換のグラフィックス用高速バス
- PCI Express - PCI、AGPの後継
- HDMI - DVIから発展したAV機器向けインターフェースで、デイジーチェーンによるバス接続が可能
- Thunderbolt - インテルとアップルが共同開発した汎用バス、PCI ExpressとDisplayPortを基盤としている
CPU内部バスの構造
CPUのマイクロチップ内部の信号線。CPUアーキテクチャ図により示されることが多い。 テンプレート:節stub
CPU外部バスの構造
CPU外部のバスあるいは単にCPUバスと言う。ここでは、CPUとメモリ・入出力装置が直接バスで接続される簡単な構成を考えてみる(今日のパソコンはもう少し複雑である。比較的古い時代のコンピュータでは、各要素が1つのバスに接続されていた。SUNのVMEバスやMULTIBUSなど。)
基本的な例としてのバスの構造は下記のようになる。
アドレスバス
テンプレート:Main アドレスを転送するために使われる線。使われる線の本数をアドレスバス幅と言う。メモリのアドレスや入出力装置 (I/O) のアドレスが出力される。例えば、Z80ではピン(信号)A00 - A15がアドレスバスである。アドレスバス幅は16bitで、64KBのメモリを扱える。
メモリアドレスバスとI/Oアドレスバスは、ピンを共用する場合も、独立している場合もある。
データバス
CPUと、メモリやI/Oとの間でデータを転送するために使われる線。基本的には双方向通信が基本だが、S100バスのように、コンピュータ→周辺機器、周辺機器→コンピュータのデータの転送を分けたバスもある。使われる線の本数をデータバス幅という。
データバスもメモリ用とI/O用とで、ピンを共用する場合も、独立している場合もある。
制御線
アドレスバスやデータバスで実際に入出力を行うタイミングや、その他CPUと外部との間での必要な制御情報を遣り取りする信号線。入力・出力は用途に応じて別。
例として、各バスに有効なデータが乗っている事を示す。制御信号のエッジで実際の転送動作が行われる。例えば、Z80ではMREQピンがアクティブになる事によりメモリとの転送である事を示し、RDピンはCPUへの入力(読み込み)、WRピンはCPUからの出力(書き込み)時にアクティブになる。
単純な構成では上記のようになるが、今日のより詳細な技術についてはCPUバスを参照のこと。
コンピュータ内部のバス(外部バス)
コンピュータ内部、すなわちCPUの外側から装置の内部までの間では、色々なバスが使われている。上記のCPU外部バスを含めて単に「外部バス」と言うこともある。
単純なマイコンでは上記のCPU外部バスの延長線の構成を取ることが多いが、今日ではパソコンでもチップセットによりシステムバス、メモリバスや入出力バスが統合されたチャネル構成を取る。
システムバス
コンピュータ内の各コンポーネントが接続されるバスである。上記のCPU外部バス、すなわちCPUから直接出た信号線を指すこともある。
フロントサイドバスとも呼ばれるがこの用語には諸説ある。今日のパソコンではCPUから出たシステムバスは「ノースブリッジ」と呼ばれるチップセットに集約して接続されるのが一般的である。
メモリバス
メインメモリを接続するバスである。
入出力バス
I/Oバス。入出力装置が接続されるバスである。DMAによりチャネルバス構成を取る場合もある。今日のパソコンでは周辺機器との入出力のうち、PCI / IDE / USBなどの比較的低速なI/Oバスについては、「サウスブリッジ」と呼ばれるチップセットが制御する。AGP、PCI Expressなどの比較的高速なI/Oバスはノースブリッジに直接接続される。
総論として、現在のPCの構成では、バス構成よりもチャネル構成に近いので、外部機器(カード)を接続するバス(外部バス、拡張バス)が主に使われる。I/Oバスやメモリバスは、1990年代以前のPCや、現在もマイコンなどによく使われている。
拡張バス
拡張バスとは、PCIなどの拡張カードを直接接続するバスを指す。拡張バスの項目を参照のこと。
バックプレーンバス
コンピュータの各モジュールを対称に結合するバックプレーンにバスを置く構成もある。そのようなバスをバックプレーンバスと言う。