
コンピュータアーキテクチャにおいて、バス(歴史的にはデータハイウェイ[ 1 ]またはデータバスとも呼ばれる)は、コンピュータ内部のコンポーネント間、またはコンピュータ間でデータを転送する通信システムである[ 2 ] 。これは、ハードウェア(ワイヤ、光ファイバ、バススロットなど)と、通信プロトコルを含むソフトウェアの両方を包含する[ 3 ]。バスの本質は、複数のデバイスが通信できるようにする、通常は回路基板上のワイヤまたはトレースで構成される共有の物理的経路である。アドレス付きパケットをスイッチ経由でルーティングするネットワークとは異なり、バスは調停プロトコルを使用して、どのデバイスが共有経路を介してデータを送信できるかを管理する。
バスは、その役割に基づいて分類されます。例えば、CPUとメモリを接続するシステムバス(内部バス、内部データバス、メモリバスとも呼ばれる)や、周辺機器などの追加デバイスを接続するための拡張バス(周辺バスとも呼ばれる)などがあります。広く使用されているバスの例としては、高速内部接続用のPCI Express (PCIe)や、外部デバイス接続用のUSB( Universal Serial Bus)などがあります。
最新のバスは、パラレル通信とシリアル通信の両方を利用し、高度な符号化方式を採用することで速度と効率を最大限に高めています。ダイレクトメモリアクセス(DMA)などの機能は、CPUの介入なしにデバイスとメモリ間でデータを直接転送できるため、パフォーマンスをさらに向上させます。
アドレスバスとは、物理アドレスを指定するために使用されるバスです。プロセッサまたはDMA対応デバイスがメモリ位置を読み書きする必要がある場合、アドレスバス上でそのメモリ位置を指定します(読み書きする値はデータバスで送信されます)。[ 4 ]アドレスバスの幅は、システムが同時に転送できるメモリ量を決定します。[ 5 ]例えば、32ビットのアドレスバスを持つシステムは、2³²(4,294,967,296)個のメモリ位置をアドレス指定できます。 [ 6 ]各メモリ位置が1バイトを保持する場合、アドレス指定可能なメモリ空間は約4ギガバイト 。
初期のプロセッサでは、アドレス幅の各ビットにワイヤが使用されていました。たとえば、16 ビットのアドレス バスは、16 本の物理的なワイヤで構成されていました。バスが広くなり、長くなるにつれて、このアプローチはチップ ピンとボード トレースの数の点でコストが高くなりました。Mostek 4096 DRAM以降、マルチプレクサを使用して実装されたアドレス多重化が一般的になりました。[ 7 ]多重化されたアドレス スキームでは、アドレスは交互にバス サイクルで 2 つの等しい部分として送信されます。これにより、メモリに接続するために必要なアドレス バス信号の数が半分になります。たとえば、32 ビットのアドレス バスは、16 本のラインを使用してメモリ アドレスの前半を送信し、その直後にメモリ アドレスの後半を送信することで実装できます。
通常、制御バスには、行アドレスストローブ(RAS)と列アドレスストローブ(CAS)という2つの追加ピンがあり、アドレスバスが現在メモリアドレスの前半を送信しているのか後半を送信しているのかをDRAMに伝えるために使用されます。
個々のバイトにアクセスするには、多くの場合、バス幅全体(ワード)を一度に読み書きする必要があります。このような場合、アドレスバスの最下位ビットは実装されない可能性があり、代わりに、制御デバイスが送信されたワード全体から必要な個々のバイトを分離する責任を負います。たとえば、VESAローカルバスでは、最下位2ビットが欠落しているため、このバスはアラインされた32ビット転送に限定されます。
歴史的には、単語しか扱えないコンピュータの例もいくつか存在した。それはワードマシンと呼ばれるものだ。
メモリバスとは、コンピュータシステムにおいてメインメモリとメモリコントローラを接続するバスのことです。当初はVMEバスやS-100バスといった汎用バスが使用されていましたが、レイテンシを低減するため、現代のメモリバスはDRAMチップに直接接続するように設計されており、 JEDECなどのチップ標準化団体によって規格化されています。例としては、様々な世代のSDRAMや、 SLDRAMやRDRAMといったシリアルポイントツーポイントバスが挙げられます。
バスには、複数のワイヤでデータワードを並列に伝送するパラレルバスと、ビットシリアル形式でデータを伝送するシリアルバスがあります。通常、追加の電源および制御接続、差動ドライバ、および各方向のデータ接続が追加されるため、ほとんどのシリアルバスは、1-WireおよびUNI/Oで使用される最小の 1 本の導体よりも多くの導体を持ちます。データレートが増加するにつれて、パラレルバス間のタイミングスキュー、消費電力、電磁干渉、およびクロストークの問題を回避することがますます困難になります。この問題に対する部分的な解決策の 1 つは、バスをダブルポンプすることです。シリアルバスは、本質的にタイミングスキューやクロストークがないため、電気接続が少ないにもかかわらず、パラレルバスよりも高い全体的なデータレートで動作できることがよくあります。USB 、FireWire、およびSerial ATAはその例です。マルチドロップ接続は高速シリアルバスには適していないため、最新のシリアルバスのほとんどはデイジーチェーンまたはハブ設計を使用しています。
並列バスから直列バスへの移行は、コンピュータで使用される集積回路にシリアライザ/デシリアライザを組み込むことを可能にしたムーアの法則によって可能になった。 [ 8 ]
イーサネットなどのネットワーク接続は、一般的にバスとはみなされませんが、その違いは実際的なものではなく、概念的なものです。バスの特徴として一般的に用いられる属性は、接続されたハードウェアにバスから電力が供給されることです。これは、スイッチまたは分散電源を供給するバスアーキテクチャの起源がバスバーにあることを強調しています。シリアルRS-232、パラレルセントロニクス、IEEE 1284インターフェース、イーサネットなどの方式は、これらのデバイスも個別の電源を必要とするため、バスとはみなされません。ユニバーサルシリアルバスデバイスはバスから供給される電力を使用することもありますが、多くの場合、別の電源を使用します。この区別は、モデムが接続された電話システムによく表れています。この場合、RJ11接続とそれに関連する変調信号方式はバスとはみなされず、イーサネット接続に類似しています。電話回線接続方式は信号に関してバスとはみなされませんが、中央局では電話機間の接続にクロスバースイッチを備えたバスを使用しています。
しかし、電力がバスによって供給されるというこの区別は、ARINC 429、ARINC 629、MIL-STD-1553B (STANAG 3838)、EFABus ( STANAG 3910 )などのデータ接続が一般的にデータバス、または単にデータバスと呼ばれる多くの航空電子機器システムでは当てはまりません。このような航空電子機器のデータバスは通常、共通の共有メディアに接続された複数のライン交換可能アイテム/ユニット (LRI/LRU)を持つことが特徴です。 ARINC 429 のようにシンプレックス、つまり単一のソース LRI/LRU を持つ場合もあれば、ARINC 629、MIL-STD-1553B、および STANAG 3910 のようにデュプレックスで、接続されているすべての LRI/LRU が異なるタイミングで (半二重) データの送信機および受信機として動作できる場合もある。[ 9 ]
バスの周波数または速度は、MHz などの Hz で測定され、1 秒あたりのクロック サイクル数を決定します。1 クロック サイクルあたり、1 つ以上のデータ転送が行われる場合があります。1 クロック サイクルあたり 1 つの転送がある場合、シングル データ レート(SDR) と呼ばれ、1 クロック サイクルあたり 2 つの転送がある場合、ダブル データ レート(DDR)と呼ばれますが、RAM 以外では SDR 以外の信号方式の使用は一般的ではありません。例として、SDR を使用する PCIe があります。[ 10 ]各データ転送内には、複数のビットのデータが含まれる場合があります。これはバスの幅として説明され、バスが 1 クロック サイクルあたりに転送できるビット数であり、各導体が一度に 1 ビットを転送する場合、バスが持つ物理的な電気導体の数と同義です。[ 11 ] [ 12 ] [ 13 ] 1 秒あたりのビット数でのデータ レートは、1 クロック サイクルあたりのビット数に周波数と 1 クロック サイクルあたりの転送数を掛けることで得られます。[ 14 ] [ 15 ]あるいは、 PCIeなどのバスでは、PAM4 [ 16 ] [ 17 ] [ 18 ]のような変調または符号化を使用できます。これは、2 ビットをシンボルにグループ化し、ビット自体の代わりにシンボルを転送することで、バスの周波数を上げずにデータ転送速度を向上させることができます。128/130b (b はビット) 符号化のように、エラー訂正も可能な符号化を使用すると、実効または実際のデータ転送速度/レートが低くなる場合があります。[ 19 ] [ 20 ] [ 10 ]データ転送速度は帯域幅とも呼ばれます。[ 21 ] [ 22 ]
最も単純なシステムバスは、入力データ線、出力データ線、アドレス線が完全に分離されています。コスト削減のため、ほとんどのマイクロコンピュータは双方向データバスを採用しており、異なるタイミングで入力と出力に同じ配線を再利用しています。[ 23 ]
一部のプロセッサでは、アドレスバス、データバス、および制御バスの各ビットに専用の配線を使用しています。例えば、64ピンのSTEバスは、8ビットのデータバス専用の8本の物理配線、20ビットのアドレスバス専用の20本の物理配線、制御バス専用の21本の物理配線、および各種電源バス専用の15本の物理配線で構成されています。
バス多重化では配線が少なくて済むため、初期のマイクロプロセッサやDRAMチップの多くでコストが削減されます。一般的な多重化方式の1つであるアドレス多重化については既に述べました。別の多重化方式では、アドレスバスのピンをデータバスのピンとして再利用します[ 23 ] 。これは従来のPCIや8086で使用されている方式です。さまざまなシリアルバスは多重化の究極の限界と見なすことができ、アドレスビットとデータビットをそれぞれ1つずつ、1つのピン(または1つの差動ペア)を通して送信します。
時を経て、IEEEバスアーキテクチャ標準委員会(BASC)、IEEEスーパーバス研究グループ、オープンマイクロプロセッサイニシアチブ(OMI)、オープンマイクロシステムイニシアチブ(OMI)、EISAを開発した9人組など、複数のグループが様々なコンピュータバス標準に取り組んできました。
初期のコンピュータバスは、コンピュータのメモリと周辺機器を接続するワイヤの束でした。初期のオーストラリアのCSIRACコンピュータでは、逸話的に「デジタル幹線」と呼ばれていましたが[ 24 ]、電力バス、つまりバスバーにちなんで名付けられました。ほとんどの場合、メモリ用のバスが1つと、周辺機器用のバスが1つ以上ありました。これらは、まったく異なるタイミングとプロトコルを持つ別々の命令によってアクセスされました。
最初の課題の一つは、割り込みの使用でした。初期のコンピュータプログラムは、周辺機器が準備完了になるまでループで待機することで入出力処理を行っていました。これは、他のタスクを実行しなければならないプログラムにとっては時間の無駄でした。また、プログラムが他のタスクを実行しようとすると、再度チェックするのに時間がかかりすぎてデータが失われる可能性がありました。そこでエンジニアたちは、周辺機器がCPUに割り込みをかけるようにしました。CPUは一度に1つの周辺機器のコードしか実行できないため、割り込みには優先順位を付ける必要がありました。また、デバイスによっては、他のデバイスよりも時間的な制約が厳しいものもありました。
ハイエンドシステムでは、チャネルコントローラという概念が導入されました。これは基本的に、特定のバスの入出力処理に特化した小型コンピュータです。IBMは1958年にIBM 709でこれを導入し、その後、同社のプラットフォームの一般的な機能となりました。Control Data Corporationなどの他の高性能ベンダーも同様の設計を採用しました。一般的に、チャネルコントローラは可能な限りすべてのバス操作を内部で実行し、CPUが他の処理でビジー状態になっているときにデータを転送し、必要な場合にのみ割り込みを使用するようにしました。これによりCPU負荷が大幅に軽減され、システム全体のパフォーマンスが向上しました。

