アービターとは、共有リソースへのアクセスを割り当てる電子機器のことである。
コンピュータバスのアービトレーションを実行する方法は複数あり、最も一般的な種類は次のとおりです。[ 1 ] [ 2 ]
バスアービタは、マルチマスタバスシステムにおいて、各バスサイクルでどのバスマスタがバスを制御するかを決定するために使用される装置です。最も一般的なバスアービタは、システムバスシステムにおけるメモリアービタです。
メモリアービタは、共有メモリシステムで使用されるデバイスで、各メモリサイクルで、どのCPUがその共有メモリにアクセスできるかを決定します。[ 3 ] [ 4 ] [ 5 ]
一部のアトミック命令は、他のCPUがアトミックな読み取り・変更・書き込み命令の「途中」でメモリを読み取ることを防ぐために、アービタに依存している。
メモリアービタは通常、メモリコントローラ/DMAコントローラに統合されています。
従来の PCIなどの一部のシステムでは、通常はチップセットに統合されている、バス アービタとして指定できる単一の中央集中型バス アービトレーション デバイスがあります。[ 6 ] 他のシステムでは、分散型バス アービトレーションが使用され、すべてのデバイスが協力して次に誰が処理するかを決定します。[ 7 ] [ 8 ]
メモリアービタに接続されているすべてのCPUのメモリアクセスサイクルが同期している場合、メモリアービタは同期アービタとして設計できます。そうでない場合は、メモリアービタは非同期アービタとして設計する必要があります。
非同期回路では、非同期要求間で共有リソースへのアクセス順序を選択するために、 重要なアービタが使用されます。その機能は、2つの操作が同時に発生すべきでない場合に、同時に発生するのを防ぐことです。たとえば、複数のCPUやコンピュータメモリにアクセスする他のデバイスを持ち、複数のクロックを持つコンピュータでは、同期されていない2つのソースからの要求がほぼ同時に到着する可能性があります。「ほぼ」とは、サブフェムト秒の範囲で非常に近い時間である可能性があります。メモリアービタは、どちらの要求を最初に処理するかを決定する必要があります。残念ながら、これを固定時間で行うことはできません[Anderson 1991]。
アービタは同点の場合の判定を行います。フリップフロップ回路と同様に、アービタには2つの選択肢に対応する2つの安定状態があります。2つの要求が数ピコ秒(現在ではフェムト秒)以内にアービタに到着した場合、回路は同点を解消するための安定状態に到達する前に準安定状態になる可能性があります。古典的なアービタは、準安定状態にあるときに激しく振動しないように、また、通常は余分な電力を使用することで、準安定状態からできるだけ速やかに減衰するように特別に設計されています。入力が提供された後、安定状態に到達していない確率は時間とともに指数関数的に減少します。
この問題に対する確実な解決策は1970年代半ばに見出された。固定時間で決定を下すアービタは不可能だが、難しい場合(僅差の判定)に少し時間がかかるアービタは機能させることができる。アービタがまだ安定状態に落ち着いていないことを検出する多段同期回路を使用する必要がある。アービタは安定状態に達するまで処理を遅延させる。理論的には、アービタが安定するまでに任意の長い時間をかけることができる(ブリダンの原理を参照)が、実際にはゲート遅延時間の数倍を超えることはほとんどない。この問題を解決するために「3状態フリップフロップ」を構築する方法を説明した古典的な論文は[Kinniment and Woods 1976]であり、アービタ設計におけるよくある間違いについてエンジニアに注意を促す[Ginosar 2003]もある。
この結果は、マルチプロセッサコンピュータがこれなしでは安定して動作しないため、実用上非常に重要である。最初のマルチプロセッサコンピュータは1960年代後半に登場したが、これは信頼性の高いアービタの開発以前のことである。各プロセッサに独立したクロックを持つ初期のマルチプロセッサの中には、アービタの競合状態によって動作が不安定になるものもあった。今日では、これはもはや問題ではない。
アービタは、共有リソースへのアクセスを割り当てるために、同期コンテキストでも使用されます。ウェーブフロントアービタは、ある種の大型ネットワークスイッチに搭載されている同期アービタの一例です。