1

レガシー NIC などの 32 ビット デバイスを使用する x86_64 システムの場合: NIC と DRAM の間で DMA を実行する場合、メモリ アドレスは下位メモリ (4GB 未満) にある必要がありますか?

ところで、OS は、PCI デバイス用に予約されたメモリ アドレス空間リソース、つまり BAR に格納されているアドレスをどのように認識するのですか?

4

1 に答える 1

4

PCI 構成スペースに関するウィキペディアのエントリを参照してください。PCI BAR ビットは、メモリ アドレッシング要件を伝達するために使用され、PCI 列挙中に設定されます。

PCI デバイスが 32 ビット (32 ビット アドレスしか処理できないことを意味する) の場合、おそらく "Locatable" 値を "0" (任意の 32 ビット) に設定し、アドレスを 4GB 未満に保ちます。

デバイスが 64 ビット アドレスを処理できる場合は、"Locatable" を 2 に設定します。

同様に、構成中に、PCI デバイスは BAR を介してそのメモリ要件を伝達し、OS は最終的に BAR アドレスを設定します。

問題のウィキペディアのセクションを引用するには:

指定された BDF コンビネーション ベンダー ID レジスタへの読み取りが成功すると、BIOS または OS はそれが存在することを認識します。すべての 1 を BAR に書き込み、デバイスが要求したメモリ サイズを 0 の形式で読み戻します。アドレスは無視されます。(原文のまま)

要約
すると、デバイス ハードウェアの機能に依存します。

PCI デバイスの列挙中に、ホスト OS が PCI デバイスを検出すると、BAR ビットを使用してデバイスにメモリ アドレス位置情報を要求します。2 段階のプロセスで BAR 自体を使用して、最初にメモリ サイズの要件を確立し、次にベース アドレスを構成します。

于 2012-10-24T14:25:40.747 に答える