モジュール性を実現するために、メモリバスとI/Oバスを統合システムバスに組み合わせることができます。[ 25 ]この場合、単一の機械的および電気的システムを使用して、多くのシステムコンポーネント、または場合によってはすべてのコンポーネントを接続できます。
その後、コンピュータプログラムは複数のCPUで共通のメモリを共有するようになりました。このメモリバスへのアクセスも優先順位付けする必要がありました。割り込みやバスアクセスに優先順位を付ける簡単な方法は、デイジーチェーン接続を用いることでした。この場合、信号は物理的または論理的な順序で自然にバスを流れるため、複雑なスケジューリングは不要になります。
デジタル機器株式会社(DEC)は、量産型ミニコンピュータのコストをさらに削減し、周辺機器をメモリバスにマッピングすることで、入出力デバイスがメモリ位置のように見えるようにしました。これは、1969年頃にPDP-11のUnibusで実装されました。 [ 26 ]
初期のマイクロコンピュータのバスシステムは、基本的にCPUのピンに直接、またはバッファアンプを介して接続されたパッシブバックプレーンで構成されていました。メモリやその他のデバイスは、CPU自体が使用するアドレスピンとデータピンと同じピンを並列に接続してバスに追加されました。通信はCPUによって制御され、CPUはデバイスをメモリブロックのように扱い、同じ命令を使用してデータを読み書きしました。これらの処理はすべて、CPUの速度を制御する中央クロックによってタイミングが調整されました。それでも、デバイスは別のCPUピンに信号を送ることでCPUの処理を中断しました。
例えば、ディスクドライブコントローラは、新しいデータの読み取り準備ができたことをCPUに通知し、CPUはそれに応じてディスクドライブに対応するメモリ位置を読み取ることでデータを移動します。初期のマイクロコンピュータはほぼすべてこの方式で構築されており、Altair 8800コンピュータシステムのS-100バスがその始まりです。
IBM PCの場合、類似した物理アーキテクチャが採用されているにもかかわらず、周辺機器 (inおよびout) およびメモリ (movおよびその他 ) にアクセスするための命令が統一されておらず、依然として異なる CPU 信号が生成されており、これらを使用して別の I/O バスを実装できる可能性があります。
これらのシンプルなバスシステムは、汎用コンピュータに使用する際に深刻な欠点があった。バス上のすべての機器は単一のクロックを共有していたため、同じ速度で通信する必要があったのだ。
CPU の速度を上げると、すべてのデバイスの速度も上げなければならないため、難しくなります。すべてのデバイスを CPU と同じ速度にすることが実用的または経済的でない場合、CPU は待機状態に入るか、一時的にクロック周波数を下げて動作し、コンピュータ内の他のデバイスと通信する必要があります[ 27 ] 。組み込みシステムでは許容される問題ですが、汎用でユーザーが拡張可能なコンピュータでは、この問題は長く許容されませんでした。
このようなバスシステムは、市販の汎用機器で構築する場合、設定が困難です。通常、拡張カードを追加するたびに、メモリアドレス、I/Oアドレス、割り込み優先度、割り込み番号を設定するために、多数のジャンパーが必要になります。
NuBusのような第2世代バスシステムは、これらの問題のいくつかに対処しました。これらのシステムは通常、コンピュータを2つのアドレス空間に分割し、一方の側にCPUとメモリ、もう一方の側に各種周辺機器を配置しました。バスコントローラはCPU側からデータを受け取り、周辺機器側に転送することで、通信プロトコルの負荷をCPU自体から周辺機器側に移しました。これにより、CPUとメモリ側は周辺バスとは別に進化することができました。バス上のデバイスはCPUの介入なしに相互に通信できました。これはパフォーマンスの大幅な向上につながりましたが、カードの複雑さも大幅に増しました。これらのバスは、データパスのサイズを大きくすることで速度の問題にも対処しました。第1世代の8ビットパラレルバスから、第2世代では16ビットまたは32ビットへと移行し、ジャンパーを置き換えるためにソフトウェアセットアップ(後にプラグアンドプレイとして標準化)を追加しました。
しかし、これらの新しいシステムは、以前のシステムと共通する特徴を一つ持っていました。それは、バス上のすべての機器が同じ速度で通信しなければならないという点です。CPUは独立して速度を上げることができましたが、CPUとメモリの速度は、通信先のバスよりもはるかに速いペースで向上し続けました。その結果、バスの速度は現代のシステムが必要とする速度よりもはるかに遅くなり、マシンはデータ不足に陥りました。この問題の特に一般的な例として、ビデオカードがPCIのような新しいバスシステムさえもすぐに凌駕するようになり、ビデオカードを駆動するためだけにAGPを搭載したコンピュータが登場したことが挙げられます。2004年までに、AGPはハイエンドのビデオカードやその他の周辺機器によって再び時代遅れとなり、新しいPCI Expressバスに取って代わられました。
外部デバイスも独自のバスシステムを採用するケースが増えてきました。ディスクドライブが初めて登場した頃は、バスにカードを差し込むことでマシンに追加されていたため、コンピュータのバスには多くのスロットが設けられていました。しかし、1980年代から1990年代にかけて、SCSIやIDEといった新しいシステムが登場し、こうしたニーズに応えるようになりました。そのため、現代のシステムではほとんどのスロットが空いています。現在では、一般的なマシンには様々なデバイスをサポートするために、およそ5種類のバスが搭載されていると考えられます。
2001年頃から、 HyperTransportやInfiniBandといった第3世代バスが市場に登場し始めています。これらのバスは物理的な接続に関して非常に柔軟性が高く、内部バスとしてだけでなく、異なるマシン同士を接続するためにも使用できます。しかし、様々な要求に対応しようとすると複雑な問題が発生する可能性があるため、これらのシステムの開発作業の多くは、ハードウェアそのものよりもソフトウェア設計に重点が置かれています。一般的に、これらの第3世代バスは、初期のシステムよりもプロトコルのオーバーヘッドが大きく、ネットワークに近い構造になっており、複数のデバイスが同時にバスを使用できるという特徴があります。
Wishboneのようなバスは、コンピュータ設計における法的および特許上の制約をさらに取り除くことを目的として、オープンソースハードウェア運動によって開発された。
Compute Express Link (CXL) は、次世代データセンターのパフォーマンスを加速するために設計された、高速な CPU とデバイス間および CPU とメモリ間のオープン標準インターコネクトです。[ 28 ]
多くのフィールドバスはシリアルデータバスであり(システムバスや拡張カードのパラレルデータバス部分と混同しないように注意が必要)、そのうちのいくつかはRS-485の電気的特性を利用した上で、独自のプロトコルとコネクタを規定している。
その他のシリアルバスには以下が含まれます。
コンピュータ内部のバスは並列伝送方式です。コンピュータ内部では...
{{cite journal}}:ジャーナルを引用するには|journal=(ヘルプ)