バスマスタリングとは、バスに接続された複数のデバイスが、自らデータ転送を開始できる機能のことです。従来のバスでは、
CPUなどの特定のデバイスのみがトランザクションを開始できましたが、バスマスタリングをサポートするバスでは、複数のデバイスが「バスマスター」として動作できます。この機能により、特に最近のバスアーキテクチャであるPCIなどでは、システム全体の性能向上が期待できます。
一部のリアルタイム
[オペレーティングシステム]では、デバイスがバスマスターになることを禁止する場合があります。これは、バスマスタリングによる
レイテンシの変動を避け、システム全体のリアルタイム性を維持するためです。バスマスタリングによって、データ転送のタイミングが予測不可能になることを防ぐ目的があります。
バスマスタリングの理論上では、任意の周辺機器が他の周辺機器と直接通信可能となりますが、実際には主記憶とのDMA(ダイレクトメモリアクセス)の実行に利用されるケースが多くなっています。ただし例外として、ビデオキャプチャカードやTVチューナーカードなどのビデオオーバーレイ機能では、バスマスタリングが活用されています。また、グラフィックスカードがメインメモリから描画要素を直接取得し、
CPUの関与なしに画面描画を行う際にも、バスマスタリング技術が用いられています(例: Windows VistaのAero、Mac OS XのQuartz Express)。これにより、
CPUの負荷を大幅に軽減し、よりスムーズな描画処理を実現します。
複数のデバイスがバスマスターになるためには、同時に複数のデバイスがバスを占有しないように調整する仕組みが必要です。この調停方法はバスの種類によって異なり、例えばSCSIでは各デバイスに割り当てられたIDによって固定の優先順位が決定されます。PCIの場合、調停アルゴリズムは実装に依存し、優先順位の設定はシステムによって異なります。
バスマスタリングは、コンピュータの性能向上に不可欠な技術ですが、その実装には注意が必要です。システムの安定性とパフォーマンスのバランスを考慮し、適切に活用することが重要となります。
参考資料:
2.PnPの仕事:「バスリソース」の割り当て The Linux Plug-and-Play-HOWTO(Linux Japanese FAQ Project